Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung 4 04.05.00 Tiefen- und Breitendurchlauf geometrische.

Ähnliche Präsentationen


Präsentation zum Thema: "Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung 4 04.05.00 Tiefen- und Breitendurchlauf geometrische."—  Präsentation transkript:

1 Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung 4 04.05.00 Tiefen- und Breitendurchlauf geometrische Algorithmen, Segmentschnitt

2 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.002 Übersicht Abschluss Graph-Algorithmen –Tiefendurchlauf Beispiel rekursiver Algorithmus –Breitendurchlauf Beginn Geo-Algorithmen –Prüfung auf Schnittfreiheit –Heute: Schnitt zweier Segmente –Nächste Woche: Schnitt von n Segmenten

3 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.003 Was ist neu In einem binären Baum hat jeder Knoten höchstens zwei Nachfolger, in einem Graphen beliebig viele Ein Baum ist immer zyklenfrei, ein Graph kann Zyklen enthalten (z.B. Do – Du – D – W im Beispiel) In einem Zyklus kann man unendlich viel Zeit verbringen Lösung: Faden der Ariadne (Quelle: Sagen des klassischen Altertums) Moderne Version: ein Boolescher Array „besucht“

4 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.004 Tiefendurchlauf Do Ha W Du K D

5 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.005 Tiefendurchlauf aktuell Do Ha W Du K D

6 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.006 Tiefendurchlauf Do Ha W Du K D besucht

7 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.007 Do Ha W Du K D Tiefendurchlauf

8 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.008 Tiefendurchlauf kein Nachfolger - backtracking Do Ha W Du K D

9 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.009 Tiefendurchlauf Do Ha W Du K D

10 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0010 Do Ha W Du K D Tiefendurchlauf Alle Nachfolger sind bereits besucht

11 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0011 Tiefendurchlauf Do Ha W Du K D

12 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0012 Tiefendurchlauf Do Ha W Du K D

13 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0013 Tiefendurchlauf Do Ha W Du K D

14 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0014 Tiefendurchlauf Do Ha W Du K D

15 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0015 Tiefendurchlauf Do Ha W Du K D

16 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0016 Tiefendurchlauf Do Ha W Du K D

17 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0017 Tiefendurchlauf als rekursiver Algorithmus tiefensuche(k) //Tíefendurchlauf vom Knoten k aus { if(besucht[k] == false) { drucke k; besucht[k] = true; for(jeder Nachfolger k i von k) { tiefensuche(k i ); } } }

18 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0018 class BST {... void Breitendurchlauf() { SohnListe ws = new SohnListe(); Knoten aktuell; ws.FügeAn(wurzel); while ((aktuell = ws.Entferne()) != null) { System.out.println(aktuell.GibWert()); ws.FügeAn(aktuell.GibLinks()); ws.FügeAn(aktuell.GibRechts()); }... } entferne Test auf Ende Breitendurchlauf (binärer Suchbaum)

19 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0019 class BST {... void Breitendurchlauf(k) { SohnListe ws = new SohnListe(); Knoten aktuell; ws.FügeAn(k); while ((aktuell = ws.Entferne()) != null) { System.out.println(aktuell.GibWert()); ws.FügeAn(aktuell.GibLinks()); ws.FügeAn(aktuell.GibRechts()); }... } Breitendurchlauf besucht[k] = true;

20 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0020 class BST {... void Breitendurchlauf(k) { SohnListe ws = new SohnListe(); Knoten aktuell; ws.FügeAn(k); besucht[k] = true; while ((aktuell = ws.Entferne()) != null) { System.out.println(aktuell.GibWert()); ws.FügeAn(aktuell.GibLinks()); ws.FügeAn(aktuell.GibRechts()); }... } Breitendurchlauf Verarbeiten eines Knotens

21 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0021 class BST {... void Breitendurchlauf(k) { SohnListe ws = new SohnListe(); Knoten aktuell; ws.FügeAn(k); besucht[k] = true; while ((aktuell = ws.Entferne()) != null) { System.out.println(aktuell.GibWert()); for(jeder Nachfolger k i von aktuell) { if(besucht[k i ] == false) { ws.FügeAn(k i ); besucht[k i ] = true; } } } }... } Breitendurchlauf

22 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0022 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‘

23 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0023 Schnittpunktberechnung Gegeben: Endpunkte der Segmente Geradengleichung für zwei Punkte:

24 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0024 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

25 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0025 Segmentschnitt I g1g1 g2g2 c) g2g2 g1g1 b) g1g1 g2g2 a)

26 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0026 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) w = w 1 = w 2 = 1 x y P1P1 P2P2 P s D > 0 D < 0 D = 0

27 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0027 X Y Z Was wird durch die Determinante berechnet? x y P2P2 P1P1 P Vektoren spannen Parallelepiped auf 1

28 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0028 Spatprodukt Das Spatprodukt ergibt einen Skalar, der zahlenmäßig gleich dem Volumen des von den drei Vektoren gebildeten Parallelepipeds ist; das Ergebnis ist positiv, falls, und ein Rechtssystem, negativ, falls sie ein Linkssystem bilden.

29 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0029 X Y Z 1 Rechts- oder Linkssystem? P2P2 P1P1 P Bilden ein Rechtssystem x y

30 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0030 X Y Z 1 Rechts- oder Linkssystem? P2P2 P1P1 P x y bilden ein Rechtssystem D > 0

31 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0031 X Y Z 1 Rechts- oder Linkssystem? P1P1 P2P2 P x y

32 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0032 X Y Z 1 Rechts- oder Linkssystem? P1P1 P2P2 P x y bilden ein Linkssystem D < 0

33 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0033 X Y Z 1 Rechts- oder Linkssystem? D = 0 Es wird kein Parallelepiped aufgespannt P1P1 P2P2 P x y

34 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0034 Einfacher Segmentschnitt I S 1 = det ( P 1,P 3,P 4 )Def.:Vor.: Alle Determinanten sind  0: S 2 = det ( P 2,P 3,P 4 ) g und g` schneiden sich genau dann, wenn S 1, S 2 S 3 = det ( P 3,P 1,P 2 )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

35 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 Lutz Plümer - Diskrete Mathematik II - SS 2000 - Vorlesung 4 - 04.05.0035


Herunterladen ppt "Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung 4 04.05.00 Tiefen- und Breitendurchlauf geometrische."

Ähnliche Präsentationen


Google-Anzeigen