En nuestro sistema, existen los requisitos que queremos mover algunas líneas de origen (con baja precisión) a líneas de referencia (con alta precisión). Las siguientes imágenes muestran los casos de uso normales. La roja es una línea de origen y la azul es una línea de referencia.
Para este caso, la línea de origen se movería parcialmente, y el resultado sería como muestra la línea verde:
Hay situaciones en las que la línea de origen debe moverse por completo.
Resultado:
Actualmente, nuestra solución es proyectar el punto de cabecera / final de la línea de origen a la línea de referencia y viceversa, luego buscar los puntos proyectados en la línea de origen y de referencia. Con estos puntos proyectados, podemos extraer la parte necesaria de la fuente y la línea de referencia y luego combinarlos en uno nuevo.
Esto funciona para la mayoría de los casos, pero hay casos en que este método no funciona. Específicamente, cuando cualquiera de las líneas tiene forma de "C" o el punto de cabecera está muy cerca del punto final. Las siguientes dos imágenes dan el escenario.
Aplicando mi algoritmo, obtenemos el resultado:
En cierto modo, es comprensible porque el algoritmo actual solo encuentra puntos proyectados y extrae líneas.
Lo que esperábamos es algo como esto:
Entonces, lo que necesito es un algoritmo más robusto para hacer esto, de modo que también pueda manejar casos especiales como el anterior. Intenté proyectar todos los puntos de una línea a otra y encontrar los dos puntos proyectados más cercanos al punto de inicio / final de la línea proyectada, pero no tuve suerte. Aún así puedo encontrar casos que dan resultados inesperados.
¿Alguien ha encontrado problemas similares antes? También sería genial si hay un software o una biblioteca que pueda hacer un trabajo similar. Cualquier respuesta será apreciada.