Geometria obrazu Wykład 6 Diagram Voronoi zbioru punktów Diagram Voronoi zbioru odcinków Oś medialna. Szkielet prosty. Triangulacja Delaunay Triangulacja Delaunay rzędu k
Definicja diagramu Voronoi. Niech S={p1, ... , pn} będzie zbiorem n punktów na płaszczyźnie. Dla każdego z punktów należących do S określamy obszar Voronoi zawierający punkty płaszczyzny, dla których dany punkt jest najbliższy spośród punktów z S, tzn.: VD(pi)={x: ii d(pi,x) d(pj,x)}. Punkty należące do brzegów obszarów Voronoi tworzą diagram Voronoi. Lemat. Obszar Voronoi jest wielokątem wypukłym (może być nieograniczony).
Algorytm dziel i rządź uporządkuj zbiór S względem x-owej współ-rzędnej, a następnie podziel go na małe grupy kolejnych punktów; znajdź diagramy Voronoi dla każdej grupy ; while zbiór S jest podzielony do for kolejne pary podziałów do znajdź styczne do otoczek wypukłych podziałów ; znajdź przecięcia symetralnych stycz- nych z pierwszymi zewnętrznymi kra- wędziami znanych diagramów Voronoi ; korzystając z podwójnie łączonych list krawędzi znajdź łamaną wyznaczającą resztę krawędzi wspólnego diagramu Voronoi rozdzielających podziały ;
Lemat. Czas potrzebny do znalezienia łamanej określającej krawędzie diagramu Voronoi między dwoma łączonymi zbiorami punktów jest liniowy względem sumy rozmiarów tych zbiorów. Stosując metodę dziel i rządź możemy stworzyć diagram Voronoi dla n-elementowego zbioru S punktów na płaszczyźnie w czasie O(n log n).
Diagramy Voronoi dla odcinków w R2. Odległość punktu p od odcinka I definiu-jemy jako odległość p od najbliższego punktu należącego do I: d(p,I) = minq I d(p,q) . Krawędziami obszarów Voronoi mogą być odcinki, półproste i fragmenty para-bol (gdy dla punktu z brzegu obszaru najbliższym punktem jednego z sąsiadu-jących odcinków jest jego koniec a dru-giego - punkt z jego wnętrza). Każdy generator należy do swojego obszaru.
Lemat. Diagram Voronoi dla n odcinków na płaszczyźnie można znaleźć w czasie O(n log n) (np. metodą dziel i rządź).
Szkielety. Diagram Voronoi dla wielokąta prostego definiują centra będące krawędziami wielokąta lub wierzchołkami przy niewypukłych katach. Szkieletem (lub osią medialną) wielokąta prostego nazywamy graf wyznaczany przez środki okręgów stycznych do brzegu wielokąta w co najmniej dwóch punktach. Twierdzenie (Chin, Snoeyink, Wang 1995). Szkielet wielokąta prostego o n wierz-chołkach można znaleźć w czasie O(n).
Szkielet prosty. Załóżmy, że dany wielokąt będzie „obkurczać się” w taki sposób, że jego wierzchołki będą poruszać się wzdłuż dwusiecznych kątów wyznaczanych przez proste zawierające boki wielokąta. Mamy dwa rodzaje zdarzeń, które powo-dują zmianę kierunku poruszania się wierzchołka: - zdarzenie krawędziowe, gdy znika krawędź „obkurczającego się” wielokąta, zdarzenie rozdzielające, gdy krawędź „obkurczającego się” wielokąta jest rozbijana przez wierzchołek poruszający się w przeciwnym kierunku (również mogą się „zderzyć” wierzchołki).
Własności szkieletu prostego. Krawędzie szkieletu prostego są odcinkami. Szkielet prosty dzieli wielokąty na wielokąty monotoniczne (umożliwia szybką triangulację). Szkielet prosty wielokąta wypukłego jest identyczny z odpowiednią osią medialną. Lemat. Jeśli P nie jest wielokątem wypukłym, ma n wierzchołków, z których r tworzy kąt większy od , to szkielet prosty tego wielokąta składa się z co najwyżej 2n-3 krawędzi, a jego oś medialna ma co najwyżej 2n+r-3 krawędzie, z czego r jest fragmentami parabol. Twierdzenie (Tănase, Veltkamp 2004) Szkielet prosty dla n-kąta prostego na płaszczyźnie można obliczyć w czasie O(n).
Przykład. [www.sthu.org]
Triangulacja Delaunay. Dany jest zbiór S zawierajacy n punktów na płaszczyźnie. Załóżmy, że żadne cztery punkty ze zbioru S nie są współokręgowe. Triangulacją Delaunay nazywamy graf dualny do diagramu Voronoi, którego wierzchołkami są punkty z S a krawędzie łączą wierzchołki odpowiadające sąsiednim obszarom Voronoi. Triangulacje Delaunay możemy również rozpatrywać bez żadnych ograniczeń dla zbioru S. Jednakże wtedy triangulacja może być wyznaczona niejednoznacznie.
Własności triangulacji Delaunay. 1. Jest to (z definicji) graf planarny o n wierzchołkach. Brzegiem triangulacji jest otoczka wypukła zbioru S. Jeśli otoczka ma k wierzchołków, to triangulacja ma 2n-2-k ścian i 3n-3-k krawędzi. 2. Każdy trójkąt odpowiada wierzchołkowi diagramu Voronoi. Każda krawędź trian-gulacji odpowiada krawędzi diagramu. 3. Okrąg przechodzący przez dwa punkty pi,pj S, który nie zawiera w swoim wnętrzu innych punktów z S, istnieje wtedy i tylko wtedy, gdy odcinek należy do triangulacji Delaunay. 4. Triangulacja Delaunay w R2 maksy-malizuje minimalny kąt w triangulacji. 5. Triangulacja w Rd zawiera O(nd/2) sympleksów.
Algorytm legalizacji krawędzi. Dla triangulacji T zbioru S definiujemy wektor kątów, jako uporządkowany niemalejąco ciąg wszystkich kątów trójkątów tworzących triangulację A(T) := (1, 2, ...., m). Przekątną czworokąta wypukłego nazywamy krawędzią nielegalną, gdy wektor kątów dla przyległych do niej trójkątów jest leksykograficznie mniejszy od wektora kątów trójkątów tworzonych przez drugą przekątną. 6 5 4 3 2 1 6 5 4 3 2 1 (1, 2, ...., 6) < (1, 2, ...., 6)
Algorytm LegalTiangulation(S) Dane: Dowolna triangulacja T zbioru S Wynik: Legalna triangulacja zbioru S while T zawiera nielegalną krawędź e do zastąp e przez krawędź e’ łączącą przeciwległe wierzchołki trójkątów sąsiadujących z e; return T; Taki algorytm jest nieefektywny.
Algorytm przyrostowy. Załóżmy, że mamy dodatkowe trzy punkty tworzące trójkąt, wewnątrz którego znajdują się punkty ze zbioru S. Dodając kolejny punkt dostajemy jeden z dwóch przypadków: dodany punkt wpada do wnętrza jednego z trójkątów aktualnej triangulacji, dodany punkt pojawia się na krawędzi aktualnej triangulacji. W obu przypadkach łączymy go z wierzchołkami trójkątów, do których należy.
procedure LegalizeEdge(p,e,T) (*Niech wstawiany punkt p i krawędź e tworzą trójkąt należący do T oraz krawędzie e, e’ i e” tworzą trójkąt sąsiadujący *) if e jest nielegalna then begin zamień e przez krawędź łączącą p z przeciwległym wierzchołkiem sąsiedniego trójkąta; LegalizeEdge(p,e’,T); LegalizeEdge(p,e”,T); end;
Algorytm DelaunayTriangulation(S) Dane: Zbiór S i trzy punkty q1, q2, q3 ograniczające S. Wynik: Triangulacja Delaunay zbioru S. T:= trójkąt q1q2q3 ; oblicz losową permutację punktów z S; for i:=1 to n do begin znajdź trójkąt w T, do którego należy pi; połącz pi z odpowiednimi wierzchoł-kami T; legalizuj krawędzie trójkątów o wierz-chołku w pi; end; usuń z T punkty q1, q2, q3 wraz z incydent- nymi krawędziami; return T;
Twierdzenie. Algorytm ten znajduje triangulację Delaunay dla zbioru n punktów na płaszczyźnie w oczekiwanym czasie O(n log n) i oczekiwanej pamięci O(n). Triangulację nazywamy triangulacją Delaunay rzędu k, gdy okrąg opisany na dowolnym trójkącie triangulacji zawiera w swoim wnętrzu co najwyżej k punktów z danego zbioru S. Taka triangulacja nie jest jednoznaczna.
Metoda zamian. Postępujemy podobnie jak w przypadku znajdywania legalnej triangulacji. Startujemy z triangulacji Delaunay i zamieniamy przekątne w czworo-kącie będącym sumą sąsiednich trójkątów triangulacji, jeśli dwa nowe trójkąty należą do triangulacji Delaunay rzędu k, końcem nowej krawędzi jest wierzchołek o najniższej etykiecie w danym czworokącie. Operacje te wykonujemy aż do wyczerpania możliwości zamian. Lemat. Algorytm wykonuje co najwyżej O(n2) zamian. Dla danego k algorytm wykonuje co najwyżej O(nk) zamian.
Dziękuję za uwagę.