Zum Hauptinhalt springen

Kapitel 3 – Schnitt von Liniensegmenten

Folien: 📄 03-intersection.pdf · Praktikumsaufgabe 2 (iso-orientierte Segmente)

Gegeben sind nn Strecken in der Ebene, gesucht sind alle Schnittpunkte. Das klingt nach einem einfachen Doppel-for. An diesem Problem lernt man aber die wichtigste Technik der algorithmischen Geometrie: das Sweep-Line-Prinzip (auf den Folien Scan-Line).

Die Grundidee: Man schiebt eine senkrechte Gerade von links nach rechts über die Ebene. Sie hält nur an endlich vielen Ereignispunkten. Dort wird eine kleine, geordnete Datenstruktur aktualisiert. Statt jedes Paar zu testen, testet man nur Segmente, die auf der Sweep-Line benachbart sind.

Aufbau​

AbschnittInhaltLaufzeit
3.1–3.2 Motivation & naiver AnsatzGIS-Überlagerung, alle Paare testenΘ(n2)\Theta(n^2)
3.3 Sweep-Line-Prinziptote / aktive / inaktive Objekte, Ereignispunkte–
3.3.1 Iso-orientierte Segmentewaagrechte und senkrechte Segmente, Bereichssuche im BaumO(nlog⁡n+R)O(n\log n + R)
3.3.2 Beliebige SegmenteBentley–Ottmann: Schnittpunkte als EreignisseO((n+k)log⁡n)O((n+k)\log n)
Anhang: AVL-Bäume & Heapsdie Datenstrukturen hinter Status und EreignislisteO(log⁡n)O(\log n) pro Operation

nn = Anzahl der Segmente, RR bzw. kk = Anzahl der Schnitte (Ausgabegröße).

Merksatz

Sweep-Line = Ereignisstruktur (Wann muss ich anhalten? Sortiert nach xx) + Statusstruktur (Was schneidet die Sweep-Line gerade? Sortiert nach yy).