490 likes | 656 Views
Seminar Computational Geometry Convex Hull. Christian Stein. Gliederung. 1. Definition 2. Motivation 3. Algorithmische Ansätze 4. Incremental-Algorithmus mit Konfliktgraph 5. Laufzeitanalyse. 1. Definition. Betrachtung : Punktemenge repräsentiert durch umgebendes Polygon
E N D
Seminar Computational GeometryConvex Hull Christian Stein
Gliederung • 1. Definition • 2. Motivation • 3. Algorithmische Ansätze • 4. Incremental-Algorithmus mit Konfliktgraph • 5. Laufzeitanalyse
1. Definition • Betrachtung : • Punktemenge repräsentiert durch umgebendes Polygon • Rand des Polygons undurchsichtig • Für alle Punkte p, q innerhalb des Polygons : • p ist von q aus sichtbar, wenn die minimale Verbindungsstrecke zwischen p und q ganz im Polygon enthalten ist.
1. Definition • Polygon ist : • sternförmig – wenn von einem Punkte p alle anderen sichtbar sind • Konvex – wenn von jedem Punkt p alle anderen sichtbar sind. • (a) konvex - (b) sternförmig
1. Definition • Übertragen auf Punktmenge : • Konvexes Polygon wird erzeugt durch konvexe Hülle einer Menge M • Konvexe Hülle von M ist die kleinste konvexe Menge die M umschließt • Leicht vorstellbar : • Punkte sind Nägel auf einer Ebene • -> Konvexe Hülle = Nägel umspannendes Gummiband
1. Definition • Problem Konvexe Hülle • Eingabe : endliche Menge M von Punkten in der Ebene • Ausgabe : diejenigen Punkte von M, die den Rand des konvexen Hüllpolygons von M definieren, in umlaufender Reihenfolge. (2D)
2. Motivation • Anwendung Konvexer Hüllen : • Kollisionserkennung • Kollision konvexer Hüllen schneller zu berechnen als Kollision der Objekte, die sie umschließen • Kollidieren die Hüllen nicht, kollidieren auch die Objekte nicht
2. Motivation • Anwendung konvexer Hüllen: • Objektapproximation • Innerhalb/Außerhalb-Lageentscheidung • näherungsweise Volumenberechnung • Allgemein: • bessere Objektapproximation möglich als beispielsweise durch „Bounding-Spheres“ oder „Bounding-Boxes“ • Berechnungen dagegen schwieriger
2. Motivation • Rendering : • Raytracer : Lichtstrahl-Objekt-Schnitt kann einfacher ausgeschlossen werden. • konvexe Hülle nicht sichtbar -> Objekt nicht sichtbar => Aufwändiges Rendern des komplexen Objektes entfällt
3. Algorithmische Ansätze • 2D : • Viele simple Ansätze • Gute Laufzeiten • 3D : • Weiterentwicklung der 2D-Lösungen • Laufzeiten schwer zu verbessern
3. Algorithmische Ansätze • 2D : • Slow-Convex-Hull • Graham-Scan-Algorithmus • Javis-March-Algorithmus • 3D : • Gift-wrapping • Divide-and-Conquer-Algorithmus • Incremental-Algorithmus (Punkt 4 und 5)
3. Algorithmische Ansätze • Slow-Convex-Hull • Algorithmus : 1. für alle geordneten Paare p, q aus M mit p != q 2. überprüfe ob alle Punkte r != p & != q rechts der Kante p nach q liegen 3. falls „wahr“ -> füge die Kante p-q zur Kantenmenge CH hinzu 4. Kantenmenge CH = Kanten der Konvexen Hülle – Punkte lassen sich in gewünschter Reihenfolge heraussortieren
3. Algorithmische Ansätz • Slow-Convex-Hull • Laufzeit : • n²-n Paare werden mit n-2 anderen Punkten verglichen • Laufzeit : O (n³)
3. Algorithmische Ansätze • Graham-Scan-Algorithmus • Algorithmus : 1. Suche Punkt q mit minimaler y-Koordinate (& x-Koordinate) 2. Bestimme Winkel von q zu allen weiteren Punkten entgegen Uhrzeigersinn und sortiere nach den Winkeln (Bei gleichen Winkeln nach Abstand absteigend) 3. Verbinde Punkte durch Polygonzug 4. Durchlaufe ausgehend von q den Polygonzug und überbrücke konkave Ecken
3. Algorithmische Ansätze • Graham-Scan-Algorithmus • Laufzeit : • es werden n Winkel betrachtet -> n Schritte • Sortieren (bestmöglich n log n) • Lauf über n Punkte -> n Schritte • Laufzeit: O(n log n)
3. Algorithmische Ansätze • Javis-March-Algorithmus • Algorithmus 1. Starte mit Punkt q = q0 =Punkt mit minimaler y-Koordinate (& x-Koordinate) – q0 in Punktliste 2. Solange p != q0 wiederhole: 3. Suche von q ausgehen den „am weitesten rechts“ liegenden Punkt p (alle anderen Punkte liegen links von q-p) 4. Füge p zur Punktliste hinzu 5. q = p Die Punktliste enthält die Punkte der Konvexen Hülle, sortiert in Richtung gegen den Urzeigersinn
3. Algorithmische Ansätze • Javis-March-Algorithmus • Laufzeit : • Suche des kleinsten y-Wertes = O(n) • Schleife wird h-mal durchlaufen (h = Anzahl der Ecken der konvexen Hülle ) • Bestimmung des „am weitesten rechts“ liegenden Punktes = O(n) • Laufzeit : O(n*h) somit im schlechtesten Fall ( n Ecken) O(n²)
3. Algorithmische Ansätze • 2D -> 3D : • Welche Lösungen lassen sich gut ins 3-dimensionale Übertragen ? • Beispiel : • Javis-March -> Giftwrapping
3. Algorithmische Ansätze Im weiteren : • Facette eines konvexen Polytops ist notwendigerweise ein konvexes Polygon • 2D : konvexes Polygon hat gleich viele Ecken p wie Kanten e • 3D : Satz von Euler : • n – n(e) + n(f) = 2 • n Anzahl der Punkte • n(e) Anzahl der Kanten • n(f) Anzahl der Facetten
3. Algorithmische Ansätze • Betrachtung von CH als planarer Graph • Jede Facette des entsprechenden Graphen hat 3 Kanten n(e) (Triangulierung der CH) • Jede Kante hat liegt an 2 Facetten n(f) • 2n(e) = 3 n(f) • Einsetzen in Eulerformel : • Beispiel: n+n(f)-2 = 3n(f)/2 => n(f) = 2n-4 => n(e) = 3n-6
3. Algorithmische Ansätze • Gift-Wrapping • Algorithmus : 1. Bestimme eine Grenzfläche E der Hülle 2. Solange bis entstehende Form geschlossen 3. Biege Fläche E aus der bisher entstandenen Form um eine ihrer Kanten bis ein Punkt erreicht wird. 4. Dieser Punkt bildet mit den Eckpunkten der Kante von E eine neue Grenzfläche
3. Algorithmische Ansätze • Gift-Wrapping • Laufzeit : • Für jede entstehende Fläche Test mit n Punkten • Für f entstehende Flächen • => O(f* n), im schlimmsten Fall wieder O(n²)
3. Algorithmische Ansätze • Divide-and-Conquer • Algorithmus : 1. Sortiere Punktemenge nach x-Wert 2. Teile Punktmenge rekursiv, bis Mengengröße <=4 3. Füge CH der einzelnen Mengen zusammen Zusammenfügen: 1. Suche minimale y-Werte aus beiden Mengen 2. Analog zu Gift-Wrapping : Biege Fläche mit z-Richtung um die Kante bis man auf einen Punkt trifft 3. Biege weiter um Kanten der neuen Facette bis CH geschlossen
3. Algorithmische Ansätze • Divide-and-Conquer • Laufzeit : • Sortieren O(n log n) • Zusammenfügen O(n) • O(n log n)
4. Incremental-Algorithmus • 1. Schrittweise Erklärung des Algorithmus • 2. Verbesserung durch einen Konfliktgraph • 3. Pseudocode
4.1 Algorithmus Im Folgenden repräsentiert CH(r) die Konvexe Hülle der 1. r Punkte Start: • Finde 3 Punkte in einer Ebene • Finde 4. Punkt der nicht in der Ebene liegt • Existiert kein 4. Punkt kann eine 2D-Algorithmus angewandt werden • Existiert ein 4. Punkt bilden die 4 Ausgangspunkte ein Tetrahedron
4.1 Algorithmus • Alle Punkte 5 – n werden zufällig gemischt • nun werden sie nacheinander eingefügt • Wenn wir Punkt r einfügen können 2 Fälle entstehen : • R liegt in CH(r-1) oder auf der Oberfläche => CH(r) = CH(r-1) • r liegt außerhalb von CH(r-1)
4.1 Algorithmus r liegt außerhalb von CH(r-1) : • Am Punkt r stehend schaut man nach CH(r-1) • Die Facetten von CH(r-1) teilen sich in : • Nichtsichtbare Facetten – diese bilden weiterhin einen Teil der konvexen Hülle • Sichtbare Facetten – diese gehören nicht mehr zur konvexen Hülle CH(r)
4.1 Algorithmus • Unterscheiden können wir diese Facetten aufgrund des sichtbaren „Horizonts“ von CH(r-1) • Der Horizont ist wie eine Projektion auf eine Ebene von CH(r-1) von p(r) aus zu sehen
4.1 Algorithmus • Die sichtbaren Facetten werden aus CH(r-1) entfernt • Neue Facetten werden eingefügt die p(r) mit den Kanten des Horizonts von CH(r-1) verbinden • Wir erhalten CH(r)
4.1 Algorithmus Problem : • Möglicherweise liegt p(r) auf einer Facette von CH(r-1) • die Facette ist nicht sichtbar • beim hinzufügen erstellen wir Koplanare Facetten • Diese müssen gefunden und zusammengeführt werden
4.2 Konfliktgraph Problem : • Wie finden wir die sichtbaren Facetten zu einem Punkt p(r) ? • Testen wir jede Facette mit jedem neuen Punkt finden wir alle sichtbaren in O(n) • über n-4 Einfügeschritte • Laufzeit: O(n²) Wie geht es besser ?
4.2 Konfliktgraph Der Trick besteht im Vorarbeiten : • für jede Facette f von CH(r) erstellen wir einen Menge P-Konflikt(f) mit allen Punkten die f sehen können • für jeden Punkt p >r erstellen wir die Menge F-Konflikt(p) mit allen Facetten die dieser Punkt sehen kann
4.2 Konfliktgraph Punkte und Facetten werden in einem bi-partiten Graph G gespeichert. Konflikt : benachbarte Facetten und Punkte können nicht gleichzeitig in einer konvexen Hülle existieren Wird ein Punkt hinzugefügt => werden die benachbarten Facetten gelöscht
4.2 Konfliktgraph • Der Graph G kann in linearer Zeit für CH(4) erstellt werden • wird Punkt r hinzugefügt • Finden der Konfliktfacetten in G • Entfernen der Facetten aus CH(r-1) • Löschen der entsprechenden Facetten aus G • Erstellen der neuen Facetten in CH(r) und einfügen dieser Facetten in G • Entscheidender Schritt ist nun das Auffinden der Konfliktpunkte für die neuen Facetten!
4.2 Konfliktgraph • Wie finden wir die Konfliktpunkte der neuen Facetten ? • Angenommen ein Punkt p(t) sieht die neue Facette f • p(t) sieht auch die Kante e von f , e aus dem Horizont CH(r-1) • p(t) sah entweder f1 oder f2 , die Facetten die in CH(r-1) die Kante e hatten => Wir finden alle Konfliktpunkte in den Konfliktlisten von f1 und f2
4.3 Pseudocode Eingabe : Eine Menge P von n Punkten Ausgabe : Die Konvexe Hülle CH(P) von P 1. Finde die 4 Punkte p1,p2,p3,p4 in P die ein Tetrahedron formen 2. Dieses bildet bereits die konvexe Hülle CH von p1,p2,p3,p4 3. Erstelle eine zufällige Permutation von p5 bis pn 4. Initialisiere den Konfliktgraphen G für alle „sichtbaren“ Paare (p(t),f) für alle Facetten f von CH(4) und p(t) aus P mit t>4 5. Für Laufvariable r von 5 bis n : :
4.3 Pseudocode : 5. Für Laufvariable r von 5 bis n 6. Füge p(r) in CH ein 7. Falls F-Konflikt(p(r)) nicht leer ist **p(r) liegt auß. CH** 8. Lösche alle Facetten aus F-Konflikt(p(r)) aus CH 9. Laufe den Rand der sichtbaren Region ab und erstelle eine Liste L der Horizontkanten 10. für alle e aus L 11. verbinde alle e durch ein Dreieck f als neue Facetten von CH(r) mit p(r) 12. Füge einen Knoten für für f in G ein :
4.3 Pseudocode : 5. Für Laufvariable r von 5 bis n : 12. Füge einen Knoten für f in G ein 13. f1 und f2 seien die an e gelegenen Facetten aus CH 14. Erstelle Liste P(e) aus Konfliktlisten von f1 und f2 15. für alle Punkte p aus P(e) 16. falls f sichtbar von p => füge Kante (p,f) in G hinzu 17. Lösche Knoten für p(r) und Facetten aus F-Konflikt(p(r)) aus G 18. Ergebnis : CH(r) Zurück zu 5. Nach n-4 Schritten erhalten wir CH(P)
5. Laufzeitanalyse • Alle Schritte vor der Hauptschleife • Ausführbar in linearer Zeit • O(n) • p(r) innerhalb von CH(r-1) • F-Konflikt(p(r)) ist leer • Konstante Zeit • p(r) liegt außerhalb von CH(r-1) ?
5. Laufzeitanalyse • Liegt der Punkt außerhalb von CH(r-1) • Anzahl der Operationen hängt ab von : • Menge der zu entfernenden Facetten • O(kard(F-Konflikt(p(r))) • kard(F-Konflikt(p(r)) = Kardinalität der Menge • Menge der einzufügenden Facetten • entspricht der Menge von Rand-Kanten des Horizonts von CH(r-1) von p(r) aus gesehen • Eine Kante kann nur gelöscht werden, wenn sie vorher erstellt wurde => Wie viele Kanten erstellt unser Algorithmus ?
5.Laufzeitanalyse • Satz : Die zu erwartende Anzahl von erstellten Facetten für die CH ist höchstens 6n-20 • Die Anzahl der Kanten ist höchstens 3r-6 (siehe 3.) • Grad(p(r)) = deg(p(r),CH(p(r))) Anzahl der Facetten die beim einfügen von p(r) erstellt werden = Facetten die an p(r) angrenzen • Die Summe über die Grade der Punkte nach Euler <= 6r-12 • Über r eingefügte Punkte ist der Grad eines Punktes <= 6-12/r • Vorsicht : Punkte 1-4 sind bereits eingefügt • Summe (Grad p1,…,p4) ist 12 • Somit ist der zu erwartende Durchschnittswert von deg(p(r),CH(p(r))) :
5. Laufzeitanalyse • 4 Startfacetten + zu erwartende Anzahl zu erstellender Facetten in r Schritten
5. Laufzeitanalyse • Facette nur löschbar wenn sie erstellt wurde & • Anzahl erstellter Facetten in O(n) • Was bleibt ? • Erstellen der Konfliktliste für neue Facetten f • Löschen der entfernten Facetten und des eingefügten Punktes aus dem Graphen => lineare Zeit in Anzahl der Knoten • Jeder Knoten kann nur einmal eingefügt und entfernt werden
5. Laufzeitanalyse • Was kostet uns das Finden der Konflikte ? • Zeilen 14-16 : • Erstellen von P(e) für jede Randkante des Horizonts • Finden der Konflikte für an e angefügte Facette • O(card(P(e)) • Wir benötigen somit : • Mithilfe eines Lemmas der Delaunay-Triangulation lässt sich zeigen :
5. Laufzeitanalyse Laufzeitanalyse ergibt: O(n log n) Anschauliche Konvexe Hülle im 3D: http://www.voronoi3d.com/testing/voronoi3d.html
Ausblick • Voronoi-Diagramme, Delauny-Triangulation, Konvexe Hülle • Weblink: http://www.pi6.fernuni-hagen.de/GeommLab/Voroglide
Quellen • Buchquellen : • Computational Geometrie de Berg, van Krefeld, Overmars, Schwarzkopf ISBN: 3-540-65620-0 • Internetquellen : • http://www2.in.tu-clausthal.de/~hormann/teaching/ProSemWS04/PS.AlGeo.07.12.2004.b.pdf Konvexe Hüllen TU Clausthal • http://www.ikg.uni-hannover.de/lehre/katalog/alg_geom/v5_Punkthuellen.pdf Punkthüllen Universität Hannover • http://www.inf.fh-flensburg.de/lang/algorithmen/geo/index.htm Konvexe Hülle Fachhochschule Flensburg
Ende • Vielen Dank für ihre Aufmerksamkeit