Folie 1 von 32 Geometrische Algorithmen Voronoi-Diagramme
Folie 2 von 32 Voronoi-Diagramme Übersicht Problemstellung Animation zur Konstruktion eines Voronoi-Diagramms Definition, Eigenschaften eines Voronoi-Diagramms Konstruktion des Voronoi-Diagramms Divide and Conquer Aufwand Konstruktion des Trennenden Kantenzugs Eigenschaften Animation Datenstruktur Worst Case Pseudocode: "Divide and Conquer", "Merge", "Tangente"
Folie 3 von 32 Problemstellung Welche Blume schnappt den Falter? 1x
Folie 4 von 32 Problemstellung Anwendungen Kollisionsproblem: Welche 2 Punkte haben den kleinsten Abstand (Roboter, Flugzeuge,...) Standortsuche: Wo wird die neue Filiale platziert... Filialenschließungsproblem: welches Paar von Filialen macht sich gegenseitig die größte Konkurrenz... Postamts-Problem: wo liegt das nächste Postamt (Krankenhaus,...) Einzugs- und Einflussgebiete von Versorgungsstationen (und ihre Größe) Bewertung von Standorten Modellierung von Nähe Delaunay-Triangulation Konvexe Hülle
Folie 5 von 32 Lösung Konstruktion eines Voronoi-Diagramms Interaktive Animation zum Voronoi-Diagramm Quelle: FernUniversität Hagen http://wwwpi6.fernuni-hagen.de/geometrie-labor/voroglide/
Folie 6 von 32 Lösung Definition des Voronoi-Diagramms Gegeben ist eine Menge M von n Punkten in der Ebene. Das Voronoi-Diagramm der Punktmenge zerlegt die Ebene in n disjunkte Gebiete (Voronoi-Regionen). Die Voronoi-Region eines Punktes p enthält genau einen der Punkte aus M sowie alle Punkte q, die näher an p als an jedem anderen Punkt p liegen ("Gebiete gleicher nächster Nachbarn").
Folie 7 von 32 Lösung Bezeichnungen im Voronoi-Diagramm 3x
Folie 8 von 32 Lösung Konvexe Menge, Konvexe Hülle Konvexe Menge Eine Menge P von Punkten ist konvex, wenn zu jedem Punktepaar p und q auch die verbindende Strecke pq ganz in P enthalten ist. Konvexe Hülle Die konvexe Hülle CH(P) einer Punktemenge P ist die kleinste konvexe Menge, die alle Punkte aus P enthält.
Folie 9 von 32 Lösung Eigenschaften von Voronoi-Diagrammen Vereinfachende Annahme: Aus der gegebenen Punktmenge M liegen keine 4 Elemente auf einem gemeinsamen Kreis. In jedem Voronoi-Knoten treffen sich genau drei Kanten. Das Voronoi-Diagramm von n Punkten hat höchstens 2n 5 Knoten und 3n 6 Kanten (linear!). Die Knoten mit unbeschränkten Regionen bilden die konvexe Hülle. Der Duale Graph, bei dem benachbarte Punkte miteinander verbunden werden, bildet eine >>Delaunay-Triangulation.
Folie 10 von 32 Exkurs Delaunay-Triangulation Für Punktmengen gibt es verschiedene Triangulationen, die alle dieselbe Anzahl von Dreiecken enthalten. Die Delaunay-Triangulation ist die Triangulation, bei der in jedem Dreieck der kleinste Winkel maximal wird. Falls z.b. kleine Winkel unerwünscht sind (Numerik!), ist die Delaunay- Triangulation optimal. Anwendungsbeispiel: Ausgangssituation für die Interpolation von Isolinien
Folie 11 von 32 Vorgehen Konstruktion des Voronoi-Diagramms
Folie 12 von 32 Konstruktion Divide and Conquer 5x
Folie 13 von 32 Konstruktion Betrachtung der Teilschritte Input Sortiere aufsteigend nach x-koordinate Split Bestimme den Median Zerlege in annähernd gleich große Teilmengen links und rechts des Medians Merge Konstruktion des trennenden Kantenzuges Abschneiden überflüssiger Kanten Bildung der Voronoi-Regionen (wie bei Overlay-Algorithmus) Einfachster Fall von Merge: Die Teilmengen enthalten je einen Punkt. Der trennende Kantenzug ist die Mittelsenkrechte dieser Punkte
Folie 14 von 32 Konstruktion Aufwand Der Zyklus ist log n - mal zu durchlaufen Die gewünschte Laufzeit O(n * log n) wird erreicht, wenn Split and Merge nicht mehr als O(n) Schritte benötigen. Was ist das schwierigste Teilproblem?
Folie 15 von 32 Konstruktion Schwierigstes Teilproblem Einfach: Input Sortiere aufsteigend nach x-koordinate Einfach: Split Bestimme den Median Zerlege in annähernd gleich große Teilmengen links und rechts des Medians Schwierig: Merge Konstruktion des trennenden Kantenzuges Abschneiden überflüssiger Kanten Bildung der Voronoi-Regionen (wie bei Overlay-Algorithmus) Einfachster Fall von Merge: Die Teilmengen enthalten je einen Punkt. Der trennende Kantenzug ist die Mittelsenkrechte dieser Punkte
Folie 16 von 32 Vorgehen Konstruktion des trennenden Kantezugs
Folie 17 von 32 Trennender Kantenzug Eigenschaften monoton in Nord-Süd-Richtung jede Kante ist Grenze zwischen einer blauen und einer gelben Region (Mittelsenkrechte) die nördlichsten und südlichsten Teilstücke sind unbeschränkt, also Halbgeraden die zugehörigen Punkte bilden dort unbeschränkte Voronoi-Regionen die Punkte liegen also jeweils auf der blauen bzw. gelben konvexen Hülle Problem: Wie werden diese Punkte gefunden?
Folie 18 von 32 Trennender Kantenzug Gemeinsame Tangente die gesuchten Punkte werden über die gemeinsame Tangente an die konvexen Hüllen CH(P1) und CH(P2) identifiziert (Bestimmung der Tangente folgt später) konvexe Hülle der gesamten Punktmenge ergibt sich aus den Teilstrukturen durch Einfügen zweier zusätzlicher Kanten konvexe Hülle ist Abfallprodukt der Erzeugung des Voronoi-Diagramms synchrone Herleitung beider Strukturen
Folie 19 von 32 Trennender Kantezug Animation 75x
Folie 20 von 32 Voronoi-Diagramm Datenstruktur Doppelt verkettete Kantenliste (wie bei Polygon-Overlay) Vorteile: Direkter Zugriff auf die benachbarten Maschen Durchlaufen des Kantenumrings in linearer Zeit
Folie 21 von 32 Trennender Kantenzug Aufwand Wie lange dauert die Konstruktion des trennenden Kantenzuges? - Ziel war O(n) Aufwand ist abhängig von: Zahl der Teilkanten / Knoten des Kantenzuges Zahl Berechnungen von Schnittpunkten mit den benachbarten Voronoi-Regionen
Folie 22 von 32 Trennender Kantenzug Länge im Worst Case Länge des Kantenzuges: O(n)
Folie 23 von 32 Trennender Kantenzug Worst Case des Umrings Größenordnung des Umrings: O(n)
Folie 24 von 32 Trennender Kantenzug Worste Case gesamt O(n) * O(n) = O(n²)? War jetzt alles umsonst? Nutzung der Eigenschaften: 1. Voronoi-Regionen sind konvex 2. Der trennende Kantenzug ist monoton. Lösung: Keine Kante öfter als zweimal anfassen.
Folie 25 von 32 Trennender Kantenzug Vermeidung des Worst Case Ziel: Keine Kante mehr als zwei mal "anfassen" Es gibt insgesamt höchstens 3* n 6 Kanten: O(n) Konvexität der Voronoi-Regionen: höchstens zwei Schnittpunkte mit der aktiven Halbgeraden Es genügt, die linken Kantenumringe im Uhrzeigersinn und die rechten Kantenumringe gegen den Uhrzeigersinn zu durchlaufen und den zuletzt gefundenen und verworfenen Schnittpunkt als Haltepunkt zu merken!
Folie 26 von 32 Merge Zusammenfassung der Schritte Die Voronoi-Diagramme VD(P1) und VD(P2) sind bereits berechnet. Die konvexen Hüllen CH(P1) und CH(P2) seien ebenfalls an dieser Stelle bekannt. 1. Bestimme die obere und untere Tangente von CH(P1) U CH(P2) 2. Konstruiere CH(P1 U P2) 3. Bilde die Mittelsenkrechten zu den beiden neu eingeführten Kanten 4. Konstruiere den trennenden Kantenzug als Verbindung der beiden Mittelsenkrechten 5. Entferne die überstehenden Kanten 6. Bilde die neu entstandenen Voronoi-Regionen (Maschen)
Folie 27 von 32 Merge Bestimmen der oberen Tangente 10x
Folie 28 von 32 Pseudocode Divide and Conquer Input: Liste P mit mindestens 1 Punkt Output: Voronoi-Diagramm der Punktmenge P VoronoiDiagramm BaueVoro(Punktliste P) if Anzahl der Punkte in P größer als 1 Divide: Zerlege P in zwei etwa gleich große Teillisten P1 und P2; //Berechne rekursiv Voronoi-Diagramme von P1 und P2 VoronoiDiagramm VD1 = BaueVoro(P1); VoronoiDiagramm VD2 = BaueVoro(P2); Ergebnis = Merge(VD1, VD2); return Ergebnis; else return (Voronoi-Diagramm des Punktes in P, ganze Ebene);
Folie 29 von 32 Pseudocode Merge I Input: Zwei Voronoi-Diagramme VD1 und VD2 für zwei Punktmengen P1 und P2; die x- Koordinaten der Punkte in VD1 sind kleiner als die in VD2. Output: Das Voronoi-Diagramm von P1 U P2.
Folie 30 von 32 Pseudocode Merge II VoronoiDiagramm Merge(VD1, VD2) Konstruiere die konvexen Hüllen von VD1 und VD2; (p,q) = findeoberetangente(ch(p1),ch(p2)); (r,s) = findeunteretangente(ch(p1),ch(p2)); while (untere Mittelsenkrechte g(r,s) ist noch nicht erreicht) Bestimme für die aktuelle Mittelsenkrechte g(p,q) den Schnittpunkt P mit der Voronoi-Region p, an dem nicht im letzten Schritt die Mittelsenkrechte abgeschnitten wurde; den Schnittpunkt Q mit der Voronoi-Region q, an dem nicht im letzten Schritt die Mittelsenkrechte abgeschnitten wurde; die zugehörigen Nachbarn p' (q' ), die mit p (q) die Kante gemeinsam haben, auf der P (Q) liegt; if Q ist höher als P ersetze q durch q' und schneide g(p,q) an der Stelle Q ab; if P ist höher als Q ersetze p durch p'und schneide g(p,q) an der Stelle P ab; bestimme die neue aktuelle Mittelsenkrechte g(p,q); return Ergebnis;
Folie 31 von 32 Pseudocode Tangente Input: Zwei konvexe Hüllen CH(P1) und CH(P2) ; die größte x-koordinate von CH(P1) ist kleiner als die kleinste x-koordinate von CH(P2). Output: Ein Paar (u,w) von Punkten, das die obere Tangente zu CH(P1) und CH(P2) festlegt. Punktepaar findeoberetangente(ch(p1),ch(p2)) u = Punkt in CH(P1) mit der größten x-koordinate; w = Punkt in CH(P2) mit der kleinsten x-koordinate; do L(u,w) = Gerade durch u und w; u' = Knoten, der in CH(P1) auf u gegen Uhrzeigersinn folgt; w' = Knoten, der in CH(P2) auf w im Uhrzeigersinn folgt; while(u' liegt über L(u,w)) u <- u'; while(w' liegt über L(u,w)) w <- w'; while(u oder w haben sich geändert) return (u,w);
Folie 32 von 32 Voronoi-Diagramme Literatur Klein, Rolf: Algorithmische Geometrie. Addison-Wesley Longman, Bonn, 1997 Okabe, Atsuyuki et al.: Spatial Tesselations: Concepts and Applications of Voronoi- Diagramms. John Wiley & Sons, 2000 Ottman, Thomas, Widmayer, Peter: Algorithmen und Datenstrukturen. 3. Auflage - Spektrum Akademischer Verlag, Heidelberg, Berlin, Oxford, 1996 Preparata, F. P., Shamos, M. I.: Computational Geometry: An Introduction. Springer- Verlag, New York, 1985