2010-08-08 4 views
1

L'algorithme simple pour créer une polyligne parallèle à une polyligne existante est simple: vous pouvez calculer la normale de chaque sommet (comme la moyenne des normales du segment) et déplacer les sommets en utilisant la normale avec n'importe quelle quantité.Comment créer une polyligne parallèle sans auto-intersections?

Cependant, il y a un problème graphique lorsque j'essaie d'utiliser cet algorithme sur une polyligne incurvée, c'est-à-dire une succession de points qui forment un arc. Quand je crée le parallèle à la polyligne d'arc, tout va bien jusqu'à ce que j'augmente suffisamment la distance pour que les vertices projetés créent une polyligne où avancer d'un sommet à l'autre se déplace dans le sens inverse en créant une auto-intersection. Comment puis-je supprimer efficacement de tels sommets de la polyligne parallèle de manière efficace? J'ai cependant la possibilité de comparer la direction des segments: si les segments générés ne sont pas parallèles, cela signifie que j'ai atteint un point où la polyligne parallèle s'est coupée. Cependant, cela ne fonctionne pas très bien pour les petits segments (une polyligne courbée générera des segments encore plus petits) ou les polylignes qui ont à l'origine des sommets dégénérés (un sommet égal au suivant).

+0

Vous essayez de calculer une "courbe de décalage". Google affiche un certain nombre de résultats pour cela. En général, il est assez difficile de gérer les auto-intersections et il suffit de considérer tous les cas. –

+0

En effet, on dirait qu'il y a beaucoup de matériel quand on sait quoi chercher. –

Répondre

1

Une polyligne parallèle est connue dans les cercles graphiques en tant que polyligne décalée. On dirait qu'une méthode pour générer des polylignes décalées sans artefacts de géométrie dégénérée doit utiliser les algorithmes Straight Skeleton.

J'ai également trouvé un article intéressant sur le sujet appelé An offset algorithm for polyline curves.

Questions connexes