Voronoi-Diagramme - Universität Trier

Werbung
Voronoi-Diagramme
Martin Greilich
[email protected]
Das Dokument ist eine Ausarbeitung des Vortrags über Voronoi-Diagramme im
Rahmen des Pro-Seminars ‚Algorithmische Geometrie’ betreut von Prof. Näher
vom WS2004/05 an der Universität Trier. Als Grundlage dient das Buch
‚Computational Geometry in C’ von Joseph O`Rourke. Im Vortrag wird eine
kurze Einführung zum Thema ‚Voronoi-Diagramme’ und deren Anwendungen
gegeben.
2
Martin Greilich
1
Einführungsbeispiel
Die grüne Fläche sei ein Wald mit Brandwachtürmen (rote Punkte).
Jeder Brandwächter überwacht die Bäume, die näher zu seinem Turm sind, als zu
jedem anderen. Die Menge aller Bäume, die von einem bestimmten Brandwächter
überwacht wird, bildet das „Voronoi-Polygon“. Das „Voronoi-Diagramm“ zeichnet
die Linien zwischen den Gebieten. Die Linien bestehen aus Punkten, an denen die
Entfernung zu zwei oder mehr Türmen gleich ist.
2
Definitionen
Sei P = {p1, p2, ..., pn} Menge von Punkten auf einer 2-dimensionalen Fläche. Diese
Punkte werden Orte genannt.
Zerteilt man die Fläche indem man deren Punkte zu ihrem nähersten Ort p i 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 (oder auch nächsten Nachbarn)
zugeordnet. Die Menge aller dieser Punkte bildet das Voronoi-Diagramm V(P) für die
Menge der Orte.
Voronoi-Diagramme
3
Zur Einführung betrachten wir zuerst Diagramme mit wenigen Orten:
Zwei Orte
Seien nun zwei Orte p1 und p2.
B12 ist nun 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|.
Drei Orte
Bei drei Orten p1, p2 und p3 ist klar, dass das Diagramm weg vom Dreieck (p1, p2, p3)
aus den Mittelsenkrechten B12, B23 und B13 besteht.
Wiederum nach Euklid ergibt sich, dass sich die Mittelsenkrechten eines Dreiecks
in einem Punkt schneiden. Dieser Punkt ist der Umkreismittelpunkt eines Dreiecks.
Also ergibt sich das Voronoi-Diagramm für drei Orte wie in dieser Abbildung:
Beachte: Der Umkreismittelpunkt muss nicht zwangsweise im Dreieck liegen!
4
2.1 Halbebenen
Es ist klar, dass die Mittelsenkrechten auch bei mehr als drei Orten eine Rolle spielen.
Unterteilt man die Fläche in eine Halbebene H(pi, pj) mit der Grenze Bij und dem Ort
pi, dann enthält die Menge H(pi, pj) die Punkte, die zu pi näher sind als zu pj.
V(pi) ist nun 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 p1 und
näher zu pi als zu p2 und
...
näher zu pi als zu pn.
Daraus ergibt sich für V(pi) folgende Gleichung:
V(pi) =
∩i≠j H(pi, pj)
Diese Gleichung zeigt nun eine 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 und die Knoten (Ecken)
der Voronoi-Regionen heißen Voronoi-Knoten.
Alle inneren Punkte der Voronoi-Kanten haben zwei nächste Orte.
Alle Voronoi-Knoten haben mindestens drei nächste Orte.
Hier ein Beispiel für ein Voronoi-Diagramm mit n = 20 Orten:
Rot: Orte / Grau: Voronoi-Kanten / Grün: Voronoi-Knoten
Voronoi-Diagramme
5
2.2 Größe des Diagramms
Zur Vereinfachung des Beweises nehmen wir an, dass keine vier Orte `kozirkular´
sind. Das heißt, dass nicht mehr als drei Orte auf einem Umkreismittelpunkt liegen
und deshalb jeder Voronoi-Knoten den Grad 3 hat.
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.
Für unser Diagramm aus dem Einführungsbeispiel ergibt sich folgender Graph(blau):
Nun sind alle Punkte im Graph G verbunden und alle zur Knoten zugehörigen Kanten
können nach ihrem Winkel geordnet werden. Man sieht auch (da wir für alle VoronoiKnoten Grad 3 voraussetzten), dass der Graph G ein `triangulärer´ Graph ist.
Nach Euler (siehe Kapitel 4.1.5 im Buch) hat ein triangulärer Graph mit n Knoten
max. 3n-6 Kanten und besteht aus max. 2n-4 Flächen.
Da die Anzahl der Flächen des Graphen G mit der Anzahl der Voronoi-Knoten und
die Anzahl der Kanten von G mit der Anzahl der Voronoi-Kanten übereinstimmt,
folgt:
#Voronoi-Knoten = O(n)
#Voronoi-Kanten = O(n)
6
Wenn man nun die Einschränkung der Voronoi-Knoten auf Grad 3 aufhebt, ändert
sich die Komplexität der Voronoi-Diagramme nicht, da nicht-trianguläre Graphen
weniger Knoten und weniger Kanten haben. So bleibt es bei O(n).
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 Triangulations
In 1934 zeigt Delaunay, dass der vorher beschriebene ungerichtete Graph G eine
Triangulierung der Orte P eines Voronoi-Diagramms ist (falls jeder Voronoi-Knoten
nicht höher als vom Grad 3 ist). Dies nennt man die Delaunay Triangulierung D(P).
Voronoi-Diagramm V(P)
Delaunay Triangulierung D(P)
Delaunay Triangulierung D(P) über Voronoi-Diagramm V(P)
3.1 Eigenschaften der Delaunay Triangulierung
Die Delaunay Triangulierung und die Voronoi-Diagramme enthalten die gleichen
Informationen allerdings in verschiedener Form.
Um die komplexe Struktur zu verstehen, sehen wir uns nun Eigenschaften einer
Delaunay Triangulierung und den Zusammenhang zu dem Voronoi-Diagramm.
Voronoi-Diagramme
7
Eigenschaften der Delaunay Triangulierung:
D1. D(P) ist der ungerichtete Graph zu V(P). Dies folgt aus der Definition.
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. (Dies gilt generell für Voronoi-Knoten aller Gerade.)
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 pj gibt welcher keinen anderen Orte
enthält, dann ist (pi, pj) eine Kante von D(P). Aus der Umkehrung folgt: Für
jede Delaunay-Kante gibt es leere Kreise
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: „=>“
Wenn ab eine Delaunay-Kante ist, dann teilen sich V(a) und V(b) eine Kante e des
Voronoi-Diagramms V(P) (siehe Definition von D(P)). Nun bildet man einen Kreis
C(x) mit Mittelpunkt x, der im Inneren(!) der Kante e liegt und den Radius gleich dem
Abstand zu a oder b hat. Dieser Kreis ist leer!
Denn angenommen der Punkt c ist im oder auf dem Kreis: Dann wäre x auch in V(c).
Dies ist aber ein Widerspruch dazu, dass x nur in V(a) und V(b) sein soll.
„<=“
Nehmen wir an es gibt einen leeren Kreis C(x) durch a und b mit Mittelpunkt x.
Weil x gleichweit zu a und b ist, ist x in der Voronoi-Region von a und 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! Deshalb ist x im Durchschnitt von V(a) und V(b).
8
Wir können nun x auf der Mittelsenkrechten Bab von a und b bewegen, wobei der
Kreis immer noch durch a und b geht, ohne die Eigenschaft zu verlieren leer zu sein.
Daraus ergibt sich, dass x auf der Voronoi-Kante (Untermenge von Bab) zwischen
V(a) und V(b) liegt.
Und daraus folgt, dass ab Element von D(P) ist.
q.e.d.
4
Algorithmen zur Berechnung des Voronoi-Diagramms
Nun sehen wir uns einige Vorgehensweisen an, wie man das Voronoi-Diagramm
berechnen kann.
4.1 Durchschnitt von Halbebenen
Man kann (wie schon erwähnt) 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 2dimensionalen 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 Iterative Konstruktion
Angenommen wir haben bereits ein Voronoi-Diagramm V mit k Orten berechnet und
würden gerne ein Diagramm V´ erstellen, nachdem wir den Ort p hinzugefügt haben.
Nehmen wir an p fällt in das Innere eines (bisher Ort-freies) Kreises C(v) mit
Voronoi-Knoten v als Mittelpunkt. Dann kann v nicht mehr Voronoi-Knoten von V´
sein, da die Bedingung V5 (das Innere von C(v) enthält keine Orte) verletzt wird.
Daraus ergeben sich alle Knoten, die aus V entfernt werden müssen. Es ergibt sich
ebenfalls, dass alle auf eine bestimmte Fläche des Diagramms begrenzt sind.
Aus diesen Beobachtungen entwickelten Green & Sibson 1977 einen Algorithmus,
der das Einsetzen eines Ortes in O(n) schafft.
Daraus ergibt sich für das Erstellen eines Voronoi-Diagramms eine Gesamtlaufzeit
von O(n2).
Bemerkung: Dies war trotz der quadratischen Laufzeit die übliche Methode ein
Voronoi-Diagramm zu erstellen.
Voronoi-Diagramme
9
4.3 Divide and Conquer
Voronoi-Diagramme können mit einem 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 benutzten die meisten den iterativen Algorithmus(4.2) um die
komplexe Implementierung des divide-and-conquer Algorithmus zu vermeiden.
In 1985 entwickelte Fortune einen plane-sweep Algorithmus, der einfacher als der
iterative war, und im schlechtesten Falle Komplexität O(n log n) hatte.
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. In unserem Fall wäre das VoronoiDiagramm für den passierten Abschnitt fertig.
Vorbemerkung 1: Kegel
Die Orte p1 und p2 seien auf der xy-Ebene eines 3-dimensionalen Koordinatensystems.
Über jedem Ort sei ein Kegel mit Gipfel in p dessen Seiten eine Neigung von 45°
haben. Seien nun zwei Kegel über den Orten p1 und p2. Diese zwei Kegel schneiden
sich in einer Kurve im Raum. Diese Kurve liegt auf einer vertikalen Ebene.
Durch diese Ebene kann man denn Schnitt auf die xy-Ebene projizieren.
Wenn man nun für alle Orte die Kegel von unten aus (z = -∞) betrachtet (mit der
Annahme, dass die Kegel undurchsichtig sind), sieht man das Voronoi-Diagramm.
10
Vorbemerkung 2: Schnitt durch die Kegel
Fortune lässt nun alle Kegel mit einer zur xy-Ebene 45° geneigten Ebene π
durchlaufen. Die sweep-Linie L ist der Schnitt der Ebene π mit der xy-Ebene. L sei
parallel zur y-Achse und seine x Koordinate sei l.
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. Diese Seite muss noch durchlaufen
werden.
Der Schnitt von π und jedem Kegel ist eine Parabel.
An den Stellen wo zwei Parabeln sich treffen, trifft π zwei Kegel.
Aus Vorbemerkung 1 kann man schließen, dass an diesen Stellen eine Voronoi-Kante
sein muss.
Voronoi-Diagramme
11
Parabolische Front
Da π die selbe Neigung (45°) wie die Kegel hat, trifft die sweep-Linie L den Ort p
genau dann, wenn π den Kegel von p zum ersten mal berührt. Nun müssen wir nur die
„parabolische Front“ beobachten, die die Kegel der Orte geschnitten mit π ergeben.
An den „Knicken“ der parabolischen Front (Knicke sind die Stellen, wo zwei
Parabeln sich schneiden) ist eine Voronoi-Kante.
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) und oft sogar nur
O(√n). Dies ist ein 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
Anwendungen
Eine Anwendung der Voronoi-Diagramme war bereits das Einführungsbeispiel.
Zuletzt sehen wir uns noch zwei andere Anwendungsbeispiele an.
5.1 Nächster Nachbar
Nun suchen wir den „nächsten Nachbarn“ zu jedem Punkt in einer gegebenen Menge.
Diese Anwendung wird in vielen Gebieten benutzt (z.B. Biologie, Ökologie,
Geographie und Physik).
Definition der „nächster Nachbar“-Relation über eine Menge von Punkten:
b ist ein nächster Nachbar von a gdw. |a – b| ≤ minc≠a|a – c| (c ist Element von P).
Schreibweise: a → b
Diese Relation ist nicht symmetrisch! (siehe Abbildung: a → b, aber nicht b → a)
12
Bemerkung: Ein Punkt kann mehrere nächste Nachbarn haben. Siehe Punkt d in der
Abbildung.
Nächster Nachbar Anfragen
Gegeben sei eine Menge P von Punkten und das dazugehörige 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.
Dieses Problem wird „point location“ genannt und wird im Kapitel 7 des Buches
besprochen. Es kann für jede Anfrage 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. Wenn dieser Graph als ungerichtet
definiert wird (obwohl die Relation nicht symmetrisch ist), kann man folgendes
Lemma aufstellen:
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. Dies ergibt eine Gesamtlaufzeit von O(n log n).
5.2 Größter Leerer Kreis
Suche nach dem größten leeren Kreis in einer Menge S von Orten hat z.B. 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.
oder:
Wenn die Orte Städte sind, ist diese Mitte der optimale Ort für die Errichtung
eines nuklearen Reaktors (weit weg von Zivilisation).
Eigentlich ist es unsinnig einen 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.
Sei f(p) der Radius des größten leeren Kreises mit Mitte p.
Dann suchen wir das Maximum dieser Funktion über alle Punkte p in der konvexen
Hülle H von S. Aber man muss scheinbar unendlich viele solche Punkte überprüfen
um das Maximum zu finden.
Voronoi-Diagramme
13
Eine übliche Vorgehensweise in der berechnenden Geometrie ist unendlich viele
„Kandidaten“ auf eine kleinere endliche Anzahl zu reduzieren um die Effizienz zu
erhöhen. So gehen wir nun auch vor:
Mittelpunkte innerhalb der Hülle
Stellen wir uns vor, es wird ein Kreis vom Punkt p aus aufgeblasen, bis er platzt,
wenn ein Ort der Menge S = {s1, s2, ... , sn} ins Innere kommt. Dann ist f(p) der
Radius in diesem Zeitpunkt.
Lasst uns zunächst annehmen, dass p streng im Inneren der Hülle H ist. Wenn am
Radius f(p) der Kreis genau ein Ort s1 im Inneren hat, dann ist klar, dass f(p) nicht das
Maximum der Funktion ist. Wenn p aber entlang einer Geraden s1p hinweg von s1auf
den Punkt p´ verschoben wird, dann ist f(p´) größer.
Es gibt immer einen Punkt p´ in der Nachbarschaft von p wo f größer ist.
Bemerkung: Dies ist nur der Fall, weil wir voraussetzten, dass p streng im Inneren
der Hülle liegt und deshalb immer ein Punkt p´ in H existiert!
Lasst uns also annehmen, dass bei Radius f(p) der Kreis genau zwei Orte s1 und s2
berührt. Wieder kann f(p) nicht das Maximum sein: Wenn man p entlang der
Mittelsenkrechten von s1s2 auf p´ verschiebt, dann ist f(p´) wieder größer.
14
Daraus folgt, dass der Kreis mit Radius f(p) durch drei Orte gehen muss. 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.
Mittelpunkte auf der Hülle
Jetzt müssen wir nur noch den Fall betrachten bei dem die Kreismitte auf der Hülle
liegt.
Denn 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). So muss p auf der Kante h von H liegen.
Nehmen wir also wieder an, dass der Kreis um p durch genau ein Ort s1 geht. Wenn
wir aber denn Punkt p entlang h weg von s1 auf p´ verschieben, wird f(p´) größer.
Also kann der Punkt p nur lokales Maximum sein, wenn der Kreis durch zwei Orte
geht. 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.
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. Diese muss im Algorithmus beachtet werden.
Zur Laufzeit: Der Test, ob ein Voronoi-Knoten in der Hülle liegt, kann in O(log n)
geschehen (siehe Kapitel 7 im Buch). Der Schnitt der Voronoi-Kanten mit der Hülle
Voronoi-Diagramme
15
kann ebenfalls in O(log n) durchgeführt werden. Daraus ergibt sich eine
Gesamtlaufzeit von O(n log n).
Algorithmus: GRÖßTER LEERER KREIS
Berechne das Voronoi-Diagramm V(S) der Orte S.
Berechne die konvexe Hülle H der Orte S.
for alle Voronoi-Knoten v do
if v ist im Inneren von H then
Berechne den Radius des Kreises mit Mittelpunkt v und
bringe max auf den neusten Stand.
for alle Voronoi-Kanten e do
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.
Herunterladen