Comment trianguler à partir d'un diagramme de Voronoï?


13

J'ai calculé un diagramme de Voronoï à partir d'un ensemble de points (avec Boost.polygon ).

J'essaie de trouver une triangulation de Delaunay, reliant chaque centre cellulaire pour chaque bord de Voronoï, mais il me manque quelques bords.

Dans l'image suivante, les points rouges sont mes points initiaux, les lignes bleues sont les bords de Voronoï (j'ai ignoré les bords infinis), et les lignes vertes sont les bords de triangulation (un bord vert pour chaque bord bleu, reliant deux origines cellulaires).

Nous pouvons voir que les bords diagonaux manquent. Qu'est-ce que je rate?

diagramme de voronoi

Réponses:


19

Le point central de votre diagramme est un bord dégénéré du diagramme de Voronoi. Si vous générez un diagramme de Voronoï pour un nuage de points irrégulier, chaque sommet aura le degré 3. Un sommet de degré 4 (ou plus) ne peut se produire que lorsque deux (ou plus) sommets coïncident. Cela signifie qu'il y a un bord de longueur nulle entre eux. Mais cette arête devrait toujours avoir une arête correspondante dans la triangulation de Delaunay. Le problème est qu'il est arbitraire laquelle des deux arêtes possibles que vous choisissez, car l'arête de longueur nulle n'a pas de direction associée.

Pour visualiser ce dont je parle, envisagez de commencer par quatre points moins régulièrement espacés (de sorte que nous commençons avec seulement des sommets de degré 3) et de les traduire progressivement dans leurs positions régulières.

Nous pouvons le faire de deux manières différentes, qui conduisent toutes deux au cas dégénéré de votre diagramme. Vous verrez que vous vous retrouvez avec deux triangulations de Delaunay différentes, qui sont toutes les deux des limites valides pour le cas dégénéré:

entrez la description de l'image icientrez la description de l'image ici

Je suppose que votre code manque ce cas dégénéré pour une raison ou une autre, mais sans vraiment voir comment vous calculez la triangulation de Delaunay à partir du diagramme de Voronoi, il est impossible de vous pointer plus loin que cela.

Notez également qu'avoir des dégénérescences encore plus élevées (de plus de quatre points répartis à angles égaux autour d'un cercle) nécessiterait probablement une attention supplémentaire:

entrez la description de l'image icientrez la description de l'image ici

Ces animations montrent également que (même dans un cas non dégénéré), les arêtes Voronoi et Delaunay correspondantes ne se croisent pas nécessairement dans leur étendue finie. Cela pourrait rendre plus difficile de voir que les 2 (ou 3) arêtes qui triangulent le polygone régulier à la fin correspondent en fait à plusieurs arêtes dégénérées qui sont toutes au centre. Notez également qu'il existe au total 5 triangulations différentes du pentagone et 14 triangulations de l'hexagone (même si je ne sais pas si les 14 peuvent être obtenues en déformant une triangulation non dégénérée).

Modifier (par OP)

Les diagrammes de Voronoi calculés avec Boost.polygon permettent de parcourir chaque sommet de Voronoi et chaque bord lié à ces sommets (dans le sens horaire ou antihoraire). De cette façon, il est possible de créer un triangle pour chaque paire d'arêtes (deux arêtes connectées seront liées à 3 cellules).


Vous pouvez également répondre ici ou je supprimerai mon autre question.
arthur.sw

3
@ arthur.sw La publication croisée est généralement déconseillée sur SE, donc je suppose que la supprimer serait la meilleure option.
Martin Ender

un créateur de diagramme de voronoï interactif: alexbeutel.com/webgl/voronoi.html
arthur.sw

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.