Que sont les polygones dégénérés? Comment vérifier si une paire de polygones donnée est dégénérée ou non?
Que sont les polygones dégénérés? Comment vérifier si une paire de polygones donnée est dégénérée ou non?
Réponses:
Un polygone est dégénéré si certains de ses sommets se trouvent l'un sur l'autre. Par exemple, le triangle (0,0), (0,1), (0,0) est dégénéré. Il a 3 côtés et 3 sommets, mais deux des sommets se répètent. Il est possible de répéter un sommet plusieurs fois (par exemple (0,0), (0,0), (0,0) est un autre triangle dégénéré). Par définition, vérifier si un polygone est dégénéré ou non est facile.
Mais à quoi servent les polygones dégénérés? Une application de l'accélération graphique (dessin 3D) est la suivante:
Dans le dessin 3D, les GPU utilisent normalement la triangulation pour rendre les images. La raison (simple) d'utiliser des triangles est qu'ils sont des objets 2D les plus simples possibles, ils n'ont donc pas besoin de beaucoup de matériel.
Si nous voulons dessiner une image 3D complexe, par cette limitation du GPU, nous devons la décomposer en plusieurs triangles. Mais si nous appelons le GPU pour rendre chaque triangle séparément, ce serait très lent (en raison du nombre d'appels). Ainsi, la bande triangulaire est utilisée pour réduire le nombre d'appels au GPU. Une bonne explication des bandes triangulaires peut être trouvée dans la documentation Microsoft: bandes triangulaires , vous pouvez également voir le wiki pour: bande triangulaire .
Mais le problème se pose lorsque nous voulons dessiner deux objets séparés dans une bande. Dans ce cas, les triangles dégénérés sont utiles. Le GPU peut détecter les triangles dégénérés et ignorer leur dessin. Nous pouvons donc connecter deux bandes distinctes avec un triangle dégénéré.
En général, si nous avons composants différents, de sorte que nous avons déjà leurs bandes de triangle correspondantes, nous pouvons tous les dessiner par un seul appel au GPU. Cela entraîne une utilisation supplémentaire de la mémoire, mais c'est un compromis entre le nombre d'appels au GPU pour le rendu et la surcharge liée à l'utilisation d'un triangle dégénéré supplémentaire.
Un polygone dégénéré est celui qui a une zone nulle.
Comme d'autres l'ont noté, cela dépend. De manière générale, un polygone n'est pas dégénéré s'il n'a pas de points anormaux, mais cela repousse simplement le problème d'une étape; qu'est-ce qui est "anormal"?
La vraie réponse est qu'un polygone est dégénéré s'il viole la spécification. La réponse légèrement grossière est qu'un polygone est dégénéré s'il s'agit d'un cas de bord que votre algorithme ne peut pas gérer.
Voici un exemple du monde des SIG. La spécification des fonctionnalités simples de l'OGC a une définition très précise de ce qui rend un polygone "valide". Citant de la section 6.1.11.1:
Les assertions pour les polygones (les règles qui définissent les polygones valides) sont les suivantes:
a) Les polygones sont topologiquement fermés;
b) La limite d'un polygone se compose d'un ensemble d'anneaux linéaires qui composent ses limites extérieure et intérieure;
c) Deux anneaux dans la frontière ne se croisent pas et les anneaux dans la frontière d'un polygone peuvent se croiser en un point, mais seulement comme une tangente, par exemple
Remarque: Cette dernière condition indique qu'à un point commun aux deux courbes, les points proches ne peuvent pas être communs. Cela oblige chaque point commun à être un point de tangence.
e) L'intérieur de chaque polygone est un ensemble de points connectés;
f) L'extérieur d'un polygone avec 1 ou plusieurs trous n'est pas connecté. Chaque trou définit un composant connecté de l'extérieur.
Dans les affirmations ci-dessus, l'intérieur, la fermeture et l'extérieur ont les définitions topologiques standard. La combinaison de (a) et (c) fait d'un polygone un ensemble de points fermés réguliers.