Geometrische Algorithmen Voronoi-Diagramme
Voronoi-Diagramme Übersicht
l Problemstellung
l Animation zur Konstruktion eines Voronoi-Diagramms
l Definition, Eigenschaften eines Voronoi-Diagramms
l Konstruktion des Voronoi-Diagramms
¡ Divide and Conquer
¡ Aufwand
l Konstruktion des Trennenden Kantenzugs
¡ Eigenschaften
¡ Animation
¡ Datenstruktur
¡ Worst Case
l Pseudocode: "Divide and Conquer", "Merge", "Tangente"
Problemstellung Welche Blume schnappt den Falter?
Problemstellung Anwendungen
l Kollisionsproblem: Welche 2 Punkte haben den kleinsten Abstand (Roboter, Flugzeuge, ...)
l Standortsuche: Wo wird die neue Filiale platziert...
l Filialenschließungsproblem: welches Paar von Filialen macht sich gegenseitig die größte Konkurrenz ...
l Postamts-Problem: wo liegt das nächste Postamt (Krankenhaus, ...)
l Einzugs- und Einflussgebiete von Versorgungsstationen (und ihre Größe)
l Bewertung von Standorten
l Modellierung von Nähe
l Delaunay-Triangulation
l Konvexe Hülle
Lösung Konstruktion eines Voronoi-Diagramms
Interaktive Animation zum Voronoi-Diagramm
Quelle: FernUniversität Hagen
http://wwwpi6.fernuni-hagen.de/Geometrie-Labor/VoroGlide/
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").
Lösung Bezeichnungen im Voronoi-Diagramm
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.
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.
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
Vorgehen Konstruktion des Voronoi-Diagramms
Konstruktion Divide and Conquer
5x
Konstruktion Betrachtung der Teilschritte
Input Sortiere aufsteigend nach x-Koordinate
Split
l Bestimme den Median
l Zerlege in annähernd gleich große Teilmengen links und rechts des Medians Merge
l Konstruktion des trennenden Kantenzuges
l Abschneiden überflüssiger Kanten
l 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
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?
Konstruktion Schwierigstes Teilproblem
Einfach: Input Sortiere aufsteigend nach x-Koordinate
Einfach: Split
l Bestimme den Median
l Zerlege in annähernd gleich große Teilmengen links und rechts des Medians Schwierig: Merge
l Konstruktion des trennenden Kantenzuges
l Abschneiden überflüssiger Kanten
l 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
Vorgehen Konstruktion des trennenden Kantezugs
Trennender Kantenzug Eigenschaften
l monoton in Nord-Süd-Richtung
l jede Kante ist Grenze zwischen einer blauen und einer gelben Region
(Mittelsenkrechte)
l die nördlichsten und südlichsten Teilstücke sind unbeschränkt, also Halbgeraden
l die zugehörigen Punkte bilden dort unbeschränkte Voronoi-Regionen
l die Punkte liegen also jeweils auf der blauen bzw. gelben konvexen Hülle Problem: Wie werden diese Punkte gefunden?
Trennender Kantenzug Gemeinsame Tangente
l 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)
l konvexe Hülle der gesamten Punktmenge ergibt sich aus den
Teilstrukturen durch Einfügen zweier zusätzlicher Kanten
l konvexe Hülle ist Abfallprodukt der Erzeugung des Voronoi-Diagramms
l synchrone Herleitung beider Strukturen
Trennender Kantezug Animation
Voronoi-Diagramm Datenstruktur
Doppelt verkettete Kantenliste (wie bei Polygon-Overlay) Vorteile:
l Direkter Zugriff auf die benachbarten Maschen
l Durchlaufen des Kantenumrings in linearer Zeit
Trennender Kantenzug Aufwand
Wie lange dauert die Konstruktion des trennenden Kantenzuges? - Ziel war O(n)
Aufwand ist abhängig von:
l Zahl der Teilkanten / Knoten des Kantenzuges
l Zahl Berechnungen von Schnittpunkten mit den benachbarten Voronoi-Regionen
Trennender Kantenzug Länge im Worst Case
Länge des Kantenzuges: O(n)
Trennender Kantenzug Worst Case des Umrings
Größenordnung des Umrings: O(n)
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.
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!
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)
Merge Bestimmen der oberen Tangente
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);
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.
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)
l den Schnittpunkt P mit der Voronoi-Region p, an dem nicht im letzten Schritt die Mittelsenkrechte abgeschnitten wurde;
l den Schnittpunkt Q mit der Voronoi-Region q, an dem nicht im letzten Schritt die Mittelsenkrechte abgeschnitten wurde;
l 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;
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);
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