Ein Sweepline-Algorithmus für Voronoi

Werbung
Ein Sweepline-Algorithmus für Voronoi-Diagramme
Dimitrios Skouras
21. Januar 2008
Inhaltsverzeichnis
1 Einleitung
1
2 Punkt-Sites
2.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Die Transformation ∗ . . . . . . . . . . . . . . . . . . . . . . .
2.3 Der Algorithmus für V und V ∗ . . . . . . . . . . . . . . . . .
2
2
2
4
3 Linien-Segment-Sites
3.1 Allgemeines . . . . . . . . . . . . . . . . . . . . .
3.2 Das Voronoi-Diagramm für Linien-Segment-Sites
3.3 Die Transformation ∗ . . . . . . . . . . . . . . . .
3.4 Der Algorithmus für V ∗ und V . . . . . . . . . .
7
7
7
8
9
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4 Gewichtete Punkt-Sites
11
5 Schlussfolgerung
11
I
1
Einleitung
Das Ziel des Sweepline-Algorithmus ist es, aus einer gegebenen Menge von
Sites, das dazu passende Voronoi-Diagramm (im Folgenden VD) zu bestimmen. Die Sites können Punkte, Linien, oder gewichtete Punkte sein
und liegen im Normalfall in ihrer Voronoi-Region (im Folgenden VR). Der
Sweepline-Algorithmus lässt eine horizontale Linie von unten nach oben
durch die Ebene wandern und speichert die Schnitte in der dafür vorgesehenen Datenstruktur. Dadurch werden die VR vor den Sites erfasst, was
eine grosse Schwierigkeit darstellt.
Steven Fortune überwandt diese, indem er eine geometrische Transformation auf das eigentliche VD anwandt.
Die Transformation ∗ bildet jede Site auf sich selbst ab und ist dann unterster Punkt der transformierten VR. Dies wird durch die Tatsache gewährleistet, dass jeder Punkt z ∈ V D auf den obersten Punkt des Voronoi-Kreises
um z transformiert wird. Dabei ist der Radius des Kreises definiert durch
den kleinsten euklidischen Abstand zur nächsten Site p. Dank ∗ muss die
VR erst betrachtet werden, wenn eine Site von der Sweepline geschnitten
wird.
Die Rücktransformation zum eigentlichen VD ist einfach und wird gleich
mit berechnet. Somit braucht der Algorithmus nur die untransformierten
Kanten und Knoten zu speichern.
Der Sweepline-Algorithmus hat für alle Fälle (Punkt-Sites, Linien-SegmentSites und gewichtete Punkt-Sites) eine Laufzeit von O(n log(n)) und einen
Speicherplatzbedarf von O(n). Dabei bildet der Algorithmus für die PunktSites den Standard-Algorithmus, der dann für die anderen Fälle modifiziert
wird.
Abbildung 1: Sweeprichtung für V und V ∗
1
2
2.1
Punkt-Sites
Allgemeines
Wir betrachten nun den einfachen Fall von Punkten in der euklidischen
Ebene. Für die folgenden Betrachtungen sei S die gegebene Menge aller
Sites. Wenn p ∈ R2 , dann ist px die x-Koordinate und py die y-Koordinate
und p lexikographisch kleiner“ q bedeutet, dass py < qy oder py = qy und
”
px < qx .
Definition 2.1.1. Für p ∈ S und z ∈ R2 sei dp : R2 −→ R die euklidische
Distanz von z zu p.
Definition 2.1.2. Für z ∈ R2 sei d : R2 −→R; d(z) = |{z}
min dp sei die euklip∈S
dische Distanz zur nächsten Site
Definition 2.1.3. Bisektor Bpq = z ∈ R2 |dp (z) = dq (z) , ∀p, q ∈ S
Definition 2.1.4. Halbebene Rpq = z ∈ R2 |dp (z) ≤ dq (z) , ∀p, q ∈ S
\
Definition 2.1.5. Voronoi-Region Rp =
Rpq ; ∀p, q ∈ S
|{z}
p6=q
Die Voronoi-Region Rp ist konvex und kann am Rand von V unbegrenzt
sein. Das Voronoi-Diagramm V(S), oder auch einfach nur V, besteht aus
allen Grenzen, die zwischen zwei Sites liegen. Die genaue Definition lautet:
Definition 2.1.6. Voronoi-Diagramm V (S) = z ∈ R2 |∃p6=q : d(z) = dp (z)
= dq (z) , ∀p, q ∈ S
Ein Knoten v ∈ V ist ein Punkt, der zu 3 Sites den gleichen Abstand
hat. Eine Kante epq ∈ V ist ein Stück der Grenze der VR und liegt zwischen
den Sites p und q. Allgemein sind Kanten durch zwei Endpunkte begrenzt,
oder sie haben genau einen Endpunkt und bilden eine zu einer Seite offene
Halblinie, die zwischen zwei Sites liegt.
Bemerkung 2.1.7. Es gibt höchstens O(n) Knoten und Kanten
2.2
Die Transformation ∗
Die Abbildung ∗ wird definiert durch ∗(z) := (x, y + d(z)) und bildet den
Punkt z ∈ R2 auf den höchsten Punkt des Voronoi-Kreises um z ab. Die
Transformation ist stetig durch ihre Eigenschaften wird gewährleisetet, dass
alle Punkte der Voronoi-Region um eine Site p, im transformierten VoronoiDiagramm VD* über p liegen und somit p das Minimum der Region darstellt.
Offensichtlich werden Sites und vertikale Linien auf sich selbst abgebildet.
Angewandt auf den Sweepline-Algorithmus bedeutet dies, dass die Sweepline
eine Site als ersten Teil der gesamten Region schneidet.
2
Notation 2.2.1. Für einen transformierten Bisektor ∗(Bpq ) schreiben wir
∗
auch Bpq
Zur Untersuchung von ∗, betrachten wir zunächst die Hilfstransformation
∗p , welche ähnlich wie ∗ definiert ist, jedoch die Grenzen in Abhängigkeit zu
einer festen Site p transformiert. Also sind die beiden Transformationen auf
einer festen Region Rp identisch. Es gilt ∗p (z) := (x, y + dp (z)).
Lemma 2.2.2. .
• Wenn py > qy ⇒ ∗(Bpq ) ist eine Hyperbel, die nach oben offen ist und
ihr Minimum in p hat.
• Wenn py = qy ⇒ ∗(Bpq ) ist eine vertikale Gerade über (r, y + dp (r, y))
x
mit r = px +q
2 .
Sei nun epq eine Kante von V, dann ist e∗pq ein Stück einer Hyperbel,
oder einer vertikalen Linie.
Lemma 2.2.3. Sei v ∈ V ein Knoten und v ∗ ∈ V ∗ , der höchste Punktt
des Voronoi-Kreises um v. Seien p, s ∈ S die Sites, welche man als erste
erreicht, wenn man von v ∗ ) aus, nach links bzw. rechts auf dem Kreis wandert. Dann
1. v ∗ ist Site ⇒ genau zwei Kanten e∗pv und e∗vq verlaufen von v ∗ aus
nach oben und die restlichen nach unten.
2. v ∗ ist keine Site ⇒ genau eine Kante e∗pq verläuft von v ∗ aus nach
oben und die restlichen nach unten.
Mit Hilfe der Lemmata und der vorausgegangenen Beobachtungen können
wir nun jeden Punkt x im Bildbereich von ∗ klassifizieren. Die folgenden
Fälle schliessen sich gegenseitig aus:
• x liegt im innener eine Region Rp∗ .
• x liegt auf einer Kante e∗pq , ist aber weder eine Site noch ein Knoten
in V ∗ .
• x ist eine Site und kein Knoten. Dann ist der Punkt das Minimum der
Region Rp∗ und der Kante e∗xq , für ein p ∈ S.
• x ist ein Knoten und keine Site. Dann veräuft von dem Punkt aus
genau eine Kante nach oben und mindestens zwei nach unten.
• x ist Site und Knoten. Dann verlaufen von diesem Punkt genau zwei
Kanten nach oben und mindestens eine nach unten.
3
2.3
Der Algorithmus für V und V ∗
Ein Sweepline-Algorithmus genügt, um V ∗ zu berechnen. Bildlich bewegt
sich eine horizontale Linie von unten nach oben durch die Ebene. Man erhält
die Regionen und die Kanten durch den Schnitt mit der Sweepline und
speichert diese in der Datenstruktur. Eine Region wird das erste Mal in der
zugehörigen Site getroffen und verlassen, wenn sich zwei Kanten schneiden.
Die Haltepunkte der Sweepline sind die Sites und die Knoten.
Die Koordinaten der Sites sind gegeben und die Koordinaten der Schnittpunkte werden vom Algorithmus berechnet, indem er jedes mal wenn eine
neue Kante getroffen wird, den Schnittpunkt mit dieser und mit ihren Nachbarkanten berechnet.
Wir bezeichnen den Sweepline-Algorithmus von Punkt-Sites im Folgenden mit Algorithmus1. Er speichert das Voronoi-Diagramm V ∗ als eine Liste
von Bisektoren, zu denen zwei Knoten gegeben sind, welche die beiden Endpunkte der korrespondierenden Kante sind. Wenn ein Bisektor nur durch
einen Knoten gegeben ist, ist die korrespondierende Kante eine Halbgerade,
die zu einer Seite unbegrenzt ist.
Wir gehen beim Algorithmus von der Tatsache aus, dass immer eine eindeutige, unterste Site in unserer Datenstruktur existiert. Andernfalls mdie
Zeilen 2 und 3 von Algorithmus1 umgeschrieben werden.
Wenn diese Annahme nun gegeben ist und bei zwei benachbarten Regionen Rp und Rq gilt, dass py < qy , dann ist ∗p (Bpq ) eine nach oben geöffnete
Hyperbel,die die Site p als Minimum hat.
Notation 2.3.1. Den Teil der Hyperbel, der links von p verläuft (monoton
− . Den Teil der Hyperbel, der rechts von p
fallender Teil) nennen wir Cpq
+.
verläuft (monoton steigender Teil) nennen wir Cpq
+ und C − sind beides Grenzen und von einer festen horizontalen Linie
Cpq
pq
+ eine senkrechte
nur einmal geschnitten. Wenn py = qy , ist ∗p (Bpq ) = Cpq
−
Halblinie und folglich müssen wir Cpq = ∅ setzen. Schreibe Cpq , wenn die
Wahl unwichtig ist.
In Zeile 8 von Algorithmus1 wird eine Suche ausgeführt, welche die Region findet, die zu einer neu entdeckten Site gehhört. Sie kann als Binärsuche
auf einer Liste L implementiert werden, solange L die Regionen und Grenzen
geordnet von links nach rechts enthält.
4
Algorithmus1 :
• Die Eingabe ist eine Menge von n Sites mit eindeutigem untersten
Element.
• Die Ausgabe sind die Bisektoren und die Knoten von V ∗ .
• Die Datenstruktur Q ist eine P riority − Queue von Punkten in der
Ebene. Die lexikographisch sortierten Punkte enthalten jeweils eine
Site, oder einen Knoten. Q kann mehrere Ereignisse für den gleichen
Punkt enthalten. Die Reihenfolge dieser gleichzeitigen Ereignisse ist
unwichtig.
• Die Datenstruktur L speichert die aktuell von der Sweepline geschnittenen Regionen und Grenzen lexikographisch in eine Folge (r1 , c1 ,
r2 , c2 , · · · , rk , ck ) . Beachte, dass eine Region mehr als einmal
auftauchen kann.
1. inizialisiere Q mit allen Sites
2. p ← extractM in(Q)
3. L ← die Liste, die Rp enthält
4. while Q nicht leer begin
5. p ← extractM in(Q)
6. case
7. p ist Site:
8. finde ein Halteereignis einer Region Rq , die p enthält auf der Liste L
∗
9. erzeuge einen Bisektor Bpq
− , R∗ , C + , R∗ , ... anstatt R∗
10. verändere die Liste L so, dass sie ..., Rq∗ , Cpq
q
p
pq
q
enthält.
− und C + mit benachbarten Grenzen in
11. füge die Schnitte zwischen Cpq
pq
Q ein
12. p ist ein Schnitt:
13. Sei p der Schnitt von den Grenzen Cpr und Crs .
∗
14. erzeuge einen Bisektor Bqs
− oder C + geeignet enthält,
15. verändere die Liste L so, dass sie Cqs =Cqs
qs
anstelle von Cqr , Rr∗ , Crs .
5
16. lösche in Q alle Schnitte zwischen Cqs und ihren Nachbarn
17. füge alle Schnitte zwischen Cqs und ihren Nachbarn in Q ein
∗ , B∗ , B∗
18. markiere p als einen Knoten und als einen Endpunkt von Bqr
rs
qs
19. end
Theorem 2.3.2. Man kann Algorithmus1 so implementieren, dass er das
transformierte Voronoi-Diagramm mit einer Laufzeit von O(n log(n)) und
einem Speicherplatzbedarf von O(n) erstellt.
Beweis. Die while-Schleife wird O(n)-mal durchlaufen und erstellt dabei
O(n) Bisektoren. Q enthält maximal zwei Einträge je Grenze und einen pro
Site, also O(n). Da man Q als Heap implementieren kann, brauchen die verwendeten Operationen EIN F Ü GEN , LÖSCHEN und EXT RACT M IN
nur eine Laufzeit von O(log(n)). L enthält ebenfalls O(n) Einträge, weil ein
Bisektor nur einmal von einer horizontalen Linie geschnitten werden kann. L
kann man als AV L−Baum implementieren und bekommt für die benötigten
Operationen LÖSCHEN , EIN F Ü GEN und SU CHEN (in Zeile 10) eine
Laufzeit von O(log(n)). Folglich braucht man für den gesamten Algorithmus
eine Laufzeit von O(n log(n)).
Theorem 2.3.3. Nach leichten Modifikationen, kann Algorithmus1 sofort
das nicht-transformierte Voronoi-Diagramm mit einer Laufzeit von O(n log(n))
und einem Speicherplatzbedarf von O(n) ausgeben.
Beweis. Die Sites in V und V ∗ sind identisch und man bekommen die Kanten
auch hier, indem man die Bisektoren erzeugt und diese dann mit den Endpunkten der korrespondierenden Kanten markiert. Die Datenstrukturen und
Operationen bleiben bis auf kleine Unterschiede die Gleichen. Somit kann
dieser Algorithmus ebenfalls mit einer Laufzeit von O(n log(n)) implementiert werden.
6
3
Linien-Segment-Sites
3.1
Allgemeines
Der Algorithmus1 kann nach Modifikationen auch das Voronoi-Diagramm
von Linien-Segment-Sites berechnen. Die Idee ist die Gleiche, und somit
sind die Sites nach der Transformation die untersten Punkte ihrer Regionen. Natürlich wird der Algorithmus und das Voronoi-Diagramm dadurch
etwas komplexer. Leider verhält sich die Transformation nicht so schön.
Die Bisektoren zweier disjunkter Segmente bilden eine Kurve und können
aus bis zu sieben Bereichen bestehen. Jeder, ein Teil einer Geraden, oder
einer Hyperbel. Schlecht ist, dass der Bisektor zweier Segmente mit dem
gleichen Endpunkt nicht eindimensional sein muss, solange eine zweidimensioale Region existiert, für welche dieser Endpunkt, der näheste Punkt zu
beiden Sites darstellt.
Durch eine andere Definition des VD kann die Situation vereinfacht werden.
Wir brauchen, dass jedes Segment in drei Sites aufgeteilt werden kann. In
die beiden Endpunkte und das Liniensegment selbst. Dann unterscheiden
wir, ob die Endpunkte des Segments, oder das Segment selber näher sind.
Die Konsequenz ist, dass der Bisektor zwischen zwei Sites immer eine
Linie, oder eine Parabel darstellt.
3.2
Das Voronoi-Diagramm für Linien-Segment-Sites
Die Endpunkte einer Linien-Segment-Site werden wie Punkt-Sites behandelt. Ein Schnitt zweier Linien-Segment-Sites ist nur in den Endpunkten
möglich. Die Distanz eines Punktes z zu einer Site p (also dp (z)), wird definiert als die euklidische Distanz zwischen z und dem Punkt auf p, der am
nähesten zu z liegt. Wir definieren auch noch eine tangenziale Kontaktregion
tp , die im Falle einer Punkt-Site der R2 ist und bei einer Linien-Segment-Site
das Band, welches entsteht, wenn man die beiden Endpunkte der Site mit
je einer Geraden schneidet, die orthogonal zum Segment verläuft. Nun kann
man die Distanz d(z) analog zum vorherigen Abschnitt definieren, mit dem
Unterschied, dass z in tp liegen muss.
Für die Definitionen von Bisektoren, Voronoi-Regionen und des VoronoiDiagramms, müssen die relevanten Punkte ebenfalls in den tangenzialen
Kontaktregionen liegen.
Mögliche Formen von Bisektoren (für p, q ∈ S):
• p, q Punkte ⇒ Bpq ist eine Halbline zwischen den Punkten.
• p Endpunkt von Linien-Segment q ⇒ Bpq ist die Linie, die senkrecht
zu q und durch p geht.
7
• p Punkt und q ein nicht-inzidentes Linien-Segment ⇒ Bpq ist Bereich
einer Parabel.
• p innerer Punkt von Linien-Segment q ⇒ Bpq ist leer.
• p, q Linien-Segmente ⇒ Bpq ist:
– ein Punkt
– ein Segment
– leer, wenn tp ∩ tq = ∅
– wenn p und q co − linear mit gleichem Endpunkt, die senkrechte
Gerade durch diesen Endpunkt.
Die Voronoi-Region muss nicht konvex sein, es reicht wenn sie sternförmig
um die Site verläuft. D.h., dass jede Gerade, die einen beliebigen Punkt auf
der Site mit einem beliebigen Punkt in der Region verbindet, komplett in
der Voronoi-Region liegt und die Grenzen nicht schneidet. Knoten und Kanten werden analog zu Abschnitt 2 definiert, mit der Ausnahme, dass auch
hier ein Knoten in tp liegen muss. Die Kanten sind eindimensional.
3.3
Die Transformation ∗
Die Transformation bewirkt das Gleiche und ist fast identisch definiert, wie
die Transformation in Abschnitt 2. Sie ist überall 1 : 1, ausser bei vertikalen Segmenten unterhalb von p, bei denen alle Punkte auf p transformiert
werden.
Nun untersuchen wir die transformierten Bisektoren:
• p, q Punkte ⇒ ∗p (Bpq ) ist, wenn q:
– nicht horizontal, eine Hyperbel.
– horizontal, eine vertikale Halblinie, wobei deren tiefster Punkt
auf der höhe von py liegt.
• p Endpunkt von Linien-Segment q ⇒ ∗p (Bpq ) besteht, wenn q:
– nicht horizontal, aus zwei Halbgeraden mit Endpunkt p. Die eine
geht nach links-oben und die andere nach rechts-oben.
– horizontal, aus einer vertikalen Halblinie mit Endpunkt p, weil
die vertikale Halblinie unter p komplett auf den Punkt p transformiert wird.
• p Punkt und q ein nicht-inzidentes Linien-Segment ⇒ ∗p (Bpq ) ist, wenn
q:
8
– nicht horizontal, eine Parabel.
– horizontal und qy > py , das horizontale Liniensegment q.
• p, q Linien-Segmente ⇒ ∗p (Bpq ) ist, wenn:
– Bpq ein Segment ist, auch ein Segment.
– p und q horizontal mit gleichem Endpunkt, die vertikale Halblinie
mit Endpunkt im Schnitt von p und q, weil die vertikale Halblinie
unterhalb des Punktes komplett auf diesen transformiert wird.
Die Kanten von V ∗ können somit Teile von Linien, Parabeln und Hyperbeln sein. Für die Einteilung der transformierten Bisektoren in C − und C + ,
gehen wir immer von dem niedrigsten Punkt der Site aus und definieren den
Rest wie in Abschnitt 2.
Wir haben schon bei der Hilfstransformation ∗p gesehen, dass sie bei
vertikalen Geraden untehalb der Site daran scheitert 1 : 1 zu sein, weil diese
in einen einzigen Punkt p transformiert werden. Bei der Transformation ∗
gilt dieser kritische Fall auch und zusätzlich noch die weiteren Fälle:
• Punkt-Site z ist der untere Endpunkt einer Linien-Segment-Site.
• Kein Linien-Segment hat z als oberen Endpunkt.
• Es existiert eine Site p, deren y-Koordinate strikt unter zy ist, dann
schneidet die vertikale Halblinie unter p einige Punkte von V an der
Grenze von Rz . Dieser Punkt und z selbst, werden beide auf den gleichen Punkt nämlich z transformiert. Beachte, dass z in V sein muss,
solange z auf dem Bisektor liegt, der durch die Punkt-Site z und der
z-berührenden Linien-Segment-Site definiert wird.
3.4
Der Algorithmus für V ∗ und V
Wie wir bereists gesehen haben, gibt es bestimmte Situationen, in denen
V in V ∗ nicht 1 : 1 sind und sich somit topologisch unterscheiden. Es ist
einfacher mit einer veränderten Variante von Algorithmus 1, V und seine
Unterschiede zu V ∗ zu errechnen, als sofort V ∗ zu bestimmen.
Im Gegensatz zu Algorithmus 1 bearbeiten wir nun alle Ereignisse, die
mit einem Punkt in der Ebene verknüpft sind, auf einmal.
Die möglichen Ereignisse sind Schnitte von Grenzen, neue Sites, oder
beides. Wenn das Ereignis eine neue Site ist, dann gibt es zwei Fälle, die sich
darin unterscheiden, ob die Site im inneren einer anderen Voronoi-Region
liegt, oder auf einer Grenze.
Wir bearbeiten eine Linien-Segment-Site, wenn wir auf ihren lexikographisch letzten Endpunkt stossen. Folglich teilen wir die Segmente, die zu
einer Punkt-Site gehören, in diese, für die die Punkt-Site unterhalb des Endpunktes liegt und jene, bei denen die Punkt-Site dem Endpunkt liegt.
9
Nun könen wir für die einzelen Fälle analysieren, welche Aktionen bei
den verschiedenen Ereignissen ausgeführt werden:
• Wenn das Ereignis an einem Punkt p einfach nur der Schnitt von
Grenzen, oder eine isolierte Punkt-Site ist, dann ist die nötige Aktion
analog zu Algorithmus 1.
• Wenn p eine Punkt-Site und oberer Endpunkt eines Linien-Segmentes
ist, dann liegt p in Inneren der Voronoi-Region des Segmentes und der
Bisektor muss zwischen Punkt und Segment erstellt werden.
• Wenn p nun eine Punkt-Site und der untere Endpunkt eines Segments
ist und im Inneren einer Voronoi-Region um eine Site q liegt, dann
müssen zwei Bisektoren erstellt werden.
1. zwischen p und q.
2. zwischen p und der Segment-Site, mit der p verbunden ist.
Beachte, dass ∗ zwei Punkte von V auf p abbildet.
• Wenn p der untere Endpunkt mehrerer Segmente ist, und in der Region
um Site q liegt, dann ist die Situation ähnlich. Die nötigen Bisektoren
sind zwischen den Sites p und q, zwischen p und dem nächsten Segment, das gegen dem Uhrzeigersinn liegt und zwischen der Site p und
dem nächsten Segment, das im Uhrzeigersinn liegt.
• In den übrigen Fällen liegt die Punkt-Site p auf einer Grenze.
– Wenn p der obere Endpunkt von mindestens zwei Segmenten ist,
dann liegt p auf der Grenze die jedes benachbarte Paar von Segmenten trennt. Beachte, dass diese Grenzen erstellt wurden, bevor
wir p erreichen.
– Wenn p auf der Grenze zwischen zwei Sites q und r liegt und mindestens eines von beiden kein Segment ist, das mit p verbunden
ist, dann sind die nötigen Bisektoren ähnlich zu den vorherigen
Fällen. Hier ist es möglich, dass Knoten in V ohne Verbindungskante auf den selben Punkt in V ∗ abgebildet werden: der Mittelpunkt c eines Kreises, der auf seinem Rand die Punkte p, q, r hat
ist immer ein Knoten in V und es kann auch p ein Knoten von V
sein.
Theorem 3.4.1. Sei S eine Menge von Punkt- und Linien-Segment-Sites.
Dann können V , oder V ∗ mit einer Laufzeit von O(n log(n)) und einem
Speicherplatzbedarf von O(n) berechnet werden.
Beweis. Analog zu Abschnitt 2.
10
4
Gewichtete Punkt-Sites
Jede Site ist nun wieder eine Punkt-Site, die aber mit einem nichtnegativen Gewicht verknüpft ist. Die Logik hinter dem Voronoi-Diagramm ist die
Gleiche, nur benutzt man hier eine andere Metrik. Sie wird definiert, als die
Summe des Gewichtes und der euklidischen Distanz.
Die Unterschiede zum den VD aus Abschnitt 2 sind relativ klein. Die
Bisektoren sind hier teilweise Bereiche von Hyperbeln und die Regionen
einer Site können leer sein, wenn das Gewicht der Site grösser ist, als die
gewichtete Distanz von einigen anderen Sites.
Der Algorithmus hat zwei generelle Unterschiede:
1. Die Abbildung ∗ fixiert die Sites nicht mehr, sondern bildet sie nach
oben in der Länge ihres Gewichtes ab. Die Definition dazu lautet:
∀z ∈ R2 : ∗(z) = (x , y+ min(dp (z) + wp ) mit wp Gewicht der Site p.
2. Die Region einer Site p kann leer sein, wenn ∗(p)y < py + wp und kann
getestet werden, sobald p durch die Sweepline gefunden wird.
Insgesamt kann der Sweepline-Algorithmus, also wegen seiner guten
Lufzeit und seiner numerischen Stabilität sehr gut für angewandte Probleme benutzt und implementiert werden.
5
Schlussfolgerung
Der Algorithmus aus diesem Paper ist sehr effizient, doch bevor er implementiert wird müssen das Stabilitätsverhalten und einige Spezialfälle gesondert
betrachtet werden.
Der Sweepline-Algorithmus muss Bisektoren erstellen und Schnitte von
Linien bestimmen, genau wie jeder andere VD-Algorithmus. Zusätzlich wird
im Sweepline-Algorithmus noch die Transformation verarbeitet, welche die
numerische Stabilität gewährleistet. Denn solange die Transformation mathematisch gesehen 1 : 1 ist, kann sie entfernte Punkte sehr nah zusammen
abbilden.
Die meisten instabilen Fälle von ∗ können durch das Ausführen von
geometrischen Operationen auf untransformierte Objekte beseitigt werden.
11
Herunterladen