Schnitte von Liniensegmenten - Algorithmische Geometrie

49
Algorithmische Geometrie Schnie von Liniensegmenten Dr. Stefan Jänicke Abteilung für Bild- und Signalverarbeitung

Transcript of Schnitte von Liniensegmenten - Algorithmische Geometrie

Algorithmische Geometrie

Schnitte von Liniensegmenten

Dr. Stefan Jänicke Abteilung für Bild- und Signalverarbeitung

GIS: Speichern verschiedenergeografischer Daten, z.B.Städte, Flüsse, Straßen,Niederschlag, Temperatur,Verbreitung von Spezies, ...

Geographical Information Systems (GIS)

Geographical Information Systems (GIS)

Geographical Information Systems (GIS)

Aufgabe:→ Ermittle alle Schnittpunkte von Liniensegmenten aus den Mengen S

1 und S

2

→ 2 Segmente schneiden sich auch, falls der Endpunkt des einen Segmentes auf dem anderen liegt

→ Verallgemeinerung: betrachte Schnitte in S = S1 S∪

2

(bei verschiedenen Mengen prüft man einfach, ob zwei Segmente aus der gleichen Menge stammen oder nicht)

Schnitte von Liniensegmenten

Schnitte von Liniensegmenten

Schnitte von Liniensegmenten

Schnitte von Liniensegmenten

Brute-Force Lösung:

– Schnittest zweier Segmente in konstanter Zeit→ Komplexität: O(n2) bei n Liniensegmenten

Input-sensitiver Algorithmus meist ineffizient in Praxis, da wesentlich weniger als n2 Schnitte vorhanden! Wieviel Schnitte erwarten wir?

→ Ziel: output-sensitiver Algorithmus (schnitt-sensitiv)

Schnitte von Liniensegmenten

Idee:– nur nahe gelegene Segmente können sich auch schneiden, z.B.:

→ Segmente können sich nur dann schneiden, wenn sich die jeweiligen y-Intervalle überlappen

→ ist das nicht der Fall, brauchen wir keinen Schnitttest durchführen

Schnitte von Liniensegmenten

Problemstellung in 1D:– Finde alle sich überlappenden Linienpaare!

Algorithmus:→ initialisiere leere Datenstruktur T→ sortieren Segmente nach aufsteigendem x-Wert der Endpunkte→ wenn linker Endpunkt von Segment s: mit jedem Segment in T gibt es eine Überlappung; füge s in T ein→ wenn rechter Endpunkt von Segment s: lösche s aus T

Output-sensitiver Algorithmus!

Schnitte von Liniensegmenten

Problemstellung in 2D (Beobachtung):Überlappung zweier Segmente nur dann möglich, wenn:→ sich die y-Intervalle überlappen→ Segmente in x-Richtung „irgendwann einmal“ benachbart sind

Lösung über Plane Sweep Algorithmus!

Schnitte von Liniensegmenten

Idee:→ horizontale Linie (Sweep Line) wandert über Ebene und löst das gegebene Problem von oben nach unten

● an bestimmten Positionen hält die Sweep Line und berechnet → Events

● an Eventpunkten wird der aktuelle Zustand der Sweep Line gespeichert → Status

● oberhalb der Sweep Line hat der Algorithmus alle notwendigen Informationen gesammelt

Plane Sweep Algorithmus

Schnitte von Liniensegmenten

Schnitte von Liniensegmenten

Status:– Liste der Liniensegmente aus S, die von der Sweep Line geschnitten werden– aufsteigend sortiert

Events:– Punkte, an denen sich der Status ändert bzw. Output generiert wird

● oberer Endpunkt eines Liniensegments● unterer Endpunkt eines Liniensegments● Schnittpunkt zweier Linien

Schnitte von Liniensegmenten

Schnitte von Liniensegmenten

füge s1 in Statusstruktur ein

Schnitte von Liniensegmenten

füge s2 nach s1 ein

Schnitte von Liniensegmenten

füge s3 nach s1 ein

Schnitte von Liniensegmenten

füge s4 vor s1 ein

Schnitte von Liniensegmenten

Schnittpunkt s1/s3tausche s1 mit s3

Schnitte von Liniensegmenten

entferne s2 aus Statusstruktur

