notatka

Transkrypt

notatka
Twierdzenie o galerii sztuki
Triangulacje
Wykład 3 – inform. uzupełniające
2006/10/16
Graf dualny do triangulacji
Dane: triangulacja T wielokąta P
Graf dualny G:
– wierzchołki G – trójkąty triangulacji T
– krawędzie G: wierzchołki v i u połączone
krawędzią wtw gdy odpowiadające im trójkąty
mają wspólną krawędź
– dla nieskończenie wielu n istnieją proste
wielomiany o n wierzchołkach, które wymagają
n/3 kamer, aby każdy punkt wielokąta był
widoczny
– dla każdego prostego wielokąta o n
wierzchołkach, n/3 kamer wystarczy aby każdy
punkt wielokąta był widoczny
gdzie
prosty wielokąt to wielokąt „bez dziur”.
Rodzaje wierzchołków
– startowy (start) – obaj sąsiedzi znajdują się niżej,
kąt wewnętrzny mniejszy od π
– końcowy (end) – obaj sąsiedzi wyżej, kąt
wewnętrzny mniejszy od π
– rozdzielający (split) – obaj sąsiedzi niżej, kąt
wewnętrzny większy od π
– łączący (merge) – obaj sąsiedzi niżej, kąt
wewnętrzny większy od π
– regular - pozostałe
Lemat
Prosty wielokąt P jest y-monotoniczny wtw
gdy P nie zawiera żadnych wierzchołków
typu split i merge.
Szczegóły algorytmu
Dane: wierzchołki v1,..., vn, krawędzie e1,...,en
gdzie ei zaczyna się w vi
Algorytm dzielący na wiel. y-monotoniczne:
– miotła idąca z góry na dół
– H – punkty zdarzeń (końce odcinków), porz. y
– V – krawędzie przecinające miotłę, porz. wsp. x
Df. Wielokąt y-monotoniczny: część wspólna każdej
poziomej prostej i wielokąta jest spójna.
Szczegóły algorytmu podziału
Algorytm:
– utwórz H (z końców odcinków, wg wsp. mal. y)
– Aż do wyczerpania elementów H:
• usuń kolejny element vi z H
• stwierdź typ wierzchołka vi
• wywołaj odpowiednią procedurę dla vi.
HandleStartVertex( vi )
– wstaw krawędź ei do do V, ustaw
• helper(ei) ← vi
Szczegóły algorytmu
HandleEndVertex(vi)
1. jeśli helper(ei-1) jest merge vertex
1. dodaj do D przekątną (vi, helper(ei-1))
2. usuń ei-1 z V
HandleSplitVertex(vi)
1. znajdź w V krawędź bezp. na lewo od vi: ej
2. Wstaw przekątną (vi, helper(ej)) do D
3. helper(ej) ← vi
4. wstaw ei do V
5. helper(ei) ← vi
Szczegóły algorytmu
HandleMergeVertex(vi)
1. jeśli helper(ei-1) jest typu merge
Szczegóły algorytmu
HandleRegularVertex(vi)
1. jeśli wnętrze P jest na prawo od vi
1. wstaw przek. (vi, helper(ei-1)) do D
2. Usuń ei-1 z V
3. Znajdź w T kraw. ej: bezp. na lewo od vi
4. jeśli helper(ej) jest merge vertex
1. wstaw przek. (vi, helper(ej)) do D
1. jeśli helper(ei-1) jest merge vertex
1. wstaw przekątną (vi, helper(ei-1)) do D
2. usuń ei-1 z V
3. wstaw ei do V oraz ustaw helper(ei)←vi
2. w przeciwnym razie
1. znajdź w V ej: krawędź bezp. na lewo od vi
5. helper(ej) ← vi
Triangulacja wiel.
monotonicznego
TriangulateMonotonePolygon( P )
Dane: y-monotoniczny wielomian w postaci podwójnej listy
krawędzi
Wynik: triangulacja P w postaci podw. listy krawędzi
Dodatkowa struktura danych: stos wierzchołków S
1. Rozdziel P na lewy brzeg (L) i prawy brzeg (P), uporz. wg
wsp. y
2. Połącz uporz. ciągi L i P w jeden uporz. ciąg: u1, ..., un
3. Dodaj u1 i u2 do stosu S
4. Dla j = 3,...,n:
1. HandleVertex( uj )
Rola stosu S: wierzchołki, których jeszcze nie można było
„striangulować”
1. jeśli helper(ej) jest merge vertex
1. wstaw przek. (vi, helper(ej)) do D
2. helper(ej) ← vi
HandleVertex( uj )
Jeśli uj i top(S) są na różnych brzegach P (lewy/prawy):
– zdejmij wszystkie wierzchołki z S oraz
– połącz je nowymi przekątnymi z uj [nie łącz ostatniego
el.S]
– dodaj u(j-1) i uj do S
w przeciwnym razie:
– zdejmij jeden element z S
– dopóki odcinek (top(S), uj) wewnątrz P:
•
•
–
–
dodaj przekątną (top(S), uj) do D
zdejmij top(S) z S
ostatni zdjęty z S wierzchołek dodaj do S
dodaj uj do S
Poprawność
Przypadek 1: nowy wierzch. z innej str.niż S
Niezmienniki TriangulateMonotonePolygon:
• dodawane krawędzie „odcinają” striangulowaną
część od pozostałego y-monotonicznego wielokąta
• wierzchołki w S to kolejne wierzchołki na jednym z
brzegów, odpowiadają im kąty wklęsłe w P
elementy S
powyżej już striangulowane
(zdejmujemy)
uj
Przypadek 2.1: nowy wierzch. z tej samej str.
elementy S
powyżej już striangulowane
Przypadek 2.2: nowy wierzch. z tej samej str.
elementy S
powyżej już striangulowane
(zdejmujemy)
uj
uj

Podobne dokumenty