Jak triangulować ze schematu Voronoï?


13

Obliczyłem diagram Voronoï z zestawu punktów (z Boost.polygon ).

Próbuję znaleźć triangulację Delaunaya, łączącą każde centrum komórkowe dla każdej krawędzi Voronoï, ale brakuje mi niektórych krawędzi.

Na poniższym obrazku czerwone kropki są moimi początkowymi punktami, niebieskie linie to krawędzie Voronoï (zignorowałem krawędzie nieskończone), a zielone linie to krawędzie triangulacji (jedna zielona krawędź na każdą niebieską krawędź, łącząca dwa początki komórek).

Widzimy, że brakuje ukośnych krawędzi. czego mi brakuje?

schemat voronoi

Odpowiedzi:


19

Punktem centralnym na diagramie jest zdegenerowana krawędź diagramu Voronoi. Jeśli wygenerujesz diagram Voronoi dla nieregularnej chmury punktów, każdy wierzchołek będzie miał stopień 3. Wierzchołek o stopniu 4 (lub więcej) może wystąpić tylko wtedy, gdy dwa (lub więcej) wierzchołki się pokrywają. Oznacza to, że między nimi jest krawędź zerowa. Ale ta krawędź powinna nadal mieć odpowiednią krawędź w triangulacji Delaunaya. Problem polega na tym, że dowolne z dwóch możliwych krawędzi wybierzesz, ponieważ krawędź o zerowej długości nie ma powiązanego kierunku.

Aby zwizualizować to, o czym mówię, rozważ rozpoczęcie od czterech mniej rozmieszczonych punktów (tak, że zaczynamy tylko od wierzchołków stopnia 3) i stopniowe przekształcanie ich w ich regularne pozycje.

Możemy to zrobić na dwa różne sposoby, które prowadzą do zdegenerowanego przypadku na twoim diagramie. Przekonasz się, że skończysz z dwoma różnymi triangulacjami Delaunaya, które są obowiązującymi limitami dla przypadku zdegenerowanego:

wprowadź opis zdjęcia tutajwprowadź opis zdjęcia tutaj

Zakładam, że z jakiegoś powodu w twoim kodzie brakuje tego zdegenerowanego przypadku, ale nie widząc, w jaki sposób obliczasz triangulację Delaunaya z diagramu Voronoi, nie możesz wskazać ci dalej.

Zauważ również, że posiadanie jeszcze wyższych degeneracji (o więcej niż cztery punkty rozmieszczone pod równymi kątami wokół koła) prawdopodobnie wymagałoby dodatkowej uwagi:

wprowadź opis zdjęcia tutajwprowadź opis zdjęcia tutaj

Animacje te pokazują również, że (nawet w przypadku nie zdegenerowanym) odpowiednie krawędzie Voronoi i Delaunay niekoniecznie faktycznie przecinają się w ich skończonym zakresie. Może to utrudnić dostrzeżenie, że 2 (lub 3) krawędzie, które triangulują regularny wielokąt na końcu, w rzeczywistości odpowiadają kilku zdegenerowanym krawędziom, które znajdują się na środku. Zauważ też, że w sumie jest 5 różnych triangulacji pięciokąta i 14 triangulacji sześciokąta (chociaż nie wiem, czy wszystkie 14 można uzyskać przez odkształcenie triangulacji nie zdegenerowanej).

Edytuj (wg OP)

Diagramy Voronoi obliczone za pomocą Boost.polygon umożliwiają przejście przez każdy wierzchołek Voronoi i każdą krawędź połączoną z tymi wierzchołkami (zgodnie z ruchem wskazówek zegara lub przeciwnie do ruchu wskazówek zegara). W ten sposób można utworzyć jeden trójkąt dla każdej pary krawędzi (dwie połączone krawędzie połączą się z 3 komórkami).


Możesz również odpowiedzieć tutaj, albo usunę moje inne pytanie.
arthur.sw

3
@ arthur.sw Przenoszenie postów jest ogólnie odradzane na SE, więc przypuszczam, że usunięcie go byłoby lepszą opcją.
Martin Ender,

interaktywny twórca diagramów voronoï: alexbeutel.com/webgl/voronoi.html
arthur.sw

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.