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