510 likes | 855 Views
Voronoi-Diagramme. Kurze Einführung zum Thema Voronoi-Diagramme und deren Anwendungen. Einführungsbeispiel Definitionen Delaunay Triangulierung Algorithmen zur Berechnung des Diagramms Anwendungen. 1 Einführungsbeispiel. Grüne Fläche: Wald Rote Punkte: Brandwachtürme.
E N D
Voronoi-Diagramme Kurze Einführung zum Thema Voronoi-Diagramme und deren Anwendungen
Einführungsbeispiel • Definitionen • Delaunay Triangulierung • Algorithmen zur Berechnung des Diagramms • Anwendungen
1 Einführungsbeispiel Grüne Fläche: Wald Rote Punkte: Brandwachtürme Frage: Welche Fläche muss jeder Brandwachturm überwachen?
1 Einführungsbeispiel Antwort: Jeder Brandwächter überwacht die Bäume, die näher zu seinem Turm sind, als zu jedem anderen. Das „Voronoi-Diagramm“ zeichnet die Linien zwischen den Gebieten
2 Definitionen Sei P = {p1, p2, ..., pn} Menge von Punkten auf einer 2-dim. Fläche. Diese Punkte werden Orte (engl. sites) genannt. Zerteilt man die Fläche indem man deren Punkte ihrem nächsten Ort pi zuordnet, entstehen zu jedem Ort Voronoi-Regionen V(pi): V(pi) = {x: | pi – x | ≤ | pj – x | für alle j ≠ i } Manche Punkte werden mehr als einem Ort zugeordnet. Die Menge aller dieser Punkte bildet das Voronoi-Diagramm V(P).
Voronoi-Diagramm für zwei Orte Seien zwei Orte p1 und p2. B12 ist die Mittelsenkrechte zwischen p1 und p2. Dann ist jeder Punkt x auf B12 gleich entfernt zu p1 und p2. Nach dem Satz von Euklid ist |p1x| = |p2x|.
Voronoi-Diagramm für drei Orte Seien p1, p2 und p3 drei Orte, B12, B23 und B13 Mittelsenkrechten und das Dreieck (p1, p2, p3) Nach Euklid: Die Mittelsenkrechten eines Dreiecks schneiden sich in einem Punkt. =>Umkreismittelpunkt eines Dreiecks. Beachte: Der Umkreismittelpunkt muss nicht im Dreieck liegen!
2.1 Halbebenen Mehr als drei Orte: Mittelsenkrechten Bij spielen auch hier entscheidende Rolle! Unterteilung der Fläche in eine Halbebene H(pi, pj) mit der Grenze Bij und dem Ort pi =>Menge H(pi, pj) enthält die Punkte, die zu pi näher sind als zu pj. V(pi) ist die Menge der Punkte, die näher zu pi sind als zu allen anderen Orten. Oder auch: V(pi) enthält die Punkte näher zu pi als zu p1und näher zu pials zu p2und ... näher zu pi als zu pn.
2.1 Halbebenen Daraus ergibt sich für V(pi) folgende Gleichung: V(pi) = ∩i≠j H(pi, pj) Diese Gleichung zeigt wichtige Eigenschaft der Voronoi-Diagramme: Da der Durchschnitt von Halbebenen konvex ist, ist auch jede Voronoi-Region V(pi) ein konvexes Polygon.
Die Kanten der Voronoi-Regionen heißen Voronoi-Kanten. Alle inneren Punkte der Voronoi-Kanten haben zwei nächste Orte. Die Knoten (Ecken) der Voronoi-Regionen heißen Voronoi-Knoten. Alle Voronoi-Knoten haben mindestens drei nächste Orte.
Beispiel Voronoi-Diagramm mit n = 20 Orten
2.2 Größe des Diagramms Zur Vereinfachung: - keine vier Orte sind `kozirkular´ (d.h. nicht mehr als drei Orte liegen auf einem Umkreismittelpunkt) =>jeder Voronoi-Knoten hat den Grad 3 Nun konstruieren wir einen ungerichteten Graphen G wie gefolgt: - Die Knoten von G sind die Orte - Zwei Knoten werden mit einer Kante verbunden, wenn ihre Voronoi-Regionen sich eine Voronoi-Kante teilen.
2.2 Größe des Diagramms Für unser Diagramm aus dem Einführungsbeispiel ergibt sich folgender Graph(blau):
2.2 Größe des Diagramms • alle Punkte (Orte) sind verbunden • G ist ein ‚triangulärer‘ Graph • (da alle Voronoi-Knoten Grad 3 haben) • Nach Euler hat ein triangulärer Graph mit n Knoten max. 3n-6 Kanten und besteht aus max. 2n-4 Flächen. • Da #Flächen von G = #Voronoi-Knoten • und #Kanten von G = #Voronoi-Kanten, • folgt: • #Voronoi-Knoten = O(n) • #Voronoi-Kanten = O(n)
2.2 Größe des Diagramms Ohne Einschränkung der Voronoi-Knoten auf Grad 3: Komplexität der Voronoi-Diagramme bleibt bei O(n), da nicht-trianguläre Graphen weniger Knoten und weniger Kanten haben. Als Folgerung aus max. 3n-6 Kanten kann man sagen, dass die durchschnittliche Anzahl der Voronoi-Kanten eines Polygons nicht mehr als sechs sein kann.
3 Delaunay Triangulierung In 1934 zeigt Delaunay, dass der vorher beschriebene ungerichtete Graph G eine Triangulierung der Orte P eines Voronoi-Diagramms ist (falls jeder Voronoi-Knoten vom Grad 3 ist). Dies nennt man die Delaunay TriangulierungD(P).
3 Delaunay Triangulierung In 1934 zeigt Delaunay, dass der vorher beschriebene ungerichtete Graph G eine Triangulierung der Orte P eines Voronoi-Diagramms ist (falls jeder Voronoi-Knoten vom Grad 3 ist). Dies nennt man die Delaunay TriangulierungD(P).
Eigenschaften der Delaunay Triangulierung D1.D(P) ist der ungerichtete duale Graph zu V(P). (siehe Def.) D2.D(P) ist eine Triangulierung, wenn keine vier Punkte `kozirkular´ sind: Jede Fläche ist ein Dreieck. Das ist der Satz von Delaunay. Die Flächen von D(P) nennt man Delaunay Dreiecke. D3. Jedes Dreieck von D(P) entspricht einem Knoten von V(P). D4. Jede Kante von D(P) entspricht einer Kante von V(P). D5. Jeder Knoten von D(P) entspricht einer Region von V(P). D6. Die Ränder von D(P) ergeben die konvexe Hülle der Orte. D7. Das Innere jedes Dreiecks von D(P) enthält keine Orte.
Eigenschaften der Voronoi-Diagramme V1. Jede Voronoi-Region V(pi) ist konvex. V2. V(pi) ist unbegrenzt, wenn pi auf der konvexen Hülle der Menge P liegt. V3. Wenn v ein Voronoi-Knoten am Verbindungspunkt von V(p1), V(p2) und V(p3) ist, dann ist v der Mittelpunkt des Kreises C(v) auf dem p1, p2 und p3 liegt. V4.C(v) ist der Umkreis des zu Voronoi-Knoten v gehörenden Delaunay Dreiecks. V5. Das Innere von C(v) enthält keine Orte. V6. Wenn pj der `nächste Nachbar´ von pi ist, dann ist (pi, pj) eine Kante von D(P). V7. Wenn es einen Kreis durch pi und pjgibt welcher keine anderen Orte enthält, dann ist (pi, pj) eine Kante von D(P). (Aus Umkehrung folgt: Für jede Delaunay-Kante gibt es leere Kreise.)
Eigenschaften der Voronoi-Diagramme Beweis zu V7.: Behauptung:ab ist Delaunay-Kante gdw. es einen leeren Kreis durch a und b gibt: D.h. dieser Kreis enthält weder im Inneren noch auf dem Rand einen anderen Ort außer a und b. Beweis: „=>“ ab ist Delaunay-Kante => V(a) und V(b) teilen eine Kante e Nun bildet man einen Kreis C(x) mit Mittelpunkt x, der im Inneren(!) der Kante e liegt und durch a und b geht. Dieser Kreis ist leer! Angenommen der Punkt c ist im oder auf dem Kreis => x ist auch in V(c) => Widerspruch zu x nur in V(a) und V(b) !
Eigenschaften der Voronoi-Diagramme • „<=“ • Angenommen es gibt einen leeren Kreis C(x) durch a und b mit Mittelpunkt x • x ist gleichweit zu a und b • x ist in V(a) und V(b), solange kein Ort kommt, die näher ist als a und b. Dies ist aber nicht möglich, da der Kreis leer sein soll! • x ist im Durchschnitt von V(a) und V(b). • x liegt auf der Voronoi-Kante (Untermenge von Bab) zwischen V(a) und V(b) • ab ist Element von D(P) • q.e.d.
4 Algorithmen zur Berechnung des Voronoi-Diagramms
4.1 Durchschnitt von Halbebenen Man kann jede Voronoi-Region bilden indem man den Durchschnitt von n - 1 Halbebenen nach der Gleichung V(pi) = ∩i≠j H(pi, pj) bildet. (Zur Erinnerung: H ist die Fläche zum Ort, die von der Mittelsenkrechten begrenzt wird.) Durchschnitt von n Halbebenen ist gleich der Arbeit beim Erstellen einer 2-dimensionalen konvexen Hülle von n Punkten und kann mit ähnlichen Algorithmen in O(n log n) Zeit erledigt werden. Bei n Voronoi-Regionen ist der Gesamtaufwand O(n2 log n).
4.2 Inkrementelle Konstruktion Angenommen: Voronoi-Diagramm V mit k Orten ist berechnet Wir wollen ein Diagramm V´ erstellen, nachdem wir den Ort p hinzugefügt haben. Angenommen: p fällt in das Innere eines (bisher Ort-freies) Kreises C(v) mit Voronoi-Knoten v als Mittelpunkt. =>v kann nicht mehr Voronoi-Knoten von V´ sein (wegen Bedingung V5: das Innere von C(v) enthält keine Orte) =>alle Knoten, die aus V entfernt werden müssen. Es ergibt sich ebenfalls, dass alle auf eine bestimmte Fläche des Diagramms begrenzt sind. Green & Sibson 1977 entwickelten daraus Algorithmus, der das Einsetzen eines Ortes in O(n) schafft. => Gesamtlaufzeit von O(n2).
4.3 Divide & Conquer Voronoi-Diagramme können mit komplexen divide-and-conquer Algorithmus in O(n log n) Zeit erstellt werden Die Komplexität von O(n log n) ist asymptotisch optimal ABER: dieser Algorithmus ist sehr schwer zu implementieren
4.4 Fortune‘s Algorithmus Bis Mitte der 80er Jahre: meistens inkrementeller Algorithmus(4.2) (wegen komplexer Implementierung mit divide-and-conquer) In 1985 entwickelte Fortune plane-sweep Algorithmus Vorteile: -einfacher als der inkrementelle Algorithmus -im schlechtesten Falle Komplexität O(n log n) Die Grundidee: Eine sweep-Linie durchläuft eine Fläche. Für den bereits passierten Abschnitt steht die Lösung schon fest, für den Rest noch nicht.
4.4 Fortune‘s Algorithmus Vorbemerkung 1: Kegel Seien Orte p1 und p2 auf xy-Ebene eines 3-dim. Koordinatensys. Über jedem Ort sei Kegel mit Gipfel in p mit Seitenneigung 45° Diese schneiden sich in Kurve im Raum. Diese Kurve liegt auf vertikalen Ebene. Durch diese Ebene kann man Schnitt auf xy-Ebene projizieren. Der Schnitt ist die Voronoi-Kante zwischen p1 und p2.
4.4 Fortune‘s Algorithmus Vorbemerkung 2: Schnitt durch die Kegel Wir durchlaufen alle Kegel mit 45° zur xy-Ebene geneigten Ebene π sweep-Linie L ist Schnitt von π und xy-Ebene L sei parallel zur y-Achse (mit x-Koordinate l)
4.4 Fortune‘s Algorithmus Stellen wir uns nun vor π sowie alle Kegel seien undurchsichtig und wir schauen nun von unten (z = -∞) herauf: -Rechts von L (x > l) sehen wir nur die Unterseite von π, weil sie die xy-Ebene schneidet und die Orte mit deren Kegeln verdeckt. -Der Schnitt von π und jedem Kegel ist eine Parabel.
4.4 Fortune‘s Algorithmus An den Stellen wo zwei Parabeln sich treffen, trifft π zwei Kegel. Aus Vorbemerkung 1 => an diesen Stellen muss Voronoi-Kante sein
4.4 Fortune‘s Algorithmus Parabolische Front Da π die selbe Neigung (45°) wie die Kegel hat =>sweep-Linie L trifft den Ort p genau dann, wenn π den Kegel von p zum ersten mal berührt. Nun muss nur die „parabolische Front“ beobachtet werden (=Schnitt der Kegel mit π) An den „Knicken“ist eine Voronoi-Kante.
4.4 Fortune‘s Algorithmus Wir müssen nur den Verlauf der parabolischen Front abspeichern, um daraus das Voronoi-Diagramm zu erstellen. Die Komplexität der Größe um die Front zu speichern ist O(n) (oft nur O(√n)) =>Großer Vorteil des Fortune Algorithmus: Bei großem n ist die Größe des Gespeicherten oft viel kleiner als das des Diagramms. Bemerkung: n ist oft groß! (z.B. 106 bei geographischen Informationssystemen)
5.1 Nächster Nachbar Nun suchen wir den „nächsten Nachbarn“ zu jedem Punkt in einer gegebenen Menge. Definition der „nächster Nachbar“-Relation: b ist ein nächster Nachbar von a gdw. |a – b| ≤ minc≠a|a – c| Schreibweise: a → b Diese Relation ist nicht symmetrisch! (hier: a → b, aber nicht b → a) Ein Punkt kann mehrere nächste Nachbarn haben! (hier: Punkt d)
Nächste Nachbar Anfragen Gegeben: Menge P von Punkten(Orten) und deren Voronoi-Diagramm. Nun brauchen wir für einen neuen Anfragepunkt q nur noch herausfinden in welcher(n) Voronoi-Region(en) er liegt. Die zu diesen Voronoi-Regionen zugehörigen Orte sind nächste Nachbarn von q. Jede Anfrage kann in O(log n) Zeit erledigt werden!
Alle Nächsten Nachbarn Definieren wir den Nächster-Nachbar-Graph (NNG) um jedem Punkt der Menge P mit seinem nächsten Nachbarn zu verbinden. NNG ist ungerichtet definiert (obwohl Relation nicht symmetrisch ist) => Lemma: NNG ist Teilmenge von D(P) (= Delaunay Triangulierung) Ein primitiver Algorithmus würde O(n2) benötigen. Durch unser Lemma wissen wir, dass wir nur die O(n) Kanten der Delaunay Triangulierung von P durchsuchen müssen. => Gesamtlaufzeit O(n log n).
5.2 Größter Leerer Kreis Zum Beispiel folgende Anwendung: -Wenn die Orte Filialen einer Firma sind, ist die Mitte des größten leeren Kreises der optimale Ort für das Errichten einer neuen Filiale. Eigentlich Unsinn größten Kreis zu suchen da außerhalb jeder Menge unendlich große leere Kreise sind. Deshalb fassen wir das Problem so auf: Größter Leerer Kreis: Finde einen größten leeren Kreis dessen Mitte in der konvexen Hülle der Menge S von n Orten ist. Leer, so dass er kein Ort im Inneren hat. Größter, so dass kein anderer solcher Kreis besteht der einen echt-größeren Radius hat.
5.2 Größter Leerer Kreis Mittelpunkte innerhalb der Hülle Angenommen p ist streng im Inneren der Hülle H und der Kreis geht genau durch ein Ort s1.
5.2 Größter Leerer Kreis Mittelpunkte innerhalb der Hülle Angenommen p ist streng im Inneren der Hülle H und der Kreis geht genau durch zwei Orte s1 und s2.
5.2 Größter Leerer Kreis • Mittelpunkte innerhalb der Hülle • der Kreis geht durch drei Orte Da aber die Mitte eines solchen Kreises genau auf einem Voronoi-Knoten liegt, folgt daraus: • Lemma 1: Wenn die Mitte p eines größten leeren Kreises streng im Inneren der konvexen Hülle H aller Orte S liegt, dann muss p auf einem Voronoi-Knoten liegen.
5.2 Größter Leerer Kreis Mittelpunkte auf der Hülle Den Fall, dass p auf einem Knoten der Hülle liegt, können wir ausschließen, da diese immer ein Ort sind (Def. Hülle H). • p liegt auf der Kante h von H Angenommen der Kreis um p geht durch genau ein Ort s1.
5.2 Größter Leerer Kreis Mittelpunkte auf der Hülle => der Kreis geht durch zwei Orte Dann ist p aber auch auf einer Voronoi-Kante. Daraus folgt: Lemma 2: Wenn die Mitte p eines größten leeren Kreises auf der konvexen Hülle H aller Orte S liegt, dann muss p auf einer Voronoi-Kante liegen.
5.2 Größter Leerer Kreis Algorithmus Nun sind wir kurz vor dem Ziel. Wir haben eine endliche Menge von möglichen Punkten, die Mitten des größten leeren Kreises sein könnten: - Voronoi-Knoten - Schnittpunkte der Voronoi-Kanten mit der Hülle der Orte Bemerkung: Nicht alle Voronoi-Knoten liegen zwangsweise in der Hülle! Nach unserer Definition vom größten leeren Kreis kommen diese Knoten nicht als Mitten in Betracht. Dieses muss im Algorithmus beachtet werden! Zur Laufzeit: -Test, ob ein Voronoi-Knoten in Hülle liegt: O(log n) (siehe Kapitel 7 im Buch). -Schnitt Voronoi-Kanten mit Hülle: O(log n) =>Gesamtlaufzeit O(n log n).
5.2 Größter Leerer Kreis Algorithmus:GRÖßTERLEERERKREIS Berechne das Voronoi-Diagramm V(S) der Orte S. Berechne die konvexe Hülle H der Orte S. for alle Voronoi-Knoten vdo ifv ist im Inneren von Hthen Berechne den Radius des Kreises mit Mittelpunkt v und bringe max auf den neusten Stand. for alle Voronoi-Kanten edo Berechne den Schnittpunkt p zwischen e und der Hülle. Berechne den Radius mit Mittelpunkt p und bringe max auf den neusten Stand. Gebe max zurück.