Was bisher geschah
I Motivation, Beispiele
I maschinelle Repräsentation geometrischer Objekte imR2: Punkt, Gerade, Halbebene, Strecke, Polygon,
ebene Zerlegung in Regionen (planare Graphen)
I spezielle Datenstrukturen zur (mehrfachen) effizienten Suche
Algorithmen zur
I Bestimmung der konvexe Hülle endlicher Punktmengen P ⊆R2
I Bestimmung aller Schnittpunkte einer endlichen Menge von StreckenS⊆ R22
I Bestimmung von Triangulierungen von PolygonenP ⊆R2
I Punktsuche in Regionen (Suchstruktur)
I Voronoi-Diagramme, Delone-Triangulierungen
Konvexe Hülle im R
3Anwendung z.B.
I zur Kollisionserkennung
I in Computergraphik
I Konvexe Hülle vonnPunkten hat höchstensnEcken.
I Jedes konvexe Polyeder imR3mitnEcken hat
I höchstens 3n−6 Kanten und
I höchstens 2n−4 Flächen.
Beobachtung:
Menge der Kanten jedes konvexen PolyedersP ⊆R3ist ein planarer Graph
162
Repräsentation der konvexen Hülle im R
3Menge der Kanten jedes konvexen PolyedersP ⊆R3ist ein planarer Graph.
Repräsentation als doppelt verkettete Kantenliste (mit Eckenv ∈R3)
Aufgabe conv-3d:
gegeben: endliche PunktmengeP={p1, . . . ,pn} ⊆R3 gesucht: conv(P),
repräsentiert als doppelt verkettete Kantenliste Vereinbarung:
Kantenfolge entlang der Flächen entegegen Uhrzeigersinn (von außerhalb des Polygons gesehen)
Berechnung der konvexen Hülle
Idee:randomisierterAlgorithmus
I Beginn: Auswahl vonP0 ={p1, . . . ,p4} ⊆P, die nicht in einer Ebene liegen,
konvexe Hülle conv(P0)ist Tetraeder
I restliche Punkteq ∈P in zufälliger ReihenfolgezuP0 hinzufügen:
mögliche Fälle
1. q∈conv(P0): conv(P0∪ {q}) =conv(P0) 2. q6∈conv(P0):
vonqsichtbare Flächenaus conv(P0)entfernen und für jede Kanteuv auf demHorizontDreieck(u,v,q)zu conv(P0)hinzufügen
164
Sichtbarkeit von Punkten
gegeben: konvexes PolygonP ⊆R3
(als doppelt verkettete Kantenliste), Punktq∈R3
Flächef inPist vonq(von außen)sichtbargdw.
q6∈h(f)(Halbraum mitf in Grenzebene) Beobachtung:
von Punkten innerhalb des Polygons ist keine Polygonfläche sichtbar
vonqsichtbarer Bereich vonP:
I = Menge aller vonqsichtbaren Flächen inP
I ist zusammenhängender Bereich inP (dualer Graph zusammenhängend) HorizontvonPbzgl.q:
äußere Begrenzung des vonqsichtbaren Bereiches inP (geschlossener Kantenzug)
Bestimmung der sichtbaren Flächen
naiv:
I jede Fläche testen (O(|F|), fürnPunkteO(n))
I Gesamtlaufzeit zur Bestimmung der konvexen Hülle:O(n2) bessere Idee:
Verwaltung von Zusatzinformation zur (bisher berechneten) konvexen Hülle conv(P0)mitP0 ⊆P
Konfliktmengen:
I zu jeder Flächef ∈conv(P0)
PC0 (f) ={q∈P\P0 |f vonqsichtbar}
I zu jeder Eckeq ∈P\P0
FC(q) ={f ∈conv(P0)|f vonq sichtbar}
166
Konflikt-Graph
gegeben: endliche PunktmengeP={p1, . . . ,pn} ⊆R3, P0⊆P,
conv(P0)als doppelt verkettete Kantenliste
Konfliktgraph für conv(P0):
bipartiter GraphG= (Vp∪Vf,E)mit
I Vp=P\P0
I Vf ={f |f ∈conv(P0)}
I KantenE ∈Vp×Vf mit
(p,f)∈E gdw.f vonpsichtbar
Verwaltung des Konflikt-Graphen
I zu Beginn des Algorithmus:|P0|=4, conv(P0)Tetraeder für jeden Punktq∈P\P0 und jede der 4 Tetraeder-Flächen Sichtbarkeit bestimmen
I Aktualisierung bei neu hinzukommendem Punktq∈P\P0: 1. qund alle Nachbarn vonqausGentfernen
(vonqsichtbare Flächen)
2. Knoten für neu erzeugte Flächenf0zuGhinzufügen (Dreieckef0= (q,u,v)zwischenqund Horizontkante(u,v) aus conv(P0))
3. Sichtbarkeit für Punkter ∈P\(P0∪ {q})und jede neue Flächef0 = (q,u,v)feststellen,
ggf. Konfliktkante(r,f0)inGeinfügen
(wichtige) Beobachtung: neue Flächef0höchstens von den Punktenr ∈P\(P0∪ {q})sichtbar, die wenigstens eine der an der Kante(u,v)benachbarten Flächenf1,f2sehen (nur Punkter ∈Gp(f1)∪GP(f2))
Spezialfall: Dreieckf0 = (q,u,v)in derselben Ebene wie eine (nicht sichtbare) Flächef aus conv(P0)
168
Algorithmus
Algorithmus : conv-3d Eingabe:P⊆R3endlich
Ausgabe:C=conv(P)als doppelt verkettete Kantenliste P←P\P0,C←conv(P0)
(fürP0={p1,p2,p3,p4} ⊆P beliebig, aber nicht in einer Ebene) Initialisierung KonfliktgraphG
solangeP6=∅:
Auswahlq∈P(beliebig),P←P\ {q}
wennGF(q)6=∅(Konflikte exisitieren)dann
C0 ←C,C←C\GF(q)(sichtbare Flächen ausCentfernen) H ←Horizont (als Liste von Kanten)
für jedese∈H:
f ←Dreieck(q,e),C←C∪f (Fläche hinzufügen) (f1,f2)←Flächen inC0 mit gemeinsamer Kantee K ←GP(f1)∪GP(f2)(potentielle Konfliktpunkte mitf) für jedesr ∈K\ {q}:
wennr sieht f dannG←G∪Kante(r,f)
G←G\q,G←G\GF(q)(Konfliktflächen ausGentfernen)
Schnitte von Halbräumen und -ebenen
Dualität:
Paar(a,b)∈R2repräsentiert
I Punkt mit den Koordinaten(a,b)
I Geradey =ax−b
zu Punktp= (px,py)∈R2duale Gerade: p∗:y =pxx−py
zu Geradel :y =mx+ndualer Punkt: l∗= (m,−n) Beobachtungen:
I ∀p,l ∈R2:p∈lgdw.l∗ ∈p∗
I ∀p,l ∈R2:poberhalb vonlgdw.l∗ oberhalb vonp∗
I Punktepin oberer (unterer) konvexer Hülle vonP gdw.
min (max) über allep∗ enthält ein Teil der Geradep∗
170
Lifting auf Einheits-Paraboloid
Einheits-ParaboloidinR3: U=
n
(x,y,z)∈R3|z =x2+y2o
Lifiting:
Projektionl:R2→R3von Punktenp∈R2auf Einheitsparaboloid:
∀p = (px,py)∈R2:l(p) = (px,py,p2x+p2y)
für gegebene Punktmengep∈R2:
I Punktmengel(P) ={l(p)|p ∈P} ⊆R3
I konvexe Hülle conv(l(P))⊆R3
I Projektion (der Kanten) der konvexen Hülle aufR2: Delone-Zerlegung vonP(imR2)
Tangentialebenen an U
euklidischer Abstand zwischen Punktenp,q ∈R2: d(p,q) =
q
(px −qx)2+ (py −qy)2 (d(p,q))2 = (px−qx)2+ (py−qy)2
Tangentialebeneh:R2→Ran Einheits-ParaboloidU im Punktl(p):
h(p) =2pxx+2pyy−(p2x+p2y)
Höhe der Tangentialebeneh(p)in beliebigem Punktq ∈R2: h(p)(q) = 2pxqx +2pyqy−(p2x+p2y)
l(q) = qx2+q2y
l(q)−h(p)(q) = (qx2+qy2) + (px2+p2y)−2pxqx −2pyqy
= (d(x,y))2
172
Voronoi-Diagramm
I Höhe der Tangentialebeneh(p)inqrepräsentiert (zusammen mitl(q)) den Abstand zwischenpundq
I Tangentialebenenh(p),h(q)schneiden sich in Punkten (rx,ry, . . .)mitd(r,p) =d(r,q)(Voronoi-Kanten)
Für jede PunktmengeP⊆R2:
H(P) = {h(p)|p ∈P}
E(H) = max
h∈H h
Projektion der Schnitte (Strecken) der inE benachbarten Ebenen auf die Ebenez =0:
Voronoi-Diagramm vonP
Berechnung von Voronoi-Diagrammen imR2durch Berechnung konvexer Hüllen imR3möglich
Höher-dimensionale konvexe Hüllen
Einheits-Paraboloid inRd+1: U=
(
(x1, . . . ,xd+1)∈Rd+1|xd+1=
d
X
i=1
x2 )
Lifiting: Projektionl:Rd →Rd+1von Punkten auf Einheitsparaboloid durch
∀x ∈Rd :l(x) =l(x1, . . . ,xd) = (x1, . . . ,xd,
d
X
i=1
x2)
für gegebene Punktmengep∈Rd:
I Punktmengel(P) ={l(p)|p∈P} ⊆Rd+1
I konvexe Hülle conv(l(P))
I Delone-Zerlegung fürP:
Projektion der (unteren) konvexen Hülle aufRd
I Voronoi-Diagramm fürP:
Projektion der Schnitte der Tangentialräume
174
Kantenanzahl in konvexen Hüllen
Anzahl der Kanten der konvexen Hülle vonP⊆Rd mit|P|=n:
d =1: ≤2, O(1)
d =2: ≤n, O(n)
d =3: ≤3n−6, O(n)
d >3: (Upper bound theorem) O(nbd/2c)