Algorithmische Geometrie: Schnittpunkte von Strecken

Werbung
Algorithmische Geometrie: Schnittpunkte von Strecken
Algorithmische Geometrie: Schnittpunkte von
Strecken
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
3 Phasen im Algorithmenentwurf
1. Konzentration auf das Hauptproblem
2. Verallgemeinerung auf entartete Eingaben
3. Implementation
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Überblick
→
1
Gleitebenenverfahren für Schnittpunkte
2
Die doppelt verkettete Kantenliste
3
Berechnung der Überlagerung zweier Ebenenaufteilungen
Flächendaten
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Einschub Balancierter Baum
Es gibt Datenstrukturen (Bsp. AVL-Baum), mit denen garantiert sortierte
Mengen effizient verwaltet werden können.
Speicherplatzbedarf in O (n).
Suchen eines Elements in der sortierten Menge in O (log n).
Hinzufügen und Löschen von Elementen: O (log n).
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Auftrag Schnittpunkte
Gegeben: n Strecken der Ebene
Gesucht: Menge aller Schnittpunkte der abgeschlossenen Strecken, unter
Angabe der beteiligten Strecken
Die Laufzeit soll ausgabeabhängig möglichst gut sein.
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Überblick
→
1
Gleitebenenverfahren für Schnittpunkte
2
Die doppelt verkettete Kantenliste
3
Berechnung der Überlagerung zweier Ebenenaufteilungen
Flächendaten
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Anfangsidee
Wir scheiden nur Strecken, deren y-Bereiche sich auch schneiden.
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Anfangsidee
Wir scheiden nur Strecken, deren y-Bereiche sich auch schneiden.
Status: Menge der Strecken, die die Gleitgerade schneiden.
Ereignispunkte: Anfangs- und Endpunkte der Strecken
Schnittpunktbestimmung: nur Strecken, die gleichzeitig im Status sind
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Anfangsidee
Wir scheiden nur Strecken, deren y-Bereiche sich auch schneiden.
Status: Menge der Strecken, die die Gleitgerade schneiden.
Ereignispunkte: Anfangs- und Endpunkte der Strecken
Schnittpunktbestimmung: nur Strecken, die gleichzeitig im Status sind
Problem: wir schneiden noch zu viele Paare von (weit entfernten)
Strecken!
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Verfeinerung
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Verfeinerung
Status: Sortierte Liste T der Strecken, wie sie die Gleitgerade (von
links nach rechts) schneiden. Balancierter Suchbaum.
Schnittpunktbestimmung: nur benachbarte Strecken in T
Ereignispunkte: Anfangs-, End- und Schnittpunkte der Strecken, sortiert
nach Abarbeitung: Von oben nach unten, bei Gleichheit von
links nach rechts. Zu jedem Punkt ist eine Menge dort
beginnender Strecken gespeichert. Balancierter Suchbaum.
Kein Heap, da bereits enthaltene Punkte nicht nochmals
eingefügt werden sollen. Ereigniswarteschlange Q.
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Algorithmus 3.3 (Hauptschleife)
Eingabe: Menge S von Strecken der Ebene
Ausgabe: Eine Menge von Schnittpunkten mit Angabe der beteiligten
Strecken
1:
2:
3:
4:
5:
6:
Funktion S UCHE S CHNITTPUNKTE(S)
Initialisiere eine leere Ereigniswarteschlange Q. Füge die
Randpunkte der Strecken von S in Q ein. Zu den oberen Randpunkten
wird auch die zugehörige Strecke gespeichert. Für horizontale
Strecken betrachten wir den linken Randpunkt als oberes Ende
(Anfangspunkt).
Initialisiere einen leeren Statusbaum T .
Solange Q nicht leer ist, mache
Bestimme den nächsten Ereignispunkt p aus Q und lösche
diesen.
B EHANDEL E REIGNISPUNKT(p)
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Algorithmus 3.3 (B EHANDEL E REIGNISPUNKT Teil 1/2)
Unterprogramm B EHANDEL E REIGNISPUNKT(p)
Bezeichne mit U (p) die Menge der Strecken (aus Q), die in p
beginnen.
9:
Suche alle Strecken in T , die p enthalten. L(p) sei die Menge jener
Strecken, für die p das untere Ende ist, und C (p) die Menge der
Strecken von T mit p im Inneren.
10:
Wenn L(p) ∪ U (p) ∪ C (p) mehr als eine Strecke enthält, dann
11:
Melde p als Schnittpunkt, zusammen mit L(p), U (p) und C (p).
7:
8:
12:
13:
Lösche die Strecken in L(p) ∪ C (p) aus T .
Füge die Strecken in U (p) ∪ C (p) neu in richtiger Reihenfolge in T
ein (horizontale Strecken zum Schluss). . Löschen und Neueinfügen
der Strecken von C (p) vertauscht deren Reihenfolge
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Algorithmus 3.3 (B EHANDEL E REIGNISPUNKT Teil 2/2)
14:
15:
T.
16:
17:
18:
19:
20:
21:
22:
23:
Wenn U (p) ∪ C (p) = ∅ dann
Bestimme linken Nachbarn sl und rechten Nachbarn sr von p in
S UCHE N EUES E REIGNIS(sl ,sr ,p)
sonst
Sei s 0 die Strecke am weitesten links von U (p) ∪ C (p) in T ,
und sl deren linker Nachbar in T .
S UCHE N EUES E REIGNIS(sl ,s 0 ,p) falls sl existiert.
Sei s 00 die Strecke am weitesten rechts von U (p) ∪ C (p) in T ,
und sr deren rechter Nachbar in T .
S UCHE N EUES E REIGNIS(s 00 ,sr ,p) falls sr existiert.
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Algorithmus 3.3 (S UCHE N EUES E REIGNIS)
Unterprogramm S UCHE N EUES E REIGNIS(sl , sr , p)
Wenn sl und sr sich unterhalb der Gleitebene schneiden (inklusive:
direkt rechts von p auf dieser), und wenn deren Schnittpunkt noch
nicht in Q enthalten ist, dann
26:
Füge den Schnittpunkt in Q ein.
24:
25:
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Satz 3.4
Alle Schnittpunkte und zugehörige Strecken werden korrekt von
Algorithmus 3.3 bestimmt.
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Satz 3.4
Alle Schnittpunkte und zugehörige Strecken werden korrekt von
Algorithmus 3.3 bestimmt.
Beweis.
Mit Induktion folgt, dass jeder Schnittpunkt auch erkannt wird sobald zwei
der beteiligten Strecken benachbart werden. Dies passiert nur an
Ereignispunkten. Bei der Behandlung jedes Schnittpunktes p enthält T
tatsächlich alle Strecken, die von der Waagerechten geschnitten werden,
bis auf Strecken aus U (p).
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Satz 3.5
Die Laufzeit von Algorithmus 3.3 für n Strecken mit I Schnittpunkten ist in
O ((n + I ) log n).
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Beweis Satz 3.5 (Hauptschleife)
1:
2:
3:
4:
5:
6:
Funktion S UCHE S CHNITTPUNKTE(S)
Initialisiere eine leere Ereigniswarteschlange Q.
. Zeit O (1)
Füge die Randpunkte der Strecken von S in Q ein. Zu den oberen
Randpunkten wird auch die zugehörige Strecke gespeichert. Für
horizontale Strecken betrachten wir den linken Randpunkt als oberes
Ende (Anfangspunkt). . 2n mal Grundoperation Suchen. Maximal 2n
mal Grundoperation Einfügen in Q oder alternativ Einfügen in
Streckenmenge. Dabei Größe von Q maximal 2n. Zeit: O (n log n).
Initialisiere einen leeren Statusbaum T .
. Zeit O (1)
Solange Q nicht leer ist, mache
Bestimme den nächsten Ereignispunkt p aus Q und lösche
diesen.
. Maximal 2n + I Durchläufe, Grundoperationen in Q, von
Größe maximal 2n + I. Zeit: 2(2n + I ) log(2n + I ) ∈ O ((n + I ) log n)
B EHANDEL E REIGNISPUNKT(p)
Beachte: I < n2 , log(2n + I ) < log(2n2 ) = log 2 + 2 log n ∈ O (log n).
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Satz 3.5 (S UCHE N EUES E REIGNIS)
Unterprogramm S UCHE N EUES E REIGNIS(sl , sr , p)
Wenn sl und sr sich unterhalb der Gleitebene schneiden (inklusive:
direkt rechts von p auf dieser), und wenn deren Schnittpunkt noch
nicht in Q enthalten ist, dann
26:
Füge den Schnittpunkt in Q ein.
24:
25:
Jeder Durchlauf dieses Unterprogramms benötigt Zeit in O (log |Q|), das ist
in O (log n).
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Beweis Satz 3.5 (B EHANDEL E REIGNISPUNKT Teil 1/2)
Unterprogramm B EHANDEL E REIGNISPUNKT(p) wird maximal 2n + I mal
ausgeführt.
Unterprogramm B EHANDEL E REIGNISPUNKT(p)
Bezeichne mit U (p) die Menge der Strecken (aus Q), die in p
beginnen.
. Zeit: O (|U (p)|)
9:
Suche alle Strecken in T , die p enthalten. L(p) sei die Menge jener
Strecken, für die p das untere Ende ist, und C (p) die Menge der
Strecken von T mit p im Inneren.
. Zeit: O (log |T| + |L(p) ∪ C (p)|)
10:
Wenn L(p) ∪ U (p) ∪ C (p) mehr als eine Strecke enthält, dann
11:
Melde p als Schnittpunkt, zusammen mit L(p), U (p) und C (p).
. Zeit O (|L(p) ∪ C (p) ∪ U (p)|)
7:
8:
Lösche die Strecken in L(p) ∪ C (p) aus T .
. Zeit:
O (|L(p) ∪ C (p)| log |T|)
13:
Füge die Strecken in U (p) ∪ C (p) neu in richtiger Reihenfolge in T
ein (horizontale Strecken zum Schluss). . Zeit O (|U (p) ∪ C (p)| log |T|)
12:
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Beweis Satz 3.5 (B EHANDEL E REIGNISPUNKT Teil 2/2)
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
Wenn U (p) ∪ C (p) = ∅ dann
Bestimme linken Nachbarn sl und rechten Nachbarn sr von p in
T.
. O (|T|)
S UCHE N EUES E REIGNIS(sl ,sr ,p)
. Zeit: O (log n)
sonst
Sei s 0 die Strecke am weitesten links von U (p) ∪ C (p) in T , .
Zeit: O (log |T|)
und sl deren linker Nachbar in T .
. Zeit: O (log |T|)
0
S UCHE N EUES E REIGNIS(sl ,s ,p) falls sl existiert. . Zeit: O (log n)
Sei s 00 die Strecke am weitesten rechts von U (p) ∪ C (p) in T , .
Zeit: O (log |T|)
und sr deren rechter Nachbar in T .
. Zeit: O (log |T|)
S UCHE N EUES E REIGNIS(s 00 ,sr ,p) falls sr existiert.
. Zeit:
O (log n)
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Beweis Satz 3.5 (Abschluss)
m(p) := |L(p) ∪ U (p) ∪ C (p)|
Zeitaufwand von B EHANDEL E REIGNISPUNKT(p) in O (m(p) log n).
P
m := p m(p), Zeitaufwand aller Aufrufe zusammen in O (m log n).
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Beweis Satz 3.5 (Abschluss)
m(p) := |L(p) ∪ U (p) ∪ C (p)|
Zeitaufwand von B EHANDEL E REIGNISPUNKT(p) in O (m(p) log n).
P
m := p m(p), Zeitaufwand aller Aufrufe zusammen in O (m log n).
k: Größe der Ausgabe (Anzahl ausgegebener Punkte plus jeweils der
Anzahl der ausgegebenen zugehörigen Strecken)
m ∈ O (n + k ).
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Beweis Satz 3.5 (m ∈ O (n + I ))
ne Knoten: Schnitt- und Endpunkte, ne 6 2n + I.
nk Kanten: ungeteilte“ Abschnitte der gegebenen Strecken.
”
nf Flächen: nf 6 2nk /3 (Flächen-Kanten-Inzidenzen doppelt zählen,
keine Zweiecke“)
”
Eulersche Polyederformel (Zusammenhangskomponenten):
ne + nf − nk > 2
nk 6 3ne − 6, da nk 6 ne + nf − 2 6 ne + 2nk /3 − 2.
m(p) gleich dem Grad des Knotens p.
m die Summe der Grade aller Knoten, m = 2nk
m 6 6(2n + I ) − 12 < 12(n + I ).
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Satz 3.6
Die I Schnittpunkte von n Strecken können mit einem Algorithmus
(Modifikation von Algorithmus 3.3) mit Laufzeit in O ((n + I ) log n) und
Speicherbedarf in O (n) berechnet werden.
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Überblick
→
1
Gleitebenenverfahren für Schnittpunkte
2
Die doppelt verkettete Kantenliste
3
Berechnung der Überlagerung zweier Ebenenaufteilungen
Flächendaten
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Beispiel Ebenenaufteilung
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Datenstruktur 3.7: Doppelt verkettete Kantenliste
3 Datenlisten: für Knoten, Flächen und Halbkanten.
K NOTEN vi
KOORDINATEN = f (vi ) ∈ R2
I NZIDENTE H ALBKANTE: Verweis auf eine Halbkante mit Anfang vi
F L ÄCHE fi
AUSSENRAND: Halbkante des Außenrandes
I NNENR ÄNDER: Menge von Halbkanten, 1 je Loch
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Datenstruktur 3.7: Doppelt verkettete Kantenliste (Forts.)
H ALBKANTE hi
A NFANG: Anfangsknoten
G EGEN ÜBER: inverse Halbkante
I NZIDENTE F L ÄCHE: links liegende Fläche
N ACHFOLGER: nachfolgende Halbkante der links liegenden Fläche
VORG ÄNGER: vorausgehende Halbkante der links liegenden Fläche
weitere Attribute.
gültig, wenn tatsächlich Aufteilung der Ebene
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Beispiel doppelt verkettete Kantenliste
→
−
v1
e 1,1
v
2
→
−
e 1,2
→
−
e 3→
,2
−
→
−
→
− e 4,1 e 4,2
e 3 ,1
→
−
v3
−
e 2 ,2 →
e 2 ,1
v4
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Beispiel doppelt verkettete Kantenliste
→
−
e 1,1
v1
v
2
→
−
e 1,2
→
−
e 3→
,2
−
→
−
→
− e 4,1 e 4,2
e 3 ,1
v3
−
e 2 ,2 →
e 2 ,1
v4
→
−
K NOTEN
KOORDINATEN
v1
v2
v3
v4
(0,4)
(2,4)
(2,2)
(1,1)
Nico Düvelmeyer
I NZIDENTE H ALBKANTE
→
−
e 1 ,1
→
−
e 4 ,2
→
−
e 2 ,1
→
−
e 2 ,2
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Beispiel doppelt verkettete Kantenliste
→
−
v1
e 1,1
v
2
→
−
e 1,2
→
−
e 3→
,2
−
→
−
→
− e 4,1 e 4,2
e 3 ,1
→
−
v3
−
e 2 ,2 →
e 2 ,1
v4
Nico Düvelmeyer
F L ÄCHE
AUSSENRAND
f1
f2
nil
→
−
e 4 ,1
I NNENR ÄNDER
→
−
e 1 ,1
nil
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Beispiel doppelt verkettete Kantenliste
H ALBKANTE
→
−
e 1,1
→
−
e 1,2
→
−
e 2,1
→
−
e 2,2
→
−
e 3,1
→
−
e 3,2
→
−
e 4,1
→
−
e 4,2
Nico Düvelmeyer
A NFANG
v1
v2
v3
v4
v3
v1
v3
v2
G EGEN ÜBER
→
−
e 1,2
→
−
e 1,1
→
−
e 2,2
→
−
e 2,1
→
−
e 3,2
→
−
e 3,1
→
−
e 4,2
→
−
e 4,1
I NZIDENTE F L ÄCHE
f1
f2
f1
f1
f1
f2
f2
f1
N ACHFOLGER
VORG ÄNGER
→
−
e 4 ,2
→
−
e 3 ,2
→
−
e 2 ,2
→
−
e 3 ,1
→
−
e 1 ,1
→
−
e 4 ,1
→
−
e 1 ,2
→
−
→
−
e 3 ,1
→
−
e 4 ,1
→
−
e 4 ,2
→
−
e 2 ,1
→
−
e 2 ,2
→
−
e 1 ,2
→
−
e 3 ,2
→
−
e 2 ,1
e 1 ,1
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Überblick
→
1
Gleitebenenverfahren für Schnittpunkte
2
Die doppelt verkettete Kantenliste
3
Berechnung der Überlagerung zweier Ebenenaufteilungen
Flächendaten
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Auftrag Kartenüberlagerung
Gegeben: Zwei doppelt verkettete Kantenlisten für Ebenenaufteilungen S1 ,
S2 .
Gesucht: Doppelt verkettete Kantenlisten für Überlagerung Ü(S1 , S2 ) von
S1 und S2 . Als Attribute der Flächen sollen Paare der ursprünglichen
Attribute gebildet werden.
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
neues Gleitebenenverfahren
neu: D, anfangs Vereinigung von Kopien der Ausgangsdaten.
merken uns Beziehung zwischen Halbkanten in D und Strecken in T
lokale Operationen, um die Kantenverknüpfung sicherzustellen
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Beispiel 3.9
Kante k von S1 geht durch Knoten v von S2 . k wurde bisher durch 2
Halbkanten dargestellt, daraus werden jetzt vier! Bisherige Enden von k
sind leicht korrigiert. Im Punkt v muss die exakte zyklische Position
bestimmt werden und dann entsprechend die Verknüpftung durchgeführt
werden.
Zeitaufwand für die Korrektur von k beim Ereignispunkt v : O (m(v )), wobei
m(v ) weiterhin die Anzahl von Originalkanten ist, die zu v inzident sind
(für die Suche der richtigen Positionen in der zyklischen Reihenfolge).
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Fazit: Halbkanten- und Knotenrekords
Knoten- und Halbkantendatensätze korrekt bis auf I NZIDENTE F L ÄCHE
Gesamtzeitaufwand dafür ist in O ((n + k ) log n).
n: Summe der Komplexitäten von S1 und S2
k: Komplexität vom Ergebnis
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Flächendaten
Untersuchung Zyklen von Halbkanten.
innere und äußere Ränder der Flächen
Zuordnung der Ränder einer Fläche
Hilfsgraph G, Knoten: Zyklen und ∞
Kanten in G: Rand links eines inneren Rands
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Satz 3.10
Jede Zusammenhangskomponente des Graphen G stimmt genau mit der
Menge von Zyklen überein, die mit einer Fläche inzidieren.
Beweis.
Skript
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Lokale Seiteninformationen
Nach dem Gleitebenendurchlauf kann in Zeit O (n + k ) die
Flächenverknüpfung der doppelt verketteten Kantenliste berechnet
werden.
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Lokale Seiteninformationen
Nach dem Gleitebenendurchlauf kann in Zeit O (n + k ) die
Flächenverknüpfung der doppelt verketteten Kantenliste berechnet
werden.
Speichern wir zusätzlich noch von allen Knoten die zugehörigen
Seiteninformationen während des Ebenendurchlaufs, können wir auch die
Attribute der neuen Flächen allein durch lokale Betrachtungen effizient
bestimmen. Dies erfordert eine Erweiterung der Informationen, die in T
gespeichert werden, und deren Aktualisierung an den Ereignispunkten.
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Algorithmus 3.11
Eingabe: Zwei doppelt verkettete Kantenlisten für Ebenenaufteilungen S1 ,
S2 .
Ausgabe: Doppelt verkettete Kantenlisten D für Überlagerung Ü(S1 , S2 ).
Als Attribute der Flächen sollen Paare der ursprünglichen Attribute
gebildet werden.
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Algorithmus 3.11
Funktion K ARTEN Ü BERLAGERUNG(S1 , S2 )
Kopiere die Datenstrukturen für S1 und S2 in eine neue
gemeinsame doppelt verkettete Kantenliste D.
3:
Berechne alle Schnittpunkte zwischen Kanten von S1 und S2 mit
dem Gleitebenenverfahren S UCHE S CHNITTPUNKTE in
Algorithmus 3.3. Zusätzlich zu den Änderungen an T und Q ist bei den
Ereignispunkten folgendes zu tun:
Aktualisiere D entsprechend den lokalen Änderungen (siehe
Beispiel 3.9) falls Kanten von sowol S1 und S2 beteiligt sind.
Speichere die Halbkante l (p) direkt links vom Ereignispunkt p
zusätzlich in der Repräsentation von p in der Datenstruktur D.
. Nun ist D bis auf Seiteninformationen korrekt
1:
2:
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Algorithmus 3.11
4:
5:
6:
7:
8:
Bestimme die Randzyklen von Ü(S1 , S2 ) beim Durchlaufen
(Tiefensuche) von D.
Baue den Graph G mit Knotenn entsprechend den Randzyklen und
Kanten, die jedes Loch mit dem linken Nachbarn verbinden. Verwende
dafür l (p). Bestimme die Zusammenhangskomponenten von G.
Für alle Zusammenhangskomponenten K von G mache
C ← der eindeutige äußere Randzyklus von K . Lege einen neue
Flächen-Datensatz für die zugehörige Fläche f an. Setze
AUSSENRAND(f ) auf eine Halbkante von C, und füge in
I NNENR ÄNDER(f ) für alle Löcher in K je eine Halbkante ein. Durchlaufe
alle diese Randzyklen und setze alle Referenzen I NZIDENTE F L ÄCHE auf
f.
Bestimme die Attribute aller neuen Flächen f durch lokale
Informationen an jeweils einer Ecken von f .
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Satz 3.12
Sei S1 eine Ebenenaufteilung der Komplexität n1 , S2 eine solcher der
Komplexität n2 , und n := n1 + n2 . Die Überlagerung von S1 und S2 kann in
Zeit O (n log n + k log n) berechnet werden, wobei k die Komplexität der
Überlagerung ist.
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Folgerung 3.13
Für zwei ebene Polygone P1 , P2 mit n1 bzw. n2 Ecken kann P1 ∪ P2 ,
P1 ∩ P2 und P1 \ P2 jeweils in Zeit O ((n + k ) log n) berechnet werden,
wobei n := n1 + n2 und k die Komplexität des Ergebnisses ist.
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Algorithmische Geometrie: Schnittpunkte von Strecken
Bemerkung 3.14
Eine untere Schranke für den Worst-Case-Zeitaufwand der allgemeinen
Schnittpunktbestimmung ist Ω(n log n + k ). Aber es gibt auch
O (n + k )-Algorithmen, die ausnutzen, dass zwei gegebene
Ebenenaufteilungen jeweils zusammenhängend sind.
Nico Düvelmeyer
WS 2009/2010, 3.11.2009
Herunterladen