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
. 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
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. –
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