Dans notre système, nous avons besoin de déplacer certaines lignes source (avec une faible précision) vers des lignes de référence (avec une haute précision). Les images suivantes donnent les cas d'utilisation normaux. Le rouge est une ligne source et le bleu est une ligne de référence.
Dans ce cas, la ligne source serait déplacée partiellement et le résultat serait comme le montre la ligne verte:
Il y a des situations où la ligne source doit être déplacée complètement.
Résultat:
Actuellement, notre solution consiste à projeter le point de tête / extrémité de la ligne source sur la ligne de référence et vice versa, puis à trouver les points projetés sur la ligne source et de référence. Avec ces points projetés, nous pouvons extraire la partie nécessaire de la ligne source et de référence, puis les combiner en une nouvelle.
Cela fonctionne pour la plupart des cas, mais il y a des cas où cette méthode ne fonctionne pas. Plus précisément, lorsque l'une des lignes a la forme d'un "C" ou que le point de tête est très proche du point final. Les deux images suivantes donnent le scénario.
En appliquant mon algorithme, nous obtenons le résultat:
D'une certaine manière, cela est compréhensible car l'algorithme actuel trouve simplement les points projetés et extrait les lignes.
Ce que nous attendions est quelque chose comme ceci:
Donc, j'ai besoin d'un algorithme plus robuste pour le faire afin qu'il puisse également gérer des cas spéciaux comme le précédent. J'ai essayé de projeter tous les points d'une ligne à une autre et de trouver les deux points projetés les plus proches du point de tête / extrémité de la ligne projetée, mais il n'y a pas eu de chance. Je peux toujours trouver des cas qui donnent des résultats inattendus.
Quelqu'un a-t-il déjà rencontré des problèmes similaires? Ce serait également formidable s'il existe un logiciel ou une bibliothèque capable de faire un travail similaire. Toute réponse sera appréciée.