Übung zur Vorlesung Algorithmische Geometrie Dipl.-Math. Jens Fangerau Arbeitsgruppe Computergraphik und Visualisierung Interdisziplinäres Zentrum für Wissenschaftliches Rechnen 5. Juni 2012 J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 1 / 23 Überblick Besprechung der letzten Aufgaben Laufzeitanalyse für Triangulierung von Polygonen Neue Aufgaben J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 2 / 23 Vorlesung Die Vorlesung Fragen? J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 3 / 23 Aufgabenbesprechung Besprechung der Aufgaben J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 4 / 23 Aufgabenbesprechung Aufgabe zum Schnitt von Liniensegmenten Aufgabe 1 Sei S eine Menge von n disjunkten Liniensegmenten, deren obere Endpunkte bei y = 1 liegen und deren untere Endpunkte bei y = 0 liegen. Die Segmente teilen also die Menge (−∞, +∞) × [0, 1] in n + 1 Regionen auf. Skizzieren Sie einen Algorithmus, der in O(n log n) einen Binärbaum aufbaut, sodass die Region, in der sich ein gegebener Punkt p befindet, in O(log n) bestimmt werden kann. Funktioniert der Algorithmus auch für nicht disjunkte Liniensegmente? Begründen Sie Ihre Antwort. J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 5 / 23 Aufgabenbesprechung Aufgaben zur doppelt verknüpften Halbkantenliste Aufgabe 2.1 Welche der folgenden Gleichungen sind immer wahr? Twin(Twin(~e )) = ~e Next(Prev (~e )) = ~e Twin(Prev (Twin(~e ))) = Next(~e ) IncidentFace(~e ) = IncidentFace(Next(~e )) Aufgabe 2.2 Geben Sie ein Beispiel einer doppelt verknüpften Halbkantenliste, bei der für eine Kante ~e die Facetten IncidentFace(~e ) und IncidentFace(Twin(~e )) gleich sind. J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 6 / 23 Aufgabenbesprechung Aufgabe 2.3 Gegeben sei eine doppelt verknüpfte Halbkantenliste, in der für jede Halbkante ~e gilt: Twin(~e ) = Next(~e ) Wieviele Facetten kann diese Unterteilung höchstens haben? Aufgabe 2.4 Gegeben sei eine doppelt verknüpfte Halbkantenliste einer zusammenhängenden Unterteilung. Geben Sie einen Algorithmus in Pseudocode an, der alle Facetten auflistet, deren Knoten auf dem äußeren Rand liegen. J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 7 / 23 Laufzeitanalyse Triangulierung eines einfachen Polygons Laufzeitanalyse J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 8 / 23 Laufzeitanalyse Unterteilung eines Polygons in monotone Teilstücke J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 9 / 23 Laufzeitanalyse Bearbeitung von Startpunkten J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 10 / 23 Laufzeitanalyse Bearbeitung von Endpunkten J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 11 / 23 Laufzeitanalyse Bearbeitung von Trennpunkten J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 12 / 23 Laufzeitanalyse Bearbeitung von Schmelzpunkten J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 13 / 23 Laufzeitanalyse Bearbeitung von regulären Punkten J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 14 / 23 Laufzeitanalyse Laufzeitanalyse Unterteilung eines Polygons in monotone Teilstücke Konstruktion von Q braucht O(n). Initialisierung von T braucht konstante Zeit. Ereignisse während dem sweep beschränken sich auf: eine Operation auf Q, höchstens eine Abfrage, ein Einsetzen und eine Löschung auf T und höchstens zwei Einfügungen von Diagonalen in D. Prioritätenliste und balancierte Suchbäume brauchen O(log n). Einfügen einer Diagonale braucht O(1). ⇒ Insgesamte Laufzeit O(n log n). Jeder Knoten/Kante wird höchstens einmal gespeichert. ⇒ Insgesamter Speicherbedarf: O(n). J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 15 / 23 Laufzeitanalyse Triangulierung eines y-monotonen Polygons J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 16 / 23 Laufzeitanalyse Laufzeitanalyse Triangulierung eines y-monotonen Polygons Schritt 1 braucht O(n). Schritt 2 braucht konstante Zeit. for Schleife wird n − 3 mal aufgerufen. Gesamtanzahl an Einfügungen (pushs) auf dem Stack S ist beschränkt durch 2 · (n − 3) + 2 = 2n − 4. Es können nie mehr Elemente vom Stack entfernt (pop) werden als hinzugefügt werden. Schritt 11 braucht O(n). ⇒ Insgesamte Laufzeit: O(n). J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 17 / 23 Laufzeitanalyse Folgerungen Theorem 1 Ein y-monotones Polygon mit n Knoten kann in linearer Zeit trianguliert werden. (Dabei sind Punkte mit gleicher y-Koordinate von links nach rechts zu behandeln.) Theorem 2 Ein einfaches Polygon mit n Knoten kann in O(n log n) Zeit und O(n) Speicher trianguliert werden. J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 18 / 23 Laufzeitanalyse Nicht-einfache Polygone Polygone mit Löcher Funktioniert der Algorithmus auch mit nicht-einfachen Polygonen, d.h. Polygonen mit Löchern und Selbstüberschneidungen? J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 19 / 23 Laufzeitanalyse Folgerungen Polygone mit Löcher Die Antwort ist ja, denn wir verwenden im Algorithmus der Aufteilung in monotone Teilstücke niemals die Tatsache, dass ein Polygon einfach sein muss. Theorem 3 Eine planare Unterteilung mit n Knoten kann in O(n log n) Zeit und O(n) Speicher trianguliert werden. J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 20 / 23 Aufgaben Aufgaben Neue Hausaufgaben J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 21 / 23 Aufgaben Aufgabe zur Triangulierung von Polygonen Aufgabe 1.1 Teilen Sie das nicht-einfache Polygon (siehe Datei Polygon.pdf) in y-monotone Teilstücke auf. Beschreiben Sie hierfür in jedem Ereignispunkt beim Sweep Line Algorithmus, welcher Knotentyp behandelt wird und geben Sie die Helferknoten helper (ej ) der Kante ej an, die sich bei dem jeweiligen Ereignispunkt ändert. J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 22 / 23 Aufgaben Aufgabe 1.2 Ein geradliniges Polygon (rectilinear polygon) ist ein Polygon, bei dem alle Kanten entweder horizontal oder vertikal verlaufen. Sei P ein geradliniges einfaches Polygon mit n Knoten. Geben Sie ein Beispiel an, das aufzeigt, dass man im schlimmsten Fall b n4 c Kameras benötigt, um den gesamten Bereich des Polygons zu überwachen. Aufgabe 1.3 Geben Sie einen Algorithmus in Pseudocode an, um eine 3-Färbung eines gegebenen triangulierten einfachen Polygons P mit n Knoten zu berechnen. Der Algorithmus soll in linearer Zeit laufen. J. Fangerau (CoVis) Algorithmische Geometrie 5. Juni 2012 23 / 23