2010-10-07 3 views
2

J'ai fait des recherches et j'ai fait des recherches sur Internet ces derniers jours pour trouver une méthode appropriée à mon problème.Coupure de ligne polygonale concave sans bords dégénérés

Problème:

une séquence de polygone concave contre une ligne infinie sans direction (en fait un polygone sur un plan en 3D, mais le problème est similaire je crois). Actuellement, j'utilise Sutherland-Hodgman mais les polygones qui en résultent contiennent parfois des parties de zone zéro créées à partir de bords dégénérés et ne supportent pas non plus les polygones contenant des trous.

Le meilleur algorithme que j'ai pu trouver pour résoudre mon problème est l'algorithme de Weiler-Atherton mais pour un polygone avec des arêtes dans le sens des aiguilles d'une montre et une ligne infinie.

Question:

Y at-il un algorithme pour couper un polygone concave qui convient à mes besoins ou faire quelqu'un a une suggestion sur la façon de modifier l'algorithme Weiler-Atherton à travailler pour ce cas? Il y a des pages Web qui suggèrent qu'il peut être généralisé pour supporter plus de cas mais je ne peux pas le comprendre.

// Cordialement Eiken

Répondre

1

Vous pouvez utiliser un coupe-polygone * pour résoudre ce problème en convertissant la ligne dans un polygone de découpage. En supposant que vous ne coupez pas dans un plan proche de l'horizontale, assurez-vous que le bord critique du polygone de découpage est un peu plus grand que les dimensions verticales du polygone sujet (le bord s'étend au-dessus et au-dessous du polygone sujet). Si vous coupez dans un plan presque horizontal, assurez-vous que le bord critique est un peu plus large que le sujet.

* par exemple Clipper - http://sourceforge.net/projects/polyclipping/

Divulgation: Je suis l'auteur de Clipper, donc il y a la possibilité d'un parti pris.

+0

. Ouais j'ai essayé de trouver un bon moyen de faire ça. Mon polygone étant dans l'espace 3D, il est difficile de décider comment convertir la ligne en un polygone approprié car le polygone sujet peut être pivoté bizarrement ce qui rend difficile de décider dans quelle direction de la ligne (que je reçois de l'intersection avion/avion) ​​à Développez le polygone. – Eiken

+0

Je présume que vous pouvez définir la ligne de découpage dans l'espace 2D. Si sa pente absolue est inférieure à 1 (c'est-à-dire proche de l'horizontale), alors le segment de ligne de découpage (et un bord de votre polygone de découpage) doit s'étendre juste au-delà des extensions gauche et droite du polygone sujet. Les autres bords peuvent être alignés sur l'axe en s'assurant que le bord horizontal est au-dessus (ou en dessous) de l'étendue du polygone sujet. De même, si la pente absolue de la ligne d'écrêtage est supérieure à 1, utilisez la même logique mais faites-la pivoter de 90 degrés. –

+0

Ouais cela fonctionnera fondamentalement la même théorie que l'algorithme que j'ai trouvé dans Graphic Gems V sauf qu'il est encore plus simplifié pour exactement ce que je veux faire et je peux sauter l'étape de représenter mon avion comme une ligne. Encore merci pour votre réponse. Stackoverflow est une ressource incroyable. – Eiken

3

J'ai trouvé un algorithme approprié dans Graphic Gems V qui résout mon problème. Si quelqu'un a le même problème c'est la référence:

Glassner, A., '' Clipping un Polygon Concave '', dans Graphics Gems V, A. Paeth, ed, Academic Press, Cambridge, 1995

Questions connexes