Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Foliendesign: Jörg Steinrücken & Tobias Kahn Vorlesung Segmentschnitt (n Segmente)
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Von 2 zu n Segmenten naheliegendes Vorgehen: überprüfe jedes Paar von Segmenten Wie viele Paare gibt es? –O(n 2 ) wende den zuvor skizzierten Algorithmus auf diese Paare an geht es auch schneller? optimal wäre O(n * log n) (so schnell wie Sortieren)
n² n log n
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Vorgehen was wissen wir, was können wir ausnutzen? –Vermeidung unnötiger Berechnungen, deren Ergebnis durch systematische Überlegung gewonnen werden kann was ist eine besonders einfache Variante dieses Problems –alle Segmente liegen auf einer Geraden ( x-Achse) –eindimensionale Problemstellung können wir die allgemeine (schwierige) Variante auf die spezielle (einfache) zurückführen?
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Reduktion von 2-dim auf 1-dim Überlappung der horizontalen Projektionen ist notwendig, aber nicht hinreichend für einen Schnitt
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Was haben wir davon? nur Segmente, deren horizontale Projektionen sich überlappen, können sich auch schneiden man kann die Prüfung auf diese Segmente einschränken Überprüfen aller Segmente durch sequentielles Vorgehen von links nach rechts („Scannen“) „Scan-Line“
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Idee: horizontale Scan-Line über die Ebene schieben –aktive Elemente: Schnitt mit der Scan-Line –nur aktive Elemente können horizontale Überschneidungen haben –überprüfe aktive Elemente auf Schnittfreiheit Problem: wo sind die Haltepunkte der Scan-Line –Anfangspunkt eines Segments –Endpunkt eines Segments –interessant sind also die x-Koordinaten der Anfangs- und Endpunkte 1. Schritt: sortiere alle Punkte nach aufsteigenden x-Koordinaten –anders ausgedrückt: sortiere die x-Koordinaten und statte jede x-Koordinate mit einem Verweis auf den zugehörigen Punkt aus
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Ist das wirklich schon der tolle Algorithmus, den wir suchen?
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Gegenbeispiel zu viele Elemente gleichzeitig aktiv O(n 2 )
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Und nun? Scannen allein reicht nicht zu viele Elemente gleichzeitig aktiv wir können uns an jedem Haltepunkt der Scan-Line maximal ein oder zwei (oder konstant viele) Tests erlauben also müssen wir sparen... und zusätzliches Wissen einspeisen „nur benachbarte Segmente können sich schneiden“
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Nachbarschaft - Umgebung A B
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Ausnutzung der Nachbarschaft wie definiert man „Nachbarschaft“ so, daß man sehr schnell erkennt, ob zwei Segmente benachbart sind? Nutzung der Scan-Line –Betrachte die Schnittpunkte der aktiven Segmente mit der Scan-Line –ordne die Segmente nach den y-Koordinaten ihrer Schnittpunkte mit der Scan-Line –nenne diese Ordnung „ x <‘‘
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Ordnungsrelation „ x <‘‘ x x‘ B A C A x < B A x < C C x‘ < A C x < B A x‘ < B C x‘ < B
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Ordnung der Segmente durch die Scan-Line – x< ist eine „partielle“ Ordnung... –... die nur auf der Menge der aktiven Elemente definiert ist –die Ordnung x< zwischen zwei Elementen wird an ihren Schnittpunkten umgedreht aus a x< b wird b x< a am Schnittpunkt s von a und b diese Ordnung ist natürlich eindimensional und für die aktiven Elemente vollständig sie ist abhängig vom Haltepunkt x der Scan-Line diese Ordnung ist also dynamisch und hängt von x als Parameter ab tun wir vorübergehend so, als hätten wir diese Ordnung „im Griff“
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line & dynamische Ordnung A B F C D E S1S1 S3S3 S2S2 S4S4
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line & dynamische Ordnung A B F C D E S1S1 S3S3 S2S2 S4S4 A
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line & dynamische Ordnung A B F C D E S1S1 S3S3 S2S2 S4S4 A E
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line & dynamische Ordnung A B F C D E S1S1 S3S3 S2S2 S4S4 B E A
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line & dynamische Ordnung A B F C D E S1S1 S3S3 S2S2 S4S4 B D A E
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line & dynamische Ordnung A B F C D E S1S1 S3S3 S2S2 S4S4 B C A D E
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line & dynamische Ordnung A B F C D E S1S1 S3S3 S2S2 S4S4 B D C E
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line & dynamische Ordnung A B F C D E S1S1 S3S3 S2S2 S4S4 B E C D
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line & dynamische Ordnung A B F C D E S1S1 S3S3 S2S2 S4S4 F C B E D
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line & dynamische Ordnung A B F C D E S1S1 S3S3 S2S2 S4S4 B C F E D
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line & dynamische Ordnung A B F C D E S1S1 S3S3 S2S2 S4S4 B C F E
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line & dynamische Ordnung A B F C D E S1S1 S3S3 S2S2 S4S4 C E F
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line & dynamische Ordnung A B F C D E S1S1 S3S3 S2S2 S4S4 C F E
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line & dynamische Ordnung A B F C D E S1S1 S3S3 S2S2 S4S4 C
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Scan-Line & dynamische Ordnung A B F C D E S1S1 S3S3 S2S2 S4S4
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Zusatzfrage: Wann wird der Schnittpunkt S 1 erkannt? A S1S1 Übung: Wird ein Schnittpunkt ggf. mehr als einmal erkannt? C D E B
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Vereinfachende Annahmen Annahme 2 Segmente schneiden sich höchstens in einem Punkt in keinem Punkt schneiden sich mehr als 2 Segmente die x-Koordinaten aller Segmente sind paarweise verschieden kein Segment ist vertikal Gegenbeispiele
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Algorithmus Scan-Line Input: S: eine Menge von Segmenten Output: die Schnittpunkte der Elemente von S Sei T = Endpunkte der Segmente von S nach x-Koordinaten sortiert (Haltepunkte) L = // aktive Segmente von S while T do bestimme und entferne den nächsten Punkt p T x ist x-Koordinate von p case: p ist linker Endpunkt von s fuege_ein(s,x,L) sl = vorgaenger(s,x,L) sr = nachfolger(s,x,L) schnitt(sl,s,T); schnitt(s,sr,T); p ist rechter Endpunkt von s sl = vorgaenger(s,x,L) sr = nachfolger(s,x,L) entferne(s,x,L) schnitt(sl,sr,T) p ist Schnittpunkt von s und t vertausche(s,t,L,x) // t < s sl = vorgaenger(t,x,L) sr = nachfolger(s,x,L) schnitt(sl,t,T) schnitt(s,sr,T)
Lutz Plümer - Diskrete Mathematik II - SS Vorlesung Algorithmus (II) fuege_ein(s,x,L): fügt das Segment s in die Menge L ein entsprechend der Ordnung an der Stelle x entferne(s,x,L): entfernt das Segment s aus die Menge L an der Stelle x nachfolger(s,x,L):liefert den Nachfolger von s in L an der Stelle x, falls vorhanden vorgaenger(s,x,L) liefert den Vorgänger von s in L an der Stelle x, falls vorhanden schnitt(s,t,T)prüft s und t auf Schnitt. Berechnet ggf. den Schnittpunkt p und fügt ihn als neuen Haltepunkt in T ein. offene Probleme: eine geeignete Datenstruktur für T eine geeignete Datenstruktur für L Prüfung auf Schnitt, Berechnung des Schnittpunkts