Was bisher geschah
I Motivation, Beispiele
I geometrische Objekte imR2:
Punkt, Gerade, Halbebene, Strecke, Polygon
I maschinelle Repräsentation geometrischer Objekte
effiziente Algorithmen und Datenstrukturen zur Berechnung
I der konvexen Hülle conv(P)endlicher Punktmengen P ⊆R2
I aller Schnittpunkte aller Strecken aus einer endlichen Menge von Strecken imR2
Motivation
Art Gallery Problem (Wächterproblem):
Überwachung eines Museums (evtl. mit stark verwinkelten Räumen) durch möglichst wenige Kameras (omnidirektional)
I gegeben: Grundriss des Museums
begrenzt durch einfachen geschlossenen Polygonzug
I gesucht: Menge (minimaler Mächtigkeit) von Positionen der Überwachungskameras
Abschätzung der notwendigen Kameraanzahl
Beobachtung:
Jedes Dreieck lässt sich durch eine Kamera überwachen
Idee:
I Zerlegung des Polygons in Dreiecke
I |Kameras| ≤ |Dreiecke|
AG-AufgabeTriangulierung
Triangulierung einfacher Polygone
einfaches Polygon P:
durch einen geschlossenen Polygonzug, deren nicht benachbarte Kanten keinen gemeinsamen Punkte enthalten, begrenztes Gebiet imR2 Repräsentation als GraphP= (V,E)(Kreis) Diagonale in einem einfachen PolygonP:
vollständig inP enthaltene Strecke zwischen zwei Ecken vonP
Triangulierung eines einfachen PolygonsP= (V,E):
Zerlegung vonPin Dreiecke durch maximale Menge (bzgl.⊆) von Diagonalen, die einander paarweise nicht schneiden
(GraphT = (V0,E0)mitV0 =V undE ⊆E0 )
Maschinelle Repräsentation
Begrenzung von Polygonen und Triangulierungen sind planare GraphenP= (V,E).
Begrenzung von Polygonen: Kreise
maschinelle Repräsentation von Kreisen(V,E)als
I einfach verkettete Liste von Ecken (oder Kanten) z.B. als Ergebnis der Berechnung der konvexen Hülle (Angabe der Durchquerungsrichtung wichtig)
I doppelt verkettete Liste von Ecken oder Kanten (Angabe der Durchquerungsrichtung wichtig) Vereinbarung: Kanteei = (vi,vi+1)
Transformation der einfach in eine doppelt verkettete Liste in O(|V|)möglich.
maschinelle Repräsentation planarer Graphen als doppelt verkettete Liste von Kanten
Anzahl der Dreiecke in Triangulierungen
Satz
I Jedes einfache Polygon hat wenigstens eine Triangulierung.
I Jede Triangulierung eines einfachen Polygons mit n Ecken besteht aus n−2Dreiecken.
Beweis durch Induktion übern
Kamerapositionen in Triangulierungen
Beobachtungen:
I Jede Kamera auf einer Diagonalen überwacht (wenigstens) zwei Dreiecke.
I Jede Kamera in einer Eckep des Polygons überwacht (wenigstens) alle Dreiecke mit Eckep.
Bestimmung der Kamerapositionen bei gegebener TriangulierungT vonP:
1. 3-Färbung der Ecken der TriangulierungT = (V0,E0) Wie ?
2. Bestimmung der am seltensten vorkommenden Farbec (höchstensbn/3cEcken haben Farbec)
3. Kamerapositionen: Ecken mit Farbec Anzahl der Kameras≤ bn/3c(optimal)
Triangulierung – Schritte
I gegeben: einfaches PolygonP
I gesucht: TriangulierungT vonP Beobachtung:
Konvexe Polygone lassen sich einfach triangulieren.
Wie? Laufzeit?
Idee:
Triangulierung beliebiger einfacher PolygoneP in zwei Schritten
1. Zerlegung vonP in MengeP0einfach triangulierbarer Polygone
2. (einfache) Triangulierung aller Polygone inP0 Problem: Zerlegung in konvexe Polygone aufwendig
Monotone Polygone
PolygonP heißtmonoton(y-monoton) gdw.
∀y ∈R:P∩ {(x,y)|x ∈R}(Schnitt vonPmit horizontaler Linie) ist zusammenhängend (also Strecke, Punkt oder leer)
Idee: Triangulierung vonPin zwei Schritten
1. Zerlegung vonP in MengeP0monotone Polygone 2. (einfache) Triangulierung aller monotonen Polygone inP0
Triangulierung monotoner Polygone
Idee:
falls möglich, Diagonalen zwischen Paaren aus je einer Ecke auf demrechten Randund demlinken Randeinfügen
Problem bei Ecken mit Innenwinkeln> π
Sweep-Line-Algorithmus (absteigendey-Koordinate)
I Ereignisse:
geordnete Liste aller Ecken des Polygons
I Zustand:
Verwaltung der Ecken oberhalb der Sweep-line, die noch Eckpunkte neuer Diagonalen werden könnten, als Stack
Triangulierung monotoner Polygone
Algorithmus : Triangulierung-monoton
Eingabe: monotones PolygonP= (VP,EP)(als doppelt verkettete Liste) Ausgabe: TriangulierungTvonP(als doppelt verkettete Liste)
T←P,E = [v1, . . . ,vn]←Vp(sortierte Liste oder PQ) S← ∅,S←push(S,v1),S←push(S,v2)(Zustand, Stack) für jedesj←3, . . . ,n−1:
wenn vjund top(S)auf verschiedenen Randseitendann solange pop(S)6=∅:
p←top(S),S←pop(S)
T ←T∪(p,vj)(Diagonalen hinzufügen) S←pop(S),S←push(vj−1),S←push(vj) sonst
p←top(S),S←pop(S)
solangeS6=∅und Diagonale(vj,top(S))innerhalb P: p←top(S),S←pop(S)
T ←T∪(p,vj)(Diagonalen hinzufügen) S←push(p),S←push(vj)
S←pop(S)
solangepop(S)6=∅:
p←top(S),S←pop(S),T←T∪(p,vn)(Diagonalen hinzufügen)
Zerlegung in y -monotone Polygone
Beobachtung:
In nichty-monotonen PolygonenP
(dargestellt als Kreis(V,E)) existierenturn points, d.h. Eckenp∈V, in denen sich die
Richtung (nach oben, nach unten) ändert
Idee zur Zerlegung beliebiger einfacher PolygoneP in y-monotone Polygone:
Zerlegung der Winkel an den turn points inV durch Hinzufügen geeigneter Diagonalen
Zerlegung in y -monotone Polygone
Klassifikation der turn pointsq in einem PolygonP= (V,E) abhängig von
I y-Koordinaten vonpund seinen Nachbar-Eckenq,r
I Winkelϕzwischenpqundqr innerhalb des Polygons Klassen von turn points
start :p,r beide unterhalbqundϕ < π end :p,r beide oberhalbq undϕ < π split :p,r beide unterhalbq undϕ > π merge :p,r beide oberhalbq undϕ > π alle übrigen Ecken heißen regulär
Problem nur bei turn poins mitϕ > π
Sweep-line-Algorithmus
I gegeben: einfaches PolygonP
I gesucht: TriangulierungT vonP
Idee: Sweep-line-Algorithmus (fallendey-Koordinate) mit Ereignisse: geordnete Menge aller Ecken vonP
(PQ oder sortierte Liste)
Zustand: nachx-Koordinate geordnete Menge von Paaren
I KantesausP
I Helfer-Punkthszur Kantes:
zuletzt gefundener nächster Punkt rechts von der Seite sim Inneren des Polygons,
potentieller Endpunkt einer Diagonalen zur Trennung eines turn points oberhalb oder unterhalb der aktuellen Sweep-line (balancierter Suchbaum)
Zerlegung in monotone Polygone
Algorithmus : Mono
Eingabe: PolygonPals doppelt verkettete Liste von Kanten Ausgabe: ZerlegungP0 vonPals doppelt verkettete Liste von
Kanten
P0←P (doppelt verkettete Liste von Kanten) E ← ∅(Priority queue oder sortierte Liste) Z ← ∅(binärer Suchbaum)
für jedess∈P :
E ←E ∪ {sa,sb}mity-Koordinate als Priorität solangeE 6=∅:
p←max(E) E ←E \ {p}
(E,Z)←Mono-Ereignisbehandlung(p,E,Z)
Mono-Ereignisbehandlung
Mono-Ereignisbehandlung(p,E,Z)
abhängig vom Eckentyp des Ereignissesp=vi
start : Kanteei(= (vi,vi+1)) mit Helferhej =viinZeinfügen end : Kanteei−1(= (vi−1,vi)) ausZ löschen
fallshei−1merge-Punkt: Diagonale(vi,hei−1)inP0einfügen split : Kanteejdirekt links vonviinZ finden
Diagonale(vi,hej)inP0einfügen
hej ←vi(Helfer für Kanteejaktualisieren) Kanteeimithei =vi inZ einfügen merge : Kanteei−1ausZ löschen
fallshei−1merge: Diagonale(vi,hei−1)inP0einfügen Kanteejdirekt links vonvi inZ finden
fallshej merge: Diagonale(vi,hej)inP0einfügen hej ←vi(Helfer für Kanteejaktualisieren) regulär : falls Inneres vonPrechts vonvi:
fallshei−1merge: Diagonale(vi,hei−1)inP0einfügen, ei−1ausZlöschen undeimit Helferhei←viinZ einfügen sonst (Inneres vonPlinks vonvi):
Kanteejdirekt links vonvi inZ finden und
fallshej merge: Diagonale(vi,hej)inP0einfügen und
Triangulierung – Laufzeit
Triangulierung beliebiger einfacher PolygoneP mitnEcken in zwei Schritten:
1. Zerlegung vonP in MengeP0monotoner Polygone O(nlogn)(für Sortieren / Verwaltung der Ereignismenge) 2. (einfache) Triangulierung aller Polygone inP0
O(mi)je PolygonPi ∈P0 (insgesamtO(n) =P
Pi∈P0O(mi)
Ordnung der Ereignisse (Ecken inP0) kann aus vorigem Schritt übernommen werden (kein erneutes Sortieren notwendig)
GesamtlaufzeitO(nlogn)