Schnitte von Liniensegmenten

entferne s1

Schnitte von Liniensegmenten

füge s5 nach s3 ein

Schnitte von Liniensegmenten

Schnittpunkt s4/s3tausche s4 mit s3

Liste von Events:– speichert alle Events in der Reihenfolge ihres Auftretens→ nach absteigendem y-Wert

Statusstruktur:– speichert aktuellen Status der Sweep Line→ geschnittene Liniensegmente nach aufsteigendem x-Wert sortiert

Schnitte von Liniensegmenten

Schnitte von Liniensegmenten

Schnitte von Liniensegmenten

Schnitte von Liniensegmenten

Weitere Fälle:– Sweep Line erreicht unteren Endpunkt: lösche Segment von Statusstruktur– Sweep Line erreicht Schnittpunkt: tausche Segmente in Statusstruktur

Eventpunkte:– Start- und Endpunkte sind vor dem Verfahren bekannt– Schnittpunkte müssen ermittelt werden → Schnitte sind nur zwischen benachbarten Segmenten möglich → Test auf Schnitt wenn benachbart

Frage:Gibt es für zwei sich schneidende Segmente immer einen anderen Eventpunkt auf der Sweep-Line, der die Segmente benachbart und daher auf Schnitt prüft?

Schnitte von Liniensegmenten

Schnitte von Liniensegmenten

Zusammenfassung:– Sweep-line wird von oben nach unten bewegt.– sie hält an Ereignispunkten (Endpunkte der Liniensegmente, Schnittpunkte)– die Sweep-Status-Struktur speichert die von der Sweep-line geschnittenen Liniensegmente in geordneter Folge

Datenstrukturen:– Event queue Q : speichert alle Events nach absteigendem y-Wert– Sweep-Line Statusstruktur T : speichert alle von der Sweep Line berührten Segmente nach aufsteigendem x-Wert→ jeweils Implementierung als balancierter binärer Suchbaum mit O(log m) Schritte für m Elemente

An den Ereignispunkten:– ändert sich die Anordnung der Liniensegmente– muss der Sweep-Status-Struktur (geschnittene Liniensegmente) angepasst werden und auf Schnitte getestet werden

Schnitte von Liniensegmenten

HandleEventPoint: p ist oberer Endpunkt

Schnitte von Liniensegmenten

1) Suche mit p in T und füge s in T ein

2) wenn s linken Nachbar schneidet, füge den zugehörigen Schnittpunkt in Q ein

3) wenn s rechten Nachbar schneidet, füge den zugehörigen Schnittpunkt in Q ein

HandleEventPoint: p ist unterer Endpunkt

Schnitte von Liniensegmenten

1) Suche mit p in T und entferne s aus T

2) sleft

und sright

seien die Nachbarn von s vor dem Löschen von s→ wenn es einen Schnittpunkt unterhalb der Sweep Line gibt, wird dieser in Q eingefügt

HandleEventPoint: p ist Schnittpunkt

Schnitte von Liniensegmenten

1) Tausche s mit s' in T

2) wenn es einen Schnittpunkt zwischen s und dem neuen rechten Nachbar von s unterhalb der Sweep Line gibt, wird dieser in Q eingefügt

3) wenn es einen Schnittpunkt zwischen s' und dem neuen linken Nachbar von s' unterhalb der Sweep Line gibt, wird dieser in Q eingefügt

Schnitte von Liniensegmenten

Ist es möglich, dass sich neu erkannte Nachbarn bereits oberhalb der Sweep Line

geschnitten haben?

Ist es möglich, dass ein Schnittpunkt bereits in Q auftritt,

aber noch nicht behandelt wurde?

KomplexitätWieviel Zeit ist nötig für einen Eventpunkt?

Schnitte von Liniensegmenten

– Lokalisierung des Punktes: maximal eine Suche in T→ je nach Eventtyp eine Insertion, Deletion oder ein Swap

– es müssen maximal zwei Nachbarn gefunden werden

– maximal eine Deletion in Q

– maximal zwei Insertions in Q

→ sowohl T als auch Q sind balancierte Binärbäume→ jeder Schritt kostet maximal O(log n) Zeit

→ Bearbeiten eines Eventpunktes kostet O(log n) Zeit

KomplexitätWie viele Events gibt es bei n Liniensegmenten?

Schnitte von Liniensegmenten

– n obere Endpunkte– n untere Endpunkte– k Schnittpunkte→ O(n+k) Events→ Komplexität: O(n log n + k log n)

Hinweis: Bei sehr großem k ist die Brute-Force Lösung effektiver!

Degenerierte Fälle:

s9

Schnitte von Liniensegmenten

Degenerierte Fälle 1:

Events mit gleichen y-Werten→ bearbeite von links nach rechts

„oberer“ Endpunkt „unterer“ Endpunkt

Schnitte von Liniensegmenten

Degenerierte Fälle 2:

– kolineare Liniensegmente si=(p

1,p

2) und s

j=(q

1,q

2)

– Kolinearität wird festgestellt, wenn sich Liniensegmente benachbarn und auf Schnitt geprüft wird → im Fall einer Überlappung muss adaptiert werden

→ Lösung 1: verschmelze si=(p

1,p

2) und s

j=(q

1,q

2) zu (siehe Beispiel): s

ij=(p

1,q

2)

→ da si schon in T liegt, muss T nicht angepasst werden

→ si wird überschrieben mit s

ij

→ in Q wird unterer Endpunkt von si (p

2) durch unteren Endpunkt von s

i (q

2)

ersetzt

Schnitte von Liniensegmenten

si

si

sjs

j

p1

p2q

1

q2

Degenerierte Fälle 2:

– kolineare Liniensegmente si=(p

1,p

2) und s

j=(q

1,q

2)

– Kolinearität wird festgestellt, wenn sich Liniensegmente benachbarn und auf Schnitt geprüft wird → im Fall einer Überlappung muss adaptiert werden

→ Lösung 2: kolineare Liniensegmente werden nicht als Schnitt interpretiert→ es muss jediglich eine Ordnung der überlappenden Segmente geben→ Ordung nach oberem Endpunkt, bei Gleichheit nach unterem Endpunkt

Schnitte von Liniensegmenten

si

si

sjs

j

p1

p2q

1

q2

Degenerierte Fälle 3:

→ definiere 3 Mengen von Segmenten:– U(p) mit Segmenten, die p als oberen Endpunkt haben– L(p) mit Segmenten, die p als unteren Endpunkt haben– C(p) mit Segmenten, die sich in p schneiden

Schnitte von Liniensegmenten

Schnitte von Liniensegmenten

Schnitte von Liniensegmenten

Schnitte von Liniensegmenten

→ bisher haben wir die Anzahl an Schnitten k betrachtet

→ da Duplikate nicht mehrfach in Q eingefügt werden, kann man die Anzahl an Events genau quantifizieren mit 2n Endpunkten + I Schnittpunkte

Speicherbedarf: – T speichert jedes Segment höchstens ein Mal → O(n)– die Größe von Q beträgt maximal O(n+I)→ linear ist besser!

Abhilfe:– speichere nur die Schnittpunkte von benachbarten Kanten → linearer Speicher– erkannte Schnittpunkte werden entfernt, wenn die zugehörigen Segmente nicht mehr benachbart sind– es gibt irgend ein Event, welches dazu führt, dass die Segmente wieder benachbart sind und der zugehörige Event Point wieder in Q eingefügt wird

Theorem:Sei S eine Menge von n Liniensegmenten in der Ebene. Alle Schnittpunkte in Smit den betroffenen Segmenten können in O(n log n + I log n) Schritten undO(n) Speicherplätzen gefunden werden, wobei I die Anzahl der Schnittpunkte ist.

Schnitte von Liniensegmenten

Basis für die Berechnung der Überschneidung planarer Unterteilungen

Schnitte von Liniensegmenten

Appendix: Rotating Calipers

Breite einer Punktemenge: – entspricht der minimalen Breite eines Streifens, der alle Punkte der Punktemenge einschließt

Minimal Enclosing Rectangle: – Rechteck mit minimaler Fläche, welches alle Punkte einschließt

Toussaint, G. T. (2014). The Rotating Calipers: An efficient, multipurpose, computational Tool. The International Conference on Computing Technology and Information Management (ICCTIM2014) (pp. 215-225). The Society of Digital Information and Wireless Communication.