Präsentation herunterladen
Die Präsentation wird geladen. Bitte warten
Veröffentlicht von:Kirsten Kopp Geändert vor über 10 Jahren
1
Geoinformation II 6. Sem. Vorlesung 1 13. April 2000 Geometrische Algorithmen - ein einführendes, größeres Beispiel für ein Semester-begleitendes Programmier - Projekt
2
2 Übersicht über das Semester was ist „GIS 2“? –Funktionen von GIS Algorithmen in GIS effiziente Berechnung –Speicherung räumlicher Objekte in GIS effiziente Suche GIS 1 = Modelle für GIS Welt Modell GIS 2 = Modell Rechner 2 große Algorithmen –Overlay von Netzen und Flächen (Segmentschnitt) –räumliche Nachbarschaft Voronoi-Diagramm, Delaunay- Triangulation
3
3 Organisation 1 V 1 Ü 2 Optionen für „1Ü“ –Semesterprojekt: Java-Implementierung des Overlay- Algorithmus in Gruppenarbeit –Durcharbeiten der in der Vorlesung vorgestellten Algorithmen an Beispielen erfolgreiche Teilnahme –aktive Mitarbeit an Programmierprojekt –Test Teilnahmevoraussetzung für Klausur (Förstner)
4
4 Overlay von Netzen: –Fluß und Straßennetz: Brücken –Straßen und Eisenbahnnetz: Brücken, Tunnel –Problem: Schnitt von n geraden Linien-Segmenten von Landkarten (polygonalen Strukturen) –PLZ und Verkaufsbezirke –Gemeinden und Geologie –Problem: Segmentschnitt + Polygonkonstruktion –heute nur: Schnitt von n Segmenten
5
5 n-Segment-Schnitt einfaches Vorgehen: –paarweiser Vergleich: s S: s‘ S - {s} überprüfe s und s‘ auf Schnittfreiheit und bestimme ggf. den Schnitt von s und s‘ Laufzeit: O(n 2 ) für die Praxis viel zu langsam Ziel: O(n * log n) harter und langer Kampf! erste Idee: betrachte horizontale Projektionen
6
6 Zur Erinnerung („Diskrete Mathematik“) Groß-Oh-Notation Definition: wobei
7
7 Groß-Oh-Notation Beispiele: O(log n) O(n log n) O(n 3 ) O(n) ... O(exp n) O(1) O(n 2 ) Inklusion:
8
8 Wachstum n² n log n
9
9 Hinreichende Bedingung für Schnittfreiheit notwendig für Schnitt: Überlappung der horizontalen Projektionen Reduktion einer 2-dimensionalen auf eine 1-dimensionale Fragestellung
10
10 Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
11
11 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 –geordnete Menge der x-Koordinaten
12
12 Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
13
13 Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
14
14 Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
15
15 Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
16
16 Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
17
17 Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
18
18 Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
19
19 Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
20
20 Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
21
21 Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
22
22 Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
23
23 Scan-Line-Verfahren A B F C D E S1S1 S3S3 S2S2 S4S4
24
24 Gegenbeispiel zu viele Elemente gleichzeitig aktiv O(n 2 )
25
25 Nachbarschaft - Umgebung A B
26
26 Verfeinerung des Algorithmus nur benachbarte Segmente betrachten wie erkennt man sehr schnell, ob zwei Segmente benachbart sind? Nutzung der Scan-Line –Betrachte die Schnittpunkte der aktiven Segmente mit der Scan-Line –Nachbarschaft ergibt sich aus der Lage der Schnittpunkte
27
27 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
28
28 Ordnung der Segmente durch die Scan-Line – x< ist eine dynamische (!) 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 am Schnittpunkt s von a und b b x< a –liefert eine vollständige eindimensionale Ordnung der aktiven Segmente... –... für jeden Haltepunkt der Scan-Line !
29
29 Verwaltung der aktiven Elemente A B F C D E S1S1 S3S3 S2S2 S4S4
30
30 Verwaltung der aktiven Elemente A B F C D E S1S1 S3S3 S2S2 S4S4 A
31
31 Verwaltung der aktiven Elemente A B F C D E S1S1 S3S3 S2S2 S4S4 A E
32
32 Verwaltung der aktiven Elemente A B F C D E S1S1 S3S3 S2S2 S4S4 B E A
33
33 Verwaltung der aktiven Elemente A B F C D E S1S1 S3S3 S2S2 S4S4 B D A E
34
34 Verwaltung der aktiven Elemente A B F C D E S1S1 S3S3 S2S2 S4S4 B C A D E
35
35 Verwaltung der aktiven Elemente A B F C D E S1S1 S3S3 S2S2 S4S4 B D C E
36
36 Verwaltung der aktiven Elemente A B F C D E S1S1 S3S3 S2S2 S4S4 B E C D
37
37 Verwaltung der aktiven Elemente A B F C D E S1S1 S3S3 S2S2 S4S4 F C B E D
38
38 Verwaltung der aktiven Elemente A B F C D E S1S1 S3S3 S2S2 S4S4 B C F E D
39
39 Verwaltung der aktiven Elemente A B F C D E S1S1 S3S3 S2S2 S4S4 B C F E
40
40 Verwaltung der aktiven Elemente A B F C D E S1S1 S3S3 S2S2 S4S4 C E F
41
41 Verwaltung der aktiven Elemente A B F C D E S1S1 S3S3 S2S2 S4S4 C F E
42
42 Verwaltung der aktiven Elemente A B F C D E S1S1 S3S3 S2S2 S4S4 C
43
43 Verwaltung der aktiven Elemente A B F C D E S1S1 S3S3 S2S2 S4S4
44
44 Wann wird der Schnittpunkt S 1 erkannt? A S1S1 Übung: Wird ein Schnittpunkt stets genau einmal erkannt? C D E B
45
45 Vereinfachende Annahmen Annahme 2 Segmente schneiden sich höchstens in einem Punkt in keinem Punkt schneiden sich mehr als 3 Segmente die x-Koordinaten aller Segmente sind paarweise verschieden kein Segment ist vertikal Gegenbeispiel
46
46 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)
47
47 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
48
48 Prüfung auf Schnittfreiheit 1. Idee –Berechnung der Geradengleichungen g und g‘ der Segmente s und s‘ –Schnittpunkt p von g und g‘ –prüfe ob p in s und s‘ Problem –vertikale Segmente –Vermeidung unangenehmer Sonderfälle
49
49 Segmentschnitt I g1g1 g2g2 c) g2g2 g1g1 b) g1g1 g2g2 a)
50
50 Segmentschnitt II Reduktion auf das Problem P 1, P 2 liegen auf der gleichen / verschiedenen Seiten der durch g induzierten Geraden Homogene Koordinaten: P 1 =(x 1,y 1,w 1 ) P 2 =(x 2,y 2,w 2 ) P=(x,y,w) D > 0 D < 0 D = 0 P P2P2 P1P1 s
51
51 Einfacher Segmentschnitt I S 1 = det ( P 1,P 3,P 4 )Def.:Vor.: Alle Determinanten sind 0: S 2 = det ( P 3,P 1,P 2 )g und g` schneiden sich genau dann, wenn S 1, S 2 S 3 = det ( P 2,P 3,P 4 )sowie S 3, S 4 jeweils verschiedene Vorzeichen S 4 = det ( P 4,P 1,P 2 )haben. P2P2 P1P1 P3P3 P4P4 P2P2 P3P3 P4P4 P1P1 g g` P2P2 P1P1 P3P3 P4P4
52
52 Einfacher Segmentschnitt II Wenn alle Determinanten gleich Null sind, dann folgt daraus, daß alle vier Punkte kollinear sind. - eine Determinante ist Null: => Algorithmus: Einsparen von Multiplikationen
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.