Algorithmische Geometrie

Werbung
Was bisher geschah
I
I
I
Motivation, Beispiele
maschinelle Repräsentation geometrischer Objekte im
und :
Punkt, Gerade, Halbebene, Strecke, Polygon,
ebene Zerlegung in Regionen (planare Graphen)
spezielle Datenstrukturen zur (mehrfachen) effizienten
Suche
R2
Algorithmen zur
I Bestimmung der konvexe Hülle endlicher Punktmengen
P⊆ 2
I Bestimmung aller Schnittpunkte einer endlichen Menge
2 2
von Strecken S ⊆
I Bestimmung von Triangulierungen von Polygonen P ⊆
I Punktsuche in Regionen
R
R
R2
1. Konstruktion der Suchstruktur (einmal)
2. Punktsuche darin (mehrmals)
125
Motivation
Post Office Problem:
Bestimmung der Einzugsgebiete (Anzahl potentieller Kunden)
aller Postämter in einem Gebiet
vereinfachende Annahmen:
I
Jedes Postamt bietet dieselben Leistungen
(zum selben Preis).
I
Kunden besuchen immer das (in Luftlinie)
nächstgelegene Postamt.
I
Die Bevölkerungsdichte ist überall gleich.
Modellierung der Aufgabe:
gegeben: endliche Menge von Punkten P = {p1 , . . . , pn } ⊆ 2
gesucht: Zerlegung der Ebene 2 in Gebiete (Punktmengen)
mit gemeinsamem nächsten Punkt pi ∈ P
R
R
126
Wiederholung: Abstand zwischen Punkten
Abstandsfunktion:
Funktion d : d × d → mit allen folgenden Eigenschaften
d : d(x, y ) = 0 gdw. x = y
I ∀x, y ∈
d : d(x, y ) = d(y , x) (kommutativ)
I ∀x, y ∈
d : d(x, y ) + d(y , z) ≥ d(x, z)
I ∀x, y , z ∈
(Dreiecksungleichung)
prominente Abstandsfunktionen:
für alle x = (x1 , . . . , xd ) ∈ d , y = (y1 , . . . , yd ) ∈ d :
v
u d
uX
k
(xi − yi )k
dk (x, y ) = t
R R
R
R
R
R
R
R
i=1
I
I
I
d2 (x, y ) =
qP
d
i=1 (xi
Pd
− yi )2
d1 (x, y ) = i=1 |xi − yi |
d∞ (x, y ) = max {|xi − yi | | i ∈ {1, . . . , d}}
(euklidisch)
(Manhattan)
(Maximum)
127
Voronoi-Zellen
R
gegeben: endliche Menge P = {p1 , . . . , pn } ⊆ 2
gesucht:
Menge Q ⊆ 2 mit ∀q ∈ Q : d(q, pi ) ≤ min{d(q, p) | p ∈ P}
Beobachtungen:
R
R
I
zwei verschiedene Punkte: P = {p1 , p2 } ∈ 2 :
pi ∈ P ist nächster Punkt zu q ∈ 2 gdw. d(q, p1 ) < d(q, p2 )
I
zwei verschiedene Punkte p1 , p2 ∈
Halbebenen
R
R2 teilen R2 in zwei
R2 | d(q, p1) < d(q, p2)}
h(p2 , p1 ) = {q ∈ R2 | d(q, p2 ) < d(q, p1 )}
Trenngerade g(p1 , p2 ) = {q ∈ R2 | d(q, p1 ) = d(q, p2 )}
h(p1 , p2 )
= {q ∈
(Mittelsenkrechte zu p1 p2 )
I
Menge aller zu einem Punkt pi ∈ P nächsten Punkte
\
vor(P, pi ) =
h(p1 , pj )
pj ∈P
pi 6=pj
Voronoi-Zelle des Punktes pi ∈ P immer Schnitt endlich vieler
Halbebenen, also konvexes Polyon (evtl. unbeschränkt)
128
Voronoi-Diagramme
R
gegeben: endliche Menge P = {p1 , . . . , pn } ⊆ 2
gesucht:
Karte M im 2 (planarer Graph)
Voronoi-Zelle von pi ∈ P in P:
vor(P, pi ) =
q ∈ 2 | d(q, pi ) ≤ min{d(q, p) | p ∈ P}
\
=
h(p1 , pj )
R
R
pj ∈P
pi 6=pj
Voronoi-Diagramm vor(P) von P:
Menge aller Voronoi-Zellen,
Zerlegung des 2 (repräsentiert durch planaren Graphen)
R
I
Voronoi-Kante
d(q, pi ) = d(q, pi )∧
2
q∈
| ∃pi , pj ∈ P :
∀pk 6∈ {pi , pj } : d(q, pi ) < d(q, pk )
R
I
Voronoi-Ecke
d(q, pi ) = d(q, pi ) = d(q, pk )∧
q ∈ 2 | ∃pi , pj , pk ∈ P :
∀pk 6∈ {pi , pj , pk } : d(q, pi ) < d(q, pk )
R
129
Voronoi-Diagramme – Beispiele
I
zwei Punkte P = {p1 , p2 }:
vor(P) Gerade (Mittelsenkrechte auf p1 p2 )
I
alle pi ∈ P kollinear: vor(P) Menge von Geraden
I
drei nicht-kollineare Punkte P = {p1 , p2 , p3 }: vor(P) enthält
drei unbeschränkte Polygone
(begrenzt durch je zwei Halbgeraden)
I
alle pi ∈ P auf einem Kreis: vor(P) Menge von
Halbgeraden vom Mittelpunkt des Kreises
(Winkelhalbierende zwischen benachbarten Punkten)
I
vier nicht-kollineare Punkte P = {p1 , p2 , p3 , p4 }
130
Anzahlen in Voronoi-Diagrammen
R
gegeben: endliche Menge P = {p1 , . . . , pn } ⊆ 2
gesucht: Voronoi-Diagramm vor(P) (als planarer Graph (V , E))
Voronoi-Zelle vor(P, pi ): Anzahl der
Ecken ≤ n − 1
Kanten ≤ n − 1
Voronoi-Diagramm vor(P): Anzahl der
P
Ecken ≤ pi ∈P (n − 1) (∈ O(n2 ))
P
Kanten ≤ pi ∈P (n − 1) (∈ O(n2 ))
Flächen = n (eine für jeden Punkt pi ∈ P)
bessere Abschätzungen:
Satz
Für jede endliche Menge P = {p1 , . . . , pn } ⊆
existieren in vor(P)
I
höchstens 2n − 5 Kanten und
I
höchstens 3n − 6 Ecken.
R2 mit n ≥ 3
131
Berechnung des Voronoi-Diagrammes
gegeben:
gesucht:
endliche Menge P = {p1 , . . . , pn } ⊆
Voronoi-Diagramm vor(P) = (V , E)
R2
naiver Algorithmus:
Für jeden Punkt pi ∈ P Voronoi-Zelle vor(P, pi ) berechnen:
Schnitt aller Halbebenen h(pi , pj ) für j 6= i
(Laufzeit je Punkt O(n log n), siehe folgende Folien)
Laufzeit zur Berechnung des Voronoi-Diagrammes: O(n2 log n)
132
Schnitte von Halbebenen
Halbebene h = {(x, y ) ∈
wobei a 6= 0 oder b 6= 0
I
R2 | ax + by + c ≤ 0},
gegeben:
endliche Menge H = {(a1 , b1 , c1 ), . . . , (an , bn , cn )} ⊆ 3
von Halbebenen hi = {(x, y ) ∈ 2 | ai x + bi y + ci ≤ 0}
R
I
R
gesucht:
T
Polygon P = ni=1 hi (konvex)
Idee: Divide-and-Conquer-Verfahren
133
Divide-and-Conquer-Verfahren
I
Zerlegen der Aufgabe in (etwa gleichgroße) Teilaufgaben
(top-down)
I
rekursive Lösung der Teilaufgaben
I
Lösungsverfahren für elementare Teilaufgaben
(Basisfall, Induktionsanfang)
I
Zusammenfügen der Lösungen der Teilaufgaben zu einer
Lösung der Gesamtaufgabe
(bottom-up)
Beispiel: Mergesort
Laufzeit-Berechnung durch Lösen der Rekurrenz
(hier für zwei Teilaufgaben)
T (Basisfall)
, falls n = 1
T (n) =
T (Teilen) + 2T (n/2) + T (Zusammenfügen) , falls n > 1
134
Berechnung von Halbebenen-Schnitten
Eingabe:
Menge von Halbebenen H = {h1 , . . . , hn } ⊆
R3
Divide-and-Conquer-Algorithmus:
I
Zerlegen der Aufgabe in Teilaufgaben:
H1 = {h1 , . . . , hbn/2c } und H2 = {hbn/2c+1 , . . . hn }
I
rekursive Lösung der Teilaufgaben
I
Lösungsverfahren für elementare Teilaufgaben
(Induktionsanfang)
für |H| = 1: P = H
I
Zusammenfügen der Lösungen der Teilaufgaben:
Bestimmung des Schnittes zweier konvexer Polygone (CPI)
135
Algorithmus HPI
zur Berechnung des Schnittes endlich vieler Halbebenen
Algorithmus : HPI
R
3 (Halbebenen)
Eingabe : H = {h
T1n, . . . , hn } ⊆
Ausgabe : P = i=1 hi (konvexes Polygon)
wenn |H| = 1 dann
P←H
sonst
H1 ← {h1 , . . . , hbn/2c } (Aufgabe teilen)
H2 ← {hbn/2c+1 , . . . hn }
P1 ← HPI(H1 ) (Teilaufgaben lösen)
P2 ← HPI(H2 )
P ← CPI(P1 , P2 ) (Teillösungen zusammenfügen)
136
Repräsentation konvexer Polygone
konvexes Polygon P =
Tn
i=1 hi
repräsentiert durch:
I
rechte und linke Begrenzung L(P), R(P)
I
L(P), R(P) geordnete Liste von Halbebenen (a, b, c) ∈
R2
Annahme: keine horizontalen Kanten
137
Schnitte konvexer Polygone
gegeben:
gesucht:
konvexe Polygone P1 , P2 ,
als Paare (L(P1 ), R(P1 )) und (L(P2 ), R(P2 ))
geordneter Listen von Halbebenen
konvexes Polygon P = P1 ∩ P2 als (L(P), R(P))
Idee: Sweep-line-Algorithmus
Zustand : ≤ 4 (Verweise auf) Kanten l1 , r1 , l2 , r2 aus
L(P1 ), R(P1 ), L(P2 ), R(P2 ),
welche die aktuelle Sweep-line schneiden
(je mit Verweis h(e) auf die Halbebene, auf deren
Grenze die Kante e liegt)
Ereignisse : alle Ecken beider Polygone
nächstes Ereignis lässt sich einfach bestimmen:
Maximum der y -Koordinaten aller unteren
Endpunkte der Strecken im Zustand
(keine spezielle Datenstruktur zur Verwaltung der
Ereignisse nötig)
138
Ereignisbehandlung
für jedes Ereignis p:
Ereignisbehandlung abhängig von Zuordnung zu
I
Polygon (P1 oder P2 )
I
Seite (L oder R)
Beispiel-Fall (andere Fälle analog):
p ist oberer Endpunkt einer Kante e aus L(P1 )
p kommt als Ecke in P vor, wenn
1. p innerhalb P2 und e schneidet keine Kante von P2 ,
2. e schneidet eine Kante aus l2 ,
3. e schneidet eine Kante aus r2
139
Ereignisbehandlung
Ereignis p (oberer Endpunkt einer Kante e aus L(P1 )):
I
falls p ∈ P2 , d.h. zwischen l2 und r2 :
L(P) ← L(P) ∪ {h(e)}, (Teil von) e ist Begrenzung von P
I
falls e schneidet r2 :
Schnittpunkt von e und r2 ist Ecke in P
I
I
I
falls p rechts von r2 (Schnittpunkt oberer Punkt in P):
L(P) ← L(P) ∪ {h(e)}, R(P) ← R(P) ∪ {h(r2 )},
falls p links von r2 (Schnittpunkt unterer Punkt in P):
h(e) und h(r2 ) schon in P
falls e schneidet l2 :
Schnittpunkt von e und l2 ist Ecke in P
I
I
falls p rechts von l2 : L(P) ← L(P) ∪ {h(l2 )}
falls p links von r2 : L(P) ← L(P) ∪ {h(e)}
140
Laufzeiten
Laufzeit
I
der Ereignisbehandlung in CPI jeweils in O(1)
I
des Algorithmus CPI zum Schnitt konvexer Polygone O(n)
des Divide-and-Conquer-Algorithmus HPI zum Schnitt
endlich vieler Halbebenen
I
I
I
elementare Teilaufgabe (|H| = 1): O(1)
rekursiver Fall:
I
I
Teilen: O(1)
Zusammenfügen (CPI): O(n)
T (HPI, n) ∈
O(1)
, falls n = 1
O(1) + 2T (HPI, n/2) + O(n) , falls n > 1
Lösung der Rekurrenz ergibt T (HPI, n) ∈ O(n log n)
I
des (naiven) Algorithmus zur Berechnung des
Voronoi-Diagrammes: O(n2 log n)
141
Leere Kreise
gegeben:
Voronoi-Diagramm vor(P) (als planarer Graph (V , E))
Ecke q ∈ V
größter leerer Kreis um q ∈
C(P, q) = {s ∈
R2 in P = {p1, . . . , pn }
R2 | d(q, s) ≤ min{d(q, pi ) | pi ∈ P}}
Satz
Für jede endliche Menge P = {p1 , . . . , pn } ⊆
vor(P) = (V , E):
R2 gilt in
R
I
∀q ∈ 2 :
q ∈ V (Voronoi-Ecke) gdw. |C(P, q) ∩ P| ≥ 3
I
∀(pi , pj ) ∈ P 2 :
Mittelsenkrechte (pi , pj ) enthält Voronoi-Kante gdw.
∃q ∈ M(pi , pj ) : C(P, q) ∩ P = {pi , pj }
142
Sweep-line-Algorithmus
gegeben:
gesucht:
endliche Menge P = {p1 , . . . , pn } ⊆
Voronoi-Diagramm vor(P) = (V , E)
R2
Idee:
I
Ereignisse:
alle Punkte aus P geordnet nach fallender y -Koordinate
I
Zustand:
alle Schnittpunkte des Voronoi-Diagramms (Kanten) mit
Sweep-line
Problem:
I
Grenzen zwischen Voronoi-Zellen hängen auch von
Punkten pi noch unterhalb der Sweep-line ab
I
Es gibt also Punkte oberhalb der Sweep-line, deren
Zuordnung zu Voronoi-Zellen noch nicht bekannt ist.
143
Partielles Voronoi-Diagramm
Welcher Teil des Voronoi-Diagrammes ist bekannt (kann sich
durch Punkte unterhalb der Sweep-line nicht mehr ändern),
nachdem die Sweep-line einen Punkt pi ∈ P erreicht hat?
R2 | qy = piy }
I Abstand eines Punktes q ∈ R2 oberhalb der Sweep-line
I
Sweep-line bei pi : l = {q ∈
zur Sweep-line l: d(q, l) = qy − piy
R
I
Für Punkte q ∈ oberhalb der Sweep-line mit
∃pj ∈ P : d(q, pj ) < d(q, l) = qy − piy ändert sich die
Zuordnung nicht mehr.
I
Grenze zwischen {q ∈ 2 | d(q, pj ) < qy − piy } (wenn
Sweep-line bei pi ) ist eine (nach oben geöffnete) Parabel,
Funktion
(x − pjx )2
(pjy + piy )
f (x) =
+
2(pjy − piy )
2
R
144
Küste
R
I
Grenze zwischen {q ∈ 2 | min{d(q, pj ) | pj ∈ P} < qy − piy } ist
das Minimum einer endlichen Menge von (nach oben
geöffneten) Parabeln (Küste)
(pjy + piy )
(x − pjx )2
+
| pj ∈ P
f (x) = min
2(pjy − piy )
2
I
Schnittpunkte der Parabeln liegen immer auf Voronoi-Kanten
(Warum ?)
I
Punkt pi ∈ P auf der Sweepline gdw. neue (entartete) Parabel
entsteht
I
Küste kann mehrere Teile derselben Parabel enthalten
(z.B. nach Entstehung einer neuen Parabel)
I
Parabeln verschwinden (Nachbar-Parabeln verschmelzen)
genau in Schnittpunkten von Voronoi-Kanten, also in
Voronoi-Ecken
Idee: Zustand = Repräsentation der Küste
145
Ereignisse
Entstehen neuer Parabeln
Punkt-Ereignis pi ∈ P
Verschwinden von Parabeln (Entdeckung von Voronoi-Ecken)
Kreis-Ereignis v ∈ V
Problem:
Voronoi-Ecken befinden sich bei Ihrer Entdeckung auf der
Küste, also oberhalb der Sweep-line
Beobachtung:
Bei der Entdeckung einer Voronoi-Ecke r ist die Sweep-Line
Tangente an den größten leeren Kreis CP (r ) für die
Voronoi-Ecke r mit |CP (r ) ∩ P| ≥ 3
146
Sweep-line-Algorithmus – Idee
Ereignisse : geordnet nach fallender y -Koordinate
I alle Punkte aus P (zu Beginn bekannt)
I alle Voronoi-Ecken (zu Beginn unbekannt)
Zustand : Küste als Menge von Parabel-Teilen
147
Repräsentation des Voronoi-Diagrams
R
Zerlegung des 2 :
doppelt verkettete Kantenliste mit
Halbkanten : Anfangspunkt, next, prev
Ecken : geordnete Liste der inzidenten Kanten
Flächen : Verweis auf eine (Innen-)Kante
Problem: unbeschränkte Flächen
Lösung: bounding box um P
148
Datenstruktur für Ereignismenge
Ereignismenge Q:
priority queue mit y -Koordinate als Priorität
von zwei Typen von Ereignissen:
Punkt : Punkt pi ∈
R2
Kreis :
I
I
Berührungspunkt der Sweep-line mit dem
Kreis durch die Punkte pi , pj , pk ∈ P oberhalb
der Sweep-line
Verweis auf verschwindende Parabel (Blatt)
149
Datenstruktur für Zustand
Zustand:
balancierter Suchbaum
I Blätter: (aktive) Parabelteile um Punkte aus P oberhalb der
Sweep-line
I
I
I
pi ∈ P definierender Punkt der Parabel
Verweis auf (Kreis-)Ereignis in Q, an welchem die Parabel
verschwindet (zunächst nil)
innere Knoten: Schnittpunkte der benachbarten
Parabelteile
I
I
Punkte pi , pj ∈ P 2 , die die benachbarten Parabelteile
definieren
Verweis auf eine der Halbkanten der Zerlegung, die den
Schnittpunkt der Parabelteile enthält
Finden, Enfügen, Löschen in O(log n)
150
Kreis-Ereignisse
Ausschnitt der Küste bei Sweep-line l bei y :
drei benachbarte Parabelteile ai−1 , ai , ai+1 zu den Punkten
pi , pj , pk
Parabelteil ai zu pj verschwindet aus der Küste gdw.
∃r ∈ 2 : d(r , pi ) = d(r , pj ) = d(r , pk )
R
wenn Parabelteil ai zu pj verschwindet, gilt
I
|C(P, r ) ∩ P| ≥ 3
I
d(r , pj ) = d(r , l) = ry − y
151
Berechnung der Kreis-Ereignisse
Kreis-Ereignis:
I
Position (y -Koordinate) der Sweep-line beim
Zusammentreffen zweier Voronoi-Kanten in einem Punkt q
oberhalb der Sweep-line
I
Position der Sweep-line =
kleinste y -Koordinate im leeren Kreis C(P, q)
I
drei Punkte pi , pj , pk auf dem Kreis C(P, q) gegeben
Kreis C(P, q) eindeutig bestimmt
(Radius r , Mittelpunkt (qx , qy ) durch Gleichungssystem
(px − qx )2 + (py − qy )2 = r 2 bestimmen)
kleinste y -Koordinate im Kreis C(P, q) eindeutig bestimmt
(qy − r )
152
Kreis-Ereignisse
I
I
Kreis-Ereignisse können höchstens an vorher
benachbarten Tripeln von Parabelteilen auftreten
Berechnung potentieller Kreisereignisse, wenn neue
benachbarte Tripel von Parabelteilen entstehen
Wann geschieht das?
I
I
I
Punkt-Ereignis zerlegt einen Parabelteil ai in zwei Teile ai0
und ai00 und fügt neues Patabelteil b dazwischen ein,
≤ 2 neue Tripel ((ai−1 , ai0 , b) und (b, ai00 , ai+1 )) zu paarweise
verschiedenen Punkten aus P
≤ 2 potentielle Kreis-Ereignisse
Kreis-Ereignis: Parabelteil ai verschwindet
Nachbarn ai−1 und ai+1 des verschwundenen Parabelteils
werden zueinander benachbart
≤ 2 neue Tripel ((ai−2 , ai−1 , ai+1 ) und (ai−1 , ai+1 , ai+2 ) )
≤ 2 potentielle Kreis-Ereignisse
nicht jedes benachbarte Tripel von Parabelteilen führt zu
einem Kreis-Ereignis (falscher Alarm, wird später aus der
Ereignis-Queue gelöscht)
153
Punkt-Ereignis-Behandlung
Punkt-Ereignis: pi
Aufgaben:
I Parabelteil a oberhalb pi in Küste (Zustand) finden:
I
an inneren Knoten (pl , pl+1 ) Berechnung der aktuellen
Parabel-Schnittpunkte notwendig
I
Kreis-Ereignis, auf das a verweist, löschen (falscher Alarm)
I
a in zwei Parabelteile a0 , a2 teilen (zwei neue Blätter)
neue (entartete) Parabel a1 dazwischen (als Blatt) in Z
einfügen
neue innere Knoten mit Parabelpunkten einfügen,
neue potentielle Kreis-Ereignisse berechnen und
I
I
I
in Ereignis-Queue einfügen,
mit den Parabelteilen verknüpfen
154
Kreis-Ereignis-Behandlung
Kreis-Ereignis:
I y -Koordinate
I Verweis auf Parabelteil (Blatt in Z ), der durch das Ereignis
verschwindet
I Mittelpunkt q
Aufgaben:
I verschwindenden Parabelteil a aus Z löschen
(dabei innere Knoten aktualisieren)
I alle Kreis-Ereignisse, an denen a beteiligt ist, aus Q,
löschen
(über Verweise von Nachbarn von a in Z )
I Kreis-Ereignisse für neu entstandene Tripel benachbarter
Parabelteile bestimmen und in Q einfügen
I Voronoi-Knoten q in Voronoi-Diagramm einfügen
I Kante zwischen V (P, pi ) und V (P, pk ) mit Ecke q im
Voronoi-Diagramm anlegen (und Verweise erstellen)
155
Algorithmus
(Fortune’s Sweep)
Algorithmus : Voronoi
R
Eingabe : P = {p1 , . . . , pm } ⊆ 2
Ausgabe : Voronoi-Diagramm D (Zerlegung, doppelt verkettete
Kantenliste)
D ← ∅ (Voronoi-Diagramm)
Q ← ∅ (Ereignisse)
Z ← ∅ (Zustand)
für jedes i ← 1, . . . , n :
Q ← Q ∪ {pi }
solange Q 6= ∅ :
e ← getmin(Q), Q ← deletemin(Q)
wenn e Punkt-Ereignis dann
Punkt-Ereignisbehandlung(e, Z , Q, D)
sonst
Kreis-Ereignisbehandlung(e, Z , Q, D)
Nachbearbeitung(D)
156
Nachbearbeitung
Voronoi-Diagramm nach Ende der Ereignisbehandlung noch
nicht vollständig:
Reststruktur Z nach Behandlung aller Ereignisse:
innere Knoten repräsentieren Voronoi-Kanten mit nur einer
Voronoi-Ecke (Halbgeraden)
Idee: bounding box R um P
I
Berechnung der Schnittpunkte der Halbgeraden mit R als
Endpunkte
I
D aktualisieren
(Verweise zwischen Ecken, Kanten, Flächen)
157
Laufzeit
I
Anzahl der Ereignisse
I
I
I
Punkt: |P| = n
Kreis: ≤ 2n − 5
insgesamt O(n)
Laufzeit für Ereignis-Bearbeitung:
I
I
Punkt: O(log n)
Kreis: O(log n)
Gesamt-Laufzeit: O(n log n)
Speicherbedarf: O(n)
(Eingabe, Ereignis-Queue, Voronoi-Diagramm)
158
Robustheit
I
Punkte mit gleicher y -Koordinate:
Kippen der Sweep-line
I
Punkt- und Kreisereignis mit gleicher y -Koordinate:
Kreis- vor Punktereignis bearbeiten
I
Kreis-Ereignisse für < 3 Punkte aus P für je drei Punkte
unabhängig voneinander verwalten,
führen zu Kanten der Länge 0,
Voronoi-Diagramm nachträglich bereinigen (um
überflüssige Voronoi-Knoten und -Kanten)
I
Punkt-Ereignis auf Parabel-Schnittpunkt:
beliebigen der Parabelteile wählen
159
Delone-Triangulierung
(auch Delaunay-Triangulierung)
Delone-Graph einer endlichen Punktmenge P ∈ 2 :
dualer Graph zum Voronoi-Diagramm von P
Delone-Zerlegung: Einbettung des dualen Graphen in R 2 mit
R
I
Menge P von Ecken,
I
Strecken als Kanten
I
Delone-Zerlegung ist planar (Kanten schneiden einander
nicht)
I
kann Flächen enthalten, die keine Dreiecke sind
Delone-Triangulierung:
Delone-Zerlegung mit zusätzlicher (geeigneter) Triangulierung
der (konvexen) Flächen, die in der Delone-Zerlegung keine
Dreiecke sind
Anwendung z.B. zur Interpolation von Höhenprofilen aus
Messwerten
160
Herunterladen