Organisatorisches Anmeldung Prüfung ist eröffnet • Anmeldung möglich bis 16.06.04 Kapitel 6: Geometrische Algorithmen Abgabe der Programmieraufagabe: • 21-23.6.04 • 20 Minuten Abgabegespräch • Näheres auf Webseite Programmierwettbewerb: • Einreichung der Lösungen bis 14.06.04 um 12:00 • Siegerehrung in Vorlesung am 14.06.04 Technische Universität Wien Technische Universität Wien 1 Institut für Computergraphik und Algorithmen Das Scan-Line Prinzip Geometrische Problem Eingabedaten sind Elemente im ddimensionalen Raum Beispiele: Landkarten, Chip-Layouts, Konstruktionspläne... Geometrische Algorithmen nutzen geometrische Eigenschaften der Elemente aus um Lösungen zu finden Hier betrachtete Themen: • Scan-Line Prinzip • Mehrdimensionale Bereichssuche Technische Universität Wien 3 Institut für Computergraphik und Algorithmen Eingabe: Menge von Elementen in 2D Idee: Wandle statisches 2D-Problem in dynamisches 1D-Problem um Vorgehensweise: Bewege vertikale Linie (Scan-Line) von links nach rechts über Objektmenge Scan-Line teilt Objekte in 3 Gruppen: 1. Tote Objekte: Liegen komplett links von L 2. Aktive Objekte: Werden von L geschnitten 3. Inaktive Objekte: Liegen komplett rechts von L Technische Universität Wien 4 Beispielproblem Gegeben: Menge S={s1,...,sn} von insgesamt n vertikalen und horizontalen Liniensegmenten in 2D Gesucht: Alle Paare sich schneidender Segmente Naive Lösung: Teste alle Paare von Segmenten auf Schnitt testen Laufzeit: Θ(n2) Optimal falls Θ(n2) Schnittpunkte, aber schlecht wenn weniger Schnittpunkte Institut für Computergraphik und Algorithmen Institut für Computergraphik und Algorithmen Beispiel 1: Schnitt Isoorientierte Liniensegmente Technische Universität Wien 2 Institut für Computergraphik und Algorithmen 5 Kreuzende Paare: 3 Wieviele Schnittpunkte kann es bei n Segmenten maximal geben? Hälfte der Segmente senkrecht, Hälfte waagerecht, alle möglichen Schnittpunkte: Technische Universität Wien 6 Institut für Computergraphik und Algorithmen 1 Vereinfachende Annahmen Beobachtungen Alle Anfangs- und Endpunkte der horizontalen Segmente und vertikale Segmente haben paarweise verschiedene x-Koordinaten Erspart viele Fallunterscheidungen im Algorithmus In unserem Beispiel treffen Annahmen zu. Technische Universität Wien 7 Institut für Computergraphik und Algorithmen Man muss Scan-Line nicht kontinuierlich über Ebene ziehen Es gibt nur 3 Arten von interessanten Stellen (X-Koordinaten): 1. Start von horizontalem Segment 2. Ende von horizontalem Segment 3. Vertikales Segment Triff Scan-Line auf vertikales Segment, so kann sich das nur mit aktiven horizontalen Segmenten kreuzene3 Technische Universität Wien 8 Institut für Computergraphik und Algorithmen Algorithmus: Beispiel L A D E Technische Universität Wien 9 Institut für Computergraphik und Algorithmen Technische Universität Wien 10 Institut für Computergraphik und Algorithmen Anforderungen an die Datenstruktur für L Realisierung durch balancierte Bäume Einfügen und Löschen in Zeit O(log n) Bereichsabfrage nach [l,h] Horizontale Elemente werden in L mit ihrer Y-Koordinate als Schlüssel gespeichert Folgende Operationen müssen effizient unterstützt werden: 1. Einfügen von neuen Elementen 2. Löschen von Elementen 3. Ausgeben aller enthaltenen Elementen deren Schlüssel in bestimmtem Bereich liegt Technische Universität Wien Institut für Computergraphik und Algorithmen 11 1. Finde das Element x mit kleinsten Schlüssel ≥ l 2. Gib x aus falls Schlüssel · h 3. Durchlaufe Baum in inorder Reihenfolge von x aus und gib alle erreichten Knoten aus solange Schlüssel · h Technische Universität Wien 12 Institut für Computergraphik und Algorithmen 2 Suchen von Knoten p mit kleinstem Schlüssel ≥ x Technische Universität Wien Beispiel: Suche Knoten mit Schlüsseln in [8,21] Technische Universität Wien 13 Institut für Computergraphik und Algorithmen 14 Institut für Computergraphik und Algorithmen Beispiel: Suche Knoten mit Schlüsseln in [8,21] Laufzeitanalyse Bereichssuche: • • • • Sei r Anzahl Elemente in [yu,yo] Suchen nach yu: O(log n) Durchlaufen Baum bis Knoten größer yo: O(r) Laufzeit insgesamt Bereichssuche: O(log n + r) Scanline gesamt: • Sortieren Haltepunkte: O(n log n) • Scan: Für jeden Haltepunkt pi O(log n + ri) wobei ri Anzahl Kreuzungen bei pi • Also insgesamt O(n log n + R) (R Gesamtzahl Kreuzungen) Technische Universität Wien Technische Universität Wien 15 Institut für Computergraphik und Algorithmen Schnitt von allgemeinen Liniensegmenten Bemerkungen Wenn R langsamer als quadratisch wächst ist Scanline Verfahren dem naiven Verfahren überlegen Man kann zeigen: Es gibt Probleminstanzen, für die O(n log n + R) Schritte nötig sind, um alle Kreuzungen auszugeben ⇒ Scanline Verfahren ist Worst Case optimal Technische Universität Wien Institut für Computergraphik und Algorithmen 16 Institut für Computergraphik und Algorithmen 17 Gegeben: Menge von n Liniensegmenten s1,...,sn in der Ebene Gesucht: Menge aller echten Schnittpunkte (Schnittpunkte, die nicht gleichzeitig Endpunkte sind) Annahme: Allgemeine Lage 1. 2. 3. 4. Kein Segment senkrecht Schnitt zweier Segmente leer oder genau ein Punkt In einem Punkt schneiden sich nie mehr als 2 Segmente Alle Endpunkte und Kreuzungen haben paarweise verschiedene x-Koordinaten Technische Universität Wien 18 Institut für Computergraphik und Algorithmen 3 Beispiel Vorgehensweise Prinzip wie bei senkrechten und horizontalen Segmenten Scanline von links nach rechts Beobachtung 1: • Seien si und sj Segmente die sich bei Pi,j=(x,y) kreuzen. Dann sind si und sj auf Scanline benachbart wenn sich Scanline auf Position x-ε befindet (für kleines ε). Technische Universität Wien 19 Institut für Computergraphik und Algorithmen Technische Universität Wien 20 Institut für Computergraphik und Algorithmen Beispiel Vorgehensweise si Beobachtung 2: • An einem Schnittpunkt vertauscht sich Reihenfolge der betroffenen Segmente auf Scanline sj x x-ε Technische Universität Wien 21 Institut für Computergraphik und Algorithmen Technische Universität Wien 22 Institut für Computergraphik und Algorithmen Beispiel Folgerung: si sj Technische Universität Wien Institut für Computergraphik und Algorithmen Müssen Scanline-Datenstruktur aktualisieren wenn Kreuzung erreicht damit Reihenfolge der Segmente auf Scanline korrekt bleibt Auch Kreuzungen müssen Haltepunkte der Scanline sein Kreuzungen sind Haltepunkte, die erst während Durchführung des Scans in Haltepunkt-Datenstruktur eingefügt werden sj si 23 Technische Universität Wien 24 Institut für Computergraphik und Algorithmen 4 Drei Arten von Ereignissen 1. 2. 3. Segmentanfang (am Anfang bekannt) Segmentende (am Anfang bekannt) Kreuzung (erst während Scan berechnet) Datenstruktur Ereignis enthält: • X-Koordinate • ID der betroffenen Elemente (eine bei Anfang oder Ende, zwei bei Kreuzung) Technische Universität Wien 25 Institut für Computergraphik und Algorithmen 1. Nächstes_Ereignis(): Liefert nächstes Ereignis rechts vom aktuellen Ereignis 2. Füge_Ein(Ereignis E): Fügt ein Kreuzungs-Ereignis in ES ein Implementierung: • Heap oder balancierter Baum • Laufzeit jeder Operation O(log |ES|) Technische Universität Wien 26 Institut für Computergraphik und Algorithmen Scanline-Status-Struktur SSS Operationen EreignisDatenstruktur ES Implementierung SSS Speichert Segmente geordnet nach yKoordinate des Schnittpunkts mit Scanline Operationen: Blattorientierter balancierter binärer Suchbaum mit zusätzlicher Verkettung der Vorgänger und Nachfolger 1. FügeEin(Segment s): Bei Anfang Segment 2. Entferne(Segment s): Bei Ende Segment 3. Vorg(Segment s): Segment oberhalb von s auf Scanline 4. Nachf(Segment s): Segment unterhalb von s auf Scanline 5. Vertausche(Segment s_1, Segment s_2): Vertauscht Positionen von Segmenten auf Scanline Technische Universität Wien 27 Institut für Computergraphik und Algorithmen Technische Universität Wien 28 Institut für Computergraphik und Algorithmen Funktion TesteSchnittErzeugeEreignis(s1,s2) Teil 1 Algorithmus Nimmt zwei benachbarte Segmente s1 und s2 auf Scanline Testet ob Schnitt existiert Falls ja, erzeugt neues Ereignis mit xKoordinate des Schnittpunkts und ID der Segmente Ansonsten wird leeres Ereignis zurückgeliefert Technische Universität Wien Institut für Computergraphik und Algorithmen 29 Technische Universität Wien 30 Institut für Computergraphik und Algorithmen 5 Teil 2 Algorithmus Teil 3 Algorithmus Technische Universität Wien 31 Institut für Computergraphik und Algorithmen Technische Universität Wien 32 Institut für Computergraphik und Algorithmen Beispiel Laufzeit Sortieren 2n Endpunkte nach x-Koordinate: O(n log n) Gesamtzahl Ereignisse: 2n+k (k Kreuzungen) Nie mehr als O(n2) Ereignisse gleichzeitig in ES (weil maximal O(n2) Kreuzungen) Also jede Operation auf ES Laufzeit O(log n) In SSS nie mehr als n Elemente Jeder Zugriff auf SSS in Zeit O(log n) s1 s5 s2 s3 s4 Technische Universität Wien 33 Institut für Computergraphik und Algorithmen Technische Universität Wien 34 Institut für Computergraphik und Algorithmen Laufzeit Schleife wird maximal O(2n+k) mal durchlaufen In jedem Durchlauf maximal 5 Operationen auf ES und SSS Gesamtlaufzeit: O((n+k) log n) Speicherplatzbedarf: O(n2) weil maximal quadratisch viele Kreuzungen in ES Technische Universität Wien 35 Institut für Computergraphik und Algorithmen 6