Delaunay-Zerlegungen und Voronoi

Werbung
KAPITEL 4
Delaunay-Zerlegungen und Voronoi-Diagramme
1. Definitionen und Eigenschaften
Wir betrachten im Folgenden immer eine endliche Menge S von
Punkte in der Ebene, deren Elemente wir zur Unterscheidung von
gewöhnlichen Punkten als Orte bezeichnen.
Definition 2. Die Voronoi-Zelle eines Ortes p ist die Menge aller
Punkte der Ebene, die p näher liegen als jedem anderen Ort. Die Menge
aller Voronoi-Zellen zu Orten aus S heißt das Voronoi-Diagramm zu
S.
Der Fall, dass alle Orte auf einer gemeinsamen Geraden liegen, ist
speziell. Dann, und nur dann, sind nämlich die Ränder benachbarter
Zellen immer Geraden und die Zellen selbst entweder unendliche Streifen oder Halbebenen. Wir nehmen daher ab jetzt immer an, dass nicht
sämtliche Orte auf einer Geraden liegen.
In allen anderen Fällen ist der gemeinsame Rand zweier benachbarter Voronoi-Zellen entweder eine Strecke oder eine Halbgerade. Der
Graph, dessen Knoten diejenigen Punkte sind, die zum Rand mindestens dreier Zellen gehören, und deren Kanten die gemeinsamen Ränder
zweier Zellen sind, ist zusammenhängend. Alle endlichen Voronoi-Zellen
sind konvexe Polygone. Wir werden der Einfachheit halber auch die
aus den Ecken, Kanten und Zellen gebildete verallgemeinerte Karte als
Voronoi-Diagramm bezeichnen.
43
44
4. DELAUNAY-ZERLEGUNGEN UND VORONOI-DIAGRAMME
Aufgrund der Definition könnte man zunächst annehmen, dass die
Anzahl der Kanten eines Voronoi-Diagramms quadratisch mit der Anzahl der Orte wachsen kann. Dies ist aber nicht der Fall:
Satz 6. Ein Voronoi-Diagramm mit n ≥ 3 Orten enthält maximal
2n − 5 Knoten und 3n − 6 Kanten.
Beweis. Wir möchten die Euler-Formel anwenden, was aber wegen
der Existenz von unbegrenzten Flächen und Kanten nicht direkt geht.
Daher nehmen wir an, daß die als Halbgeraden realisierten Kanten
einen zweiten gemeinsamen Endpunkt im Unendlichen haben. Ist v die
Anzahl der Knoten und e die Anzahl der Ecken des Diagramms, so
ergibt sich dann
(v + 1) − e + n = 2.
Jede Kante grenzt nun auch an zwei Knoten. Zählen wir also die Grade
der einzelnen Knoten zusammen, so erhalten wir genau 2e. Andererseits
haben alle Knoten, auch der im Unendlichen, mindestens den Grad 3.
Es folgt
2e ≥ 3(v + 1)
und damit
6 = 3(v + 1) − 3e + 3n ≤ 3n − e,
also
e ≤ 3n − 6
wie behauptet. Weiter haben wir dann auch
v = 1 − n + e ≤ 1 − n + 3n − 6 = 2n − 5.
Wir geben nun noch eine nützliche Charakterisierung für die Knoten und Kanten eines Voronoi-Diagramms an. Dazu sei für einen beliebigen Punkt p in der Ebene K(p) beziehungsweise KS (p) der größte
Kreis mit Mittelpunkt p, dessen Inneres keinen Ort aus S enthält.
1. DEFINITIONEN UND EIGENSCHAFTEN
45
p
K(p)
http://geonext.de
Lemma 4. Für das Voronoi-Diagramm einer Menge S von Orten
der Ebene gilt:
(1) Ein Punkt p ist genau dann ein Knoten des Diagramms, wenn
K(p) mindestens drei Orte enthält.
(2) Ein Punkt p liegt genau dann im Inneren einer Kante des Diagramms, wenn K(p) genau zwei Orte enthält.
Beweis.
(1) Enthält K(p) Orte s1 , . . . , sm mit m ≥ 3, so ist p von jedem dieser Orte gleich weit entfernt, während all anderen weiter weg liegen. Daher muss p auf den gemeinsamen Rand der
Voronoi-Zellen von s1 bis sm liegen. Ist umgekehrt p ein Knoten des Voronoi-Diagramms, so liegt er im gemeinsamen Rand
von mindestens drei Zellen und ist mithin von mindestens drei
Orten s1 , . . . , s3 gleich weit entfernt. Gäbe es einen Ort im Inneren des Kreises um p, auf dem diese drei Orte liegen, so läge
dieser ja näher an p und daher wäre p im Widerspruch zur
Annahme kein gemeinsamer Randpunkt der Zellen von s1 bis
s3 . Dieser Kreis ist also leer und daher identisch mit K(p).
(2) Enthält K(p) genau zwei Orte s1 und s2 , so ist wieder p gleich
weit von beiden entfernt, während alle anderen Orte weiter
46
4. DELAUNAY-ZERLEGUNGEN UND VORONOI-DIAGRAMME
weg liegen. Es muss also p auf dem gemeinsamen Rand der
Zellen von s1 und s2 liegen und kann auch kein Knoten des
Diagramms sein. Es bleibt nur die Möglichkeit, dass p im Inneren der Kante liegt, welche die Zellen von s1 und s2 trennt.
Liegt umgekehrt p auf einer Kante des Diagramms, so gibt es
wieder Orte s1 und s2 , so dass p zum gemeinsamen Rand der
zu diesen gehörenden Zellen gehört. Der Kreis um p, auf dem
s1 und s2 liegen, kann keine weiteren Orte im Inneren enthalten, ist also identisch mit K(p). Da aber p kein Knoten des
Diagramms ist, können auf K(p) selbst auch keine weiteren
Orte liegen.
Es gibt eine Reihe interessanter Algorithmen zur direkten Berechnung von Voronoi-Diagrammen. Hier soll allerdings eine indirekte Methode vorgestellt werden, die auf den eng verwandten Delaunay-Zerlegungen basiert. Wir gehen wieder von einer Menge S von Orten in der
Ebene aus.
Definition 3. Ein Kreis K heißt leer , wenn sein Inneres keine
Orte enthält. Geht ein leerer Kreis durch Orte s1 , . . . , sk mit k ≥ 3,
so heißt das eindeutig bestimmte konvexe Polygon P mit den Ecken
s1 bis sk ein Delaunay-Polygon bezüglich der Menge S. Der Kreis K
heißt der Umkreis von P . Die Menge aller Delaunay-Polygone heißt die
Delaunay-Zerlegung zu S.
K
P
Bei der Analyse der Eigenschaften von Delaunay-Zerlegungen nehmen wir häufig Winkelbetrachtungen an Dreiecken mit vorgegebenen
Umkreises vor. Dazu ist die folgende allgemeine Version des aus der
Schule bekannten Satzes von Tales sehr nützlich:
1. DEFINITIONEN UND EIGENSCHAFTEN
47
Satz 7. Ist ab eine Sekante eines Kreises K mit Mittelpunkt s und
ist x ein weiterer Punkt auf K, so gilt
]axb =
]asb
,
2
wobei der Winkel ]asb jeweils an der von x abgewandten Seite gemessen wird.
Beweisidee. Man benutzt die Tatsache, dass die Summen der Innenwinkel in den Dreiecken asb und axb jeweils π betragen und dass
gleichschenklige Dreiecke auch gleiche Winkel an den Schenkelenden
besitzen. Es sind zwei Fälle zu unterscheiden, je nachdem, ob das Dreieck axb den Mittelpunkt s enthält oder nicht.
x
x
b
a
s
a
s
b
Korollar 1. Ist ab Sekante eines Kreises K und sind x und y
Punkte auf K sowie i ein Punkt innerhalb und o ein Punkt außerhalb
von K, so gilt
]aib > ]axb = ]ayb > ]aob.
Beweisidee. Die Gleichheit von ]axb und ]ayb folgt sofort aus
dem Satz des Tales. Für die übrigen Beziehungen wähle man jeweils
einen Punkt z auf K so dass das Dreieck aib im Dreieck azb beziehungsweise das Dreieck azb im Dreieck aob enthalten ist.
Korollar 2. Es sei ab eine Sekante eines Kreises K und g die
Gerade durch a und b. Es sei weiter x ein Punkt der nicht auf g liegt
sowie A der Teil der von K begrenzten abgeschlossenen Kreisscheibe
auf derselben Seite von g wie x. Es sei entsprechend B der Teil der
vom Umkreis zu abx begrenzten abgeschlossenen Kreisscheibe, der auf
48
4. DELAUNAY-ZERLEGUNGEN UND VORONOI-DIAGRAMME
derselben Seite von g wie x liegt. Dann gilt
B = A,
B ⊂ A,
B ⊃ A,
falls x auf K liegt,
falls x innerhalb von K liegt,
falls x ausserhalb von K liegt.
Beweisidee. Nach Korollar 1 besteht A gerade aus allen Punkten
p mit der Eigenschaft
π ≥ ]apb ≥ ]aqb,
sofern q ein Punkt in K ∩ A ist. Eine analoge Beziehung gilt für B. Wir sollten uns nun zunächst fragen, ob eine Delaunay-Zerlegung
wirklich eine Zerlegung, nämlich wohl eines gewissen Gebietes der Ebene, ist, und wenn ja, welches Gebiet sie eigentlich zerlegt. Zunächst eine
einfache Beobachtung:
Proposition 1. Die Umkreismittelpunkte der Delaunay-Polygone
zu einer Menge S sind genau die Knoten des zu S gehörenden VoronoiDiagramms.
Beweis. Das ist genau Teil 1 der Aussage von Lemma 4.
Wenn laut Proposition 1 die Delaunay-Polygone in einer ein-eindeutigen Beziehung zu den Knoten des Voronoi-Diagramms stehen, so
ist es naheliegend zu fragen, ob die Kanten und Flächen des VoronoiDiagramms ähnliche Entsprechungen haben. Dies ist tatsächlich der
Fall. Hierzu betrachten wir eine Voronoi-Kante k mit Endpunkten
a und b, welche die Voronoi-Zellen zweier Orte s und t voneinander
trennt. Wir stellen uns weiter einen Punkt p vor, der entlang k von a
nach b wandert. Nach Lemma 4 ist der Kreis K(p) an jeder Stelle leer,
geht aber immer durch s und t. Daher müssen die Delaunay-Polygone
mit Umkreisen K(a) und K(b) benachbart sein und eine gemeinsame
Kante mit Eckpunkten s und t besitzen.
1. DEFINITIONEN UND EIGENSCHAFTEN
49
Lassen wir nun p entlang einer unbeschränkten Voronoi-Kante mit
Anfangspunkt a wandern, so wird K(p) einfach immer größer. Die Kante st gehört dementsprechend nur zu einem Voronoi-Polygon, nämlich
dem mit Umkreismittelpunkt a. Dies korrespondiert mit der Tatsache,
dass in einem solchen Fall keine Orte mehr auf der a gegenüber liegenden Seite der durch s und t gehenden Geraden liegen.
Wir wissen also bisher, dass die inneren Flächen und Kanten der
Delaunay-Zerlegung genau zu den Ecken und Kanten des VoronoiDiagramms korrespondieren. Die Ecken der Delaunay-Zerlegung sind
ja nach Definition die Elemente von S und korrespondieren daher zu
den Voronoi-Zellen. Wir erhalten demnach die Delaunay-Zerlegung aus
dem Voronoi-Diagramm, indem wir je zwei Orte verbinden, wenn ihre
Voronoi-Zellen eine gemeinsame Kante haben. Dies definiert eine Karte,
deren Flächen genau die Delaunay-Polygone sind. Um sicher zu gehen,
dass wir tatsächlich eine Karte erhalten, müssen wir allerdings noch
beweisen, dass sich zwei Delaunay-Kanten tatsächlich nicht schneiden.
Lemma 5. Die Kanten der Delaunay-Polygone zu einer Menge S
schneiden sich nicht.
Beweis. Es seien ab und cd zwei sich schneidende Delaunay-Kanten
und s beziehungsweise t die Umkreismittelpunkte jeweils dazugehöriger Delaunay-Polygone, die notwendigerweise verschieden sein müssen.
Es seien dementsprechend K(s) und K(t) die jeweiligen Umkreise. Die
Strecken as und bs liegen in der zu s gehörenden Voronoi-Zelle. Ebenso liegen ct und dt in der zu t gehörenden Zelle. Da c und d nicht
in K(s) und damit insbesondere nicht im Dreieck abs liegen können,
muss die Strecke cd das Dreieck abs durchschneiden. Umgekehrt muss
50
4. DELAUNAY-ZERLEGUNGEN UND VORONOI-DIAGRAMME
die Strecke ab das Dreieck cdt durchschneiden. Dies beides zusammen
geht nur, wenn eine der Strecken as oder bs eine der Strecken ct oder dt
schneidet. Der Schnittpunkt müsste sich aber nach dem oben Gesagten
sowohl in der Voronoi-Zelle von s als auch in der von t befinden, was
nicht geht.
c
b
K(s)
K(t)
t
a
s
d
Umgekehrt erhalten wir das Voronoi-Diagramm aus der DelaunayZerlegung, indem wir an jedem Umkreismittelpunkt eines DelaunayPolygons einen Knoten setzen und zwei Knoten verbinden, wenn die
korrespondierenden Delaunay-Polygone eine gemeinsame Kante haben.
Die unbeschränkten Kanten des Voronoi-Diagramms erhalten wir, indem wir zu jeder Kante s der Delaunay-Zerlegung, die nur zu einem
Polygon gehört, vom entsprechenden Umkreismittelpunkt aus einen
Strahl konstruieren, der die durch k definierte Gerade senkrecht schneidet.
Man sagt auch: die Delaunay-Zerlegung und das Voronoi-Diagramm
zu einer Menge S sind dual zueinander.
1. DEFINITIONEN UND EIGENSCHAFTEN
51
Es bleibt noch die Frage zu klären, wie das Gebiet aussieht, welches
die Delaunay-Zerlegung zerlegt. Wir haben gesehen, dass dessen Rand
von Kanten gebildet werden, die jeweils zwei Orte aus S verbinden und
die Eigenschaft haben, dass alle weiteren Orte auf einer Seite der durch
die jeweilige Kante definierten Geraden oder aber auf dieser Geraden
liegen. Wie man sich überlegen kann, bilden alle diese Kanten zusammen den Rand eines konvexen Polygons, dass auch die konvexe Hülle
der Menge S genannt wird. Die konvexe Hülle ist das kleinste konvexe
Polygon, das alle Punkte aus S enthält. Wir halten fest:
Satz 8. Die Delaunay-Zerlegung und das Voronoi-Diagramm zu einer Menge S sind dual zueinander. Die Menge der Delaunay-Polygone
bildet eine Zerlegung der konvexen Hülle der Menge S.
Für den im folgenden Abschnitt vorgestellten Konstruktionsalgorithmus wie auch für einige der Anwendungen ist es nützlich, die Delaunay-Zerlegung zu einer Menge S in einem etwas allgemeineren Rahmen
zu stellen. Hierzu führen wir zunächst den Begriff einer Triangulierung
von S ein.
Definition 4. Eine Triangulierung einer endlichen Menge S ist
eine Karte mit Knotenmenge S, zu der keine weitere Kante hinzugefügt
werden kann, ohne Überschneidungen zu produzieren.
Es ist nicht schwer einzusehen, dass die Flächen einer Triangulierung tatsächlich Dreiecke sind und dass die Vereinigung aller inneren
Flächen gerade die konvexe Hülle von S überdeckt.
Eine Delaunay-Zerlegung ist nur dann eine Triangulierung, wenn nie
mehr als 3 Orte auf einem gemeinsamen leeren Kreis liegen. Man kann
aber natürlich aus einer Delaunay-Zerlegung leicht eine Triangulierung
gewinnen.
Definition 5. Jede Triangulierung, die aus einer Delaunay-Zerlegung durch beliebiges Triangulieren aller Delaunay-Polygone hervorgeht, heisst Delaunay-Triangulierung.
Delaunay-Triangulierungen lassen sich durch eine interessante lokale Eigenschaft charakterisieren:
Definition 6. Sind abc und abd benachbarte Dreiecke einer Triangulierung, so heißt die Kante ab illegal , wenn d im Inneren des Umkreises von abc liegt.
Die Definition ist offensichtlich symmetrisch: wenn d im Inneren des
Umkreises von abc liegt, so liegt auch c im Inneren des Umkreises von
abd. Nach Korollar 1 ist beides nämlich genau dann der Fall, wenn die
52
4. DELAUNAY-ZERLEGUNGEN UND VORONOI-DIAGRAMME
Summe der Innenwinkel an b und d größer als π ist. Dass eine DelaunayTriangulierung nie illegale Kanten enthält, folgt aus deren Definition.
Für die Umkehrung ist ein wenig zusätzliche Argumentation notwendig.
a
x
d
b
c
Satz 9. Eine Triangulierung einer endlichen Mengen S von Orten
in der Ebene ist genau dann eine Delaunay-Triangulierung, wenn alle
ihre Kanten legal sind.
Beweis. Es sei eine Triangulierung gegeben, die nur legale Kanten enthält, aber keine Delaunay-Triangulierung ist. Dann gibt es nach
Definition ein Dreieck abc der Triangulierung, dessen Umkreis K nicht
leer ist, also zum Beispiel einen Ort x ∈ S enthält. Wir nehmen an,
dass b und x auf gegenüberliegenden Seiten der durch ac verlaufenden
Geraden liegen. Die Kante ac ist nach Annahme legal, weswegen acx
keine Dreieck der Triangulierung sein kann. Das Dreieck abc und der
Ort x seien unter allen solchen Konfigurationen so gewählt, dass der
Winkel ]axc minimal wird. Es sei nun acd das entlang der Kante ac
an abc angrenzende Dreieck. Der Umkreis von acd enthält den Teil des
Inneren von K auf derselben Seite von ac wie d, also insbesondere auch
den Punkt x. Wir nehmen an, dass die Punkte c und x auf verschiedenen Seiten der Kante ad liegen. Dann ist aber im Widerspruch zur
Wahl von abc und x der Winkel ]axd größer als der Winkel ]axc. Ist ac eine illegale Kante zwischen Dreiecken abc und acd, so muss
insbesondere das Viereck abcd konvex sein. Durch Flippen“ der Kante
”
ac, also das Ersetzen der Dreiecke abc und acd durch die Dreiecke abd
und bcd entsteht eine neue legale Kante bd. Dies ist sofort klar, denn
nach Korollar 1 zum Satz des Tales ist, wenn ac illegal ist, die Summe
der Innenwinkel an b und d im Viereck abcd größer als π und daher die
Summe der Innenwinkel an a und c kleiner als π.
1. DEFINITIONEN UND EIGENSCHAFTEN
a
b
a
d
c
b
53
d
c
Man könnte sich also vorstellen, durch fortgesetztes Flippen illegaler Kanten aus einer beliebigen Triangulierung der Menge S eine
Delaunay-Triangulierung zu machen. Es könnte aber sein, dass eine
einmal geflippte Kante nach einigen weiteren Operationen wieder illegal wird. Wir müssen uns also zunächst davon überzeugen, dass der
Prozess nach endlich vielen Schritten abbricht. Da es zu einer endlichen Menge S nur endlich viele verschiedene Triangulierungen gibt,
reicht es zu zeigen, dass man keine Triangulierung mehr als einmal als
Zwischenergebnis erhalten kann.
Für eine Triangulierung T einer Menge S, die genau m Dreiecke
enthält, sei A(T ) = (α1 , . . . , α3m ) die nach Größe sortierte Liste aller
Innenwinkel. Für zwei Triangulierungen T und T 0 vergleicht man die
0
Listen A(T ) und A(T 0 ) = (α10 . . . , α3m
) jeweils lexikographisch, das
heisst, man schreibt beispielsweise A(T 0 ) > A(T ), falls es ein i mit
αi0 > αi und αj0 = αj für alle j < i gibt. Wir zeigen dann, dass man
durch Flippen einer illegalen Kante in T eine Triangulierung T 0 mit
A(T 0 ) > A(T ) erhält.
Lemma 6. Es seien abc und acd zwei Dreiecke mit gemeinsamer
illegaler Kante ac. Es sei α das Minimum aller Innenwinkel an abc
und acd und entsprechend β das Minimum aller Innenwinkel an den
Dreiecken abd und bcd. Dann gilt β > α.
Beweisidee. Nach dem Korollar zum Satz des Thales ist die
Summe der Innenwinkel an b und d im Viereck abcd größer als π. Andererseits ist die Winkelsumme im Dreieck abc gleich π. Dies bedeutet,
dass der Winkel an d im Dreieck acd sogar größer ist als die Summe der
Innenwinkel an a und c im Dreieck abc. Dieser Winkel kann also nicht
minimaler Innenwinkel im Dreieckspaar abc und acd sein. Dasselbe gilt
mit einem symmetrischen Argument für den Winkel an b im Dreieck
abc. Durch mehrfaches Anwenden des Korollars sieht man weiter, dass
jeder Winkel an der Diagonalen bd größer als jeweils ein Winkel an
54
4. DELAUNAY-ZERLEGUNGEN UND VORONOI-DIAGRAMME
der Diagonalen ac ist, nämlich dem, welcher im neuen Dreieckspaar
derselben Kante gegenüberliegt wie er selbst im alten.
Aus Lemma 6 folgt sofort, dass durch Flippen einer illegalen Kante einer Triangulierung T eine Triangulierung T 0 mit A(T 0 ) > A(T )
bezüglich der lexikographischen Ordnung entsteht. Mit einem analogen
Argument sieht man, dass jede Delaunay-Triangulierung T zur Menge
S denselben minimalen Innenwinkel besitzt. Da nach Satz 9 jede andere Triangulierung illegale Kante enthält, erhält man durch fortgesetzes
Flippen in endlichen vielen Schritten aus einer beliebigen Triangulierung eine Delaunay-Triangulierung. Im übrigen maximiert eine solche
den minimalen auftretenden Innenwinkel.
Eine solches Vorgehen ist sicher nicht laufzeitoptimal, dient aber als
Grundidee für den im nächsten Abschnitt vorgestellten Algorithmus.
2. Algorithmen
Es soll nun aus der Flip-Idee ein effizienter Algorithmus zur schrittweisen Berechnung von Delaunay-Triangulierungen entwickelt werden.
Zunächst stellen wir uns vor, eine Delaunay-Triangulierung T zur Menge S sei bereits berechnet und ein weiterer Ort p liege in der konvexen
Hülle von S. Dann liegt p entweder in einem Dreieck abc oder auf einer
Kante ab von T . Eine Triangulierung T0 zur Menge S ∪ {p} entsteht
im ersten Fall ganz einfach, indem man das Dreieck abc entfernt und
durch die drei neuen Dreiecke apb, bpc und cpa ersetzt. Im zweiten
Fall seien abc und abd die ab enthaltenden Dreiecke. Dann ersetze man
diese durch die Dreiecke apc, cpb, bpd und dpa. Es ist an dieser Stelle
noch nicht klar, wie man das Dreieck abc beziehungsweise die Kante ab
am geschicktesten findet. Wir nehmen zunächst einfach an, dass dies
hinreichend effizient möglich ist.
c
b
c
p
a
p
b
d
a
Einige der alten und neuen Kanten könnten nun bezüglich S ∪ {p}
illegal sein und es gilt, die illegalen Kanten zu finden und durch fortgesetztes Flippen zu eliminieren. Da T eine Delaunay-Triangulierung war,
2. ALGORITHMEN
55
können illegale Kanten nur in Dreiecken vorkommen, welche p als Ecke
haben. Wir ignorieren zunächst Kanten mit Endpunkt p und konzentrieren uns auf die jeweils p gegenüberliegenden Kanten. Ist eine solche
illegal, so wird sie geflippt und die p gegenüberliegenden Kanten in den
zwei neuentstandenen Dreiecken wiederum auf Illegalität getestet und
gegebenenfalls geflippt. Dieser Vorgang wird fortgesetzt, bis alle p gegenüberliegenden Kanten in der dann entstandenen Triangulierung T 0
legal sind. Wegen Lemma 6 werden auf diese Weise nur endlich viele
Kanten geflippt. Wir behaupten, dass T 0 eine Delaunay-Triangulierung
zu S ∪ {p} ist.
Dazu benutzen wir das folgende geometrische Hilfsmittel:
Lemma 7. Es sei a ein Punkt auf einem Kreis K und b ein Punkt
im Inneren von K. Dann gibt es einen Kreis K 0 durch a und b, so dass
die von K 0 berandete abgeschlossene Kreisscheibe außer a nur Punkte
im Inneren von K enthält.
Beweis. Es sei s der Kreismittelpunkt und c der zweite Endpunkt
der Sekante durch a und b. Es sei weiter s0 der Schnittpunkt der Strecke
as mit der Parallelen durch b zur Strecke cs. Wegen des Strahlensatzes liegen a und b auf einem Kreis K 0 mit Mittelpunkt s0 . Für einen
beliebigen Punkt x auf oder im Inneren von K 0 gilt
d(s, x) ≤ d(s, s0 ) + d(s0 , x) ≤ d(s, s0 ) + d(s0 , a) = d(s, a),
wobei d die Distanzfunktion ist. Die erste Ungleichung folgt aus der
Dreiecksungleichung, die zweite aus der Tatsache, dass a auf und x auf
oder im Inneren von K 0 liegt. Die Gleichung am Schluss gilt, weil s,
s0 und a auf einer Geraden liegen. Es folgt, dass die von K 0 berandete
abgeschlossene Kreisscheibe D0 ganz in der von K berandeten enthalten
ist.
K
K’
c
s
s’
x
a
b
56
4. DELAUNAY-ZERLEGUNGEN UND VORONOI-DIAGRAMME
Die erste Ungleichung wird nur dann zur Gleichung, wenn s0 auf
der Stecke sx liegt, und die zweite nur dann, wenn x auf K 0 liegt. Dies
beides zusammen ist nur für x = a erfüllt. Also liegt von allen Punkte
in D0 nur a auf K.
Aufgrund des Lemmas muss jede durch die oben beschriebene Prozedur neu erzeugte Kante eine Kante der Delaunay-Zerlegung zu S∪{p}
sein. Ist nämlich K der Umkreis eines Dreiecks D einer DelaunayTriangulierung zu S und liegt p im Inneren von K, so gibt es zu jeder Ecke x von D einen leeren Kreis bezüglich S, der durch x und p
und keine weiteren Orte aus S geht. Daraus folgt sofort, dass xp eine
Delaunay-Kante zu S ∪ {p} ist.
Betrachten wir nun die beim Einfügen von p erzeugten Kanten, so
liegt p im Umkreis des Dreiecks abc und, falls p auf der Kante ab liegt,
auch im Umkreis von abd. Deshalb sind ap, bp, cp und gegebenenfalls dp
nach dem obigen Argument Kanten jeder Delaunay-Triangulierung zu
S ∪ {p}. Wird beim anschließenden Flippen die Kante xy des Dreiecks
xyp als illegal erkannt, so liegt p im Inneren des Umkreises zum benachbarten Dreieck xyz und die geflippte Kante pz ist folglich ebenfalls in
jeder Delaunay-Triangulierung zu S ∪ {p} enthalten.
y
p
z
x
Es folgt, dass alle p enthaltenden Kanten in T 0 legal sind. Außerdem sind nach Abschluss der Prozedur alle p gegenüberliegenden
Kanten legal. Alle weiteren Kanten sind legal, weil T eine DelaunayTriangulierung zu S war. Folglich ist T 0 eine Delaunay-Triangulierung
zu S ∪ {p}.
Wenn S genau n Elemente hat, ist klar, dass zur Berechnung von
T 0 aus T höchstens n Kantenflips nötig sind. Wenn wir also sicherstellen könnten, dass jeder hinzugefügte Punkt in der konvexen Hülle der
schon betrachteten liegt, bekämen wir einen Algorithmus zur Berechnung einer Delaunay-Triangulierung für n Punkte, der mit insgesamt
O(n2 ) Flips auskommt.
2. ALGORITHMEN
57
Was sollte nun eigentlich passieren, wenn ein neuer Punkt p nicht
in der konvexen Hülle von S liegt? Es sei dann wieder T die berechnete Delaunay-Triangulierung zu S. Der Punkt p sollte zunächst mit
allen Orten a aus S verbunden werden, die von ihm aus sichtbar sind,
was bedeutet, dass sie mit p durch eine Strecke verbunden sind, die
keine Kante aus T schneidet. Alle so entstandenen Verbindungskanten
sind nämlich Delaunay-Kanten zur Menge S ∪ {p}. Die neuen Dreiecke
zusammen mit der alten Triangulierung bilden eine Triangulierung zur
Menge S ∪ {p}. Die p gegenüberliegenden Kanten der neuen Dreiecke
müssen wie gehabt auf Legalität geprüft und gegebenenfalls geflippt
werden. Dies wird fortgesetzt, bis alle p gegenüberliegenden Kanten
legal sind.
p
p
Es gibt nun eine Reihe von Möglichkeiten, die von p aus sichtbaren
Ecken ausfindig zu machen. Ein sehr nützlicher Trick besteht darin, eine
zusätzliche Menge X := {x1 , x2 , x3 } von Orten einzuführen, so dass das
durch diese gebildete Dreieck ganz S enthält. Statt S wird dann die
Menge S ∪ X trianguliert, wobei man mit dem Dreieck x1 x2 x3 beginnt.
Da die Orte aus X bezüglich S legale Kanten illegal machen könnten,
muss das Flipkriterium entsprechend angepasst werden.
Es sei jetzt i < n und T die berechnete Triangulierung zur Menge X ∪ {s1 , . . . , si−1 }. Wir klassifizieren die Kanten von T nach der
Anzahl ihrer Ecken aus X . Eine Kante heiße regulär , wenn keine, irregulär , wenn eine, und fest, wenn beide ihrer Endpunkte aus X sind.
Die festen Kanten können ignoriert werden, da sie immer nur zu einem
Dreieck gehören können. Sind in einen potentiellen Flip eine reguläre
und eine irreguläre Kante involviert, so wird immer der regulären der
Vorzug gegeben. Sind zwei irreguläre Kanten beteiligt, so wird immer
geflippt, das heisst, die den einzufügenden Punkt si enthaltende Kante
wird bevorzugt. Zwischen zwei regulären Kanten entscheidet das bisherige Kriterium. Geflippt werden kann grundsätzlich natürlich nur, wenn
zwei benachbarte Dreiecke zusammen ein konvexes Viereck bilden. Es
ist nicht schwer zu zeigen, dass auf diese Weise ein Ort si ausserhalb der
58
4. DELAUNAY-ZERLEGUNGEN UND VORONOI-DIAGRAMME
konvexen Hülle von {s1 , . . . , si−1 } mit allen für ihn sichtbaren Hüllenecken verbunden wird. Tatsächlich dient der Teil der Triangulierung
außerhalb der bisherigen konvexen Hülle nur dazu, unsere mutmaßlich
effiziente Methode zur Auffindung des si enthaltenden Dreiecks anwenden zu können.
x3
fest
irregulär
regulär
x1
x2
Es ist nun offensichtlich an der Zeit, diese dubiose Methode vorzustellen. Fast! Warum nämlich brauchen wir eigentlich eine besondere
Methode? Weiter oben haben wir die Anzahl der notwendigen Flips zur
iterativen Berechnung einer Delaunay-Triangulierung nach der Einfügemethode zu O(n2 ) abgeschätzt. Um diese Ordnung zu erreichen, wäre
es ja genug, all die linear vielen Dreiecke der bisherigen Triangulierung
zu testen. Andererseits wissen wir, dass für Triangulierungen der Ebene der durchschnittliche Eckengrad kleiner als 6 ist. Wenn wir also die
Punkte von S in zufälliger Reihenfolge einfügen, müssen wir im Schnitt
nur konstant viele Kanten flippen, kommen also insgesamt mit linear
vielen Flips aus. Es lohnt sich also, eine Lokalisierungsmethode zu finden, die für einen solchen randomisierten Einfügealgorithmus eine im
Durchschnitt bessere als quadratische Laufzeit erreicht.
Man kann tatsächlich eine durchschnittliche Laufzeit von O(n log n)
erreichen, indem man den bisherigen Konstruktionsverlauf in einer Datenstruktur, genauer, einem gerichteten azyklischen Graphen, festhält.
Zu Anfang besteht dieser nur aus einem Knoten für das Dreieck x1 x2 x3 .
Wird ein neuer Ort eingefügt, also Dreiecke der alten Triangulierung
durch Teildreiecke ersetzt, so führt man für diese neue Knoten ein und
lässt vom altem Dreieck aus jeweils eine Kante zu jedem Teildreieck
weisen. Bei einem Kantenflip führt man entsprechend Knoten für die
zwei neu entstehenden Dreiecke ein und verweist von beiden alten zu
beiden neuen Dreiecken. Die Senken des so entstehenden azyklischen
Graphen gehören also zu jeweils einem Dreieck der aktuellen Triangulierung. Um das Dreieck zu finden, in dem ein neu einzufügender Punkt
liegt, beginnt man an der Wurzel und stellt fest, in welchem direkten
2. ALGORITHMEN
59
Nachfolgerknoten der neue Punkt liegt. Dies wiederholt man solange, bis man eine Senke erreicht. Da die durchschnittliche Anzahl der
Flips pro Einfügeoperation konstant ist, ist es naheliegend, dass man im
Durchschnitt nur logarithmische viele Knoten betrachten muss, um für
einen Punkt das ihn enthaltende Dreieck zu finden. Die genaue Analyse
ist allerdings etwas technisch und wird daher hier nicht diskutiert.
A
B
A
B
B
A
D
C
E
C
A
A
D
F
D
E
B
E
C
G
F
D
E
G
Eine Verallgemeinerung des Kantenflip-Algorithmus lässt sich übrigens auch in höheren Dimensionen anwenden. Anstelle von leeren Kreisen betrachtet man dann, zum Beispiel in Dimension 3, leere Kugeln,
und eine Delaunay-Triangulierung wird von Tetraedern statt von Dreiecken gebildet. Die Rolle der legalen beziehungsweise illegale Kanten
übernehmen legale beziehungsweise illegale Tetraederflächen, die analog definiert sind. Allerdings ist eine illegale Fläche nicht mehr notwendig flipbar und die Flips selbst sehen etwas anders aus. Es sei nämlich
abc ein illegales Dreieck, das gemeinsame Fläche der Tetraeder abcd
und abce ist. Falls die Strecke de das Dreieck abc schneidet, so lässt
sich ein verallgemeinerter Flip durchführen, indem die zwei alten Tetraeder abcd und abce durch drei neue Tetraeder abde, acde und bcde
ersetzt werden. Andernfalls ist ein Flip nur dann möglich, wenn einer
60
4. DELAUNAY-ZERLEGUNGEN UND VORONOI-DIAGRAMME
der Tetraeder abde, acde oder bcde existiert und, zum Beispiel im ersten Fall, die Strecke ab das Dreieck cde schneidet. Es werden dann
die Tetraeder abcd, abce und abde durch die neuen Tetraeder acde und
bcde ersetzt.
Interessanterweise kann zwar in höheren Dimensionen noch immer
jede Triangulierung einer Punktmenge durch Flips zu einer DelaunayTriangulierung gemacht werden, aber es gibt Sequenzen von Flips, die
steckenbleiben“, das heisst, eine Situation produzieren in der noch il”
legale Tetraederseiten existieren, von diesen aber keine flipbar ist. Man
kann aber beweisen, dass dies beim inkrementellen Einfügen nicht passiert und der Flipalgorithmus auch nicht in eine Endlosschleife geraten
kann.
3. Delaunay-Zerlegungen und konvexe Hüllen
Es gibt einen interessanten Zusammenhang zwischen d-dimensionalen Delaunay-Zerlegungen und (d + 1)-dimensionalen konvexen Hüllen,
der auch praktische Konsequenzen hat. Da wir konvexe Hüllen noch
nicht im voller Allgemeinheit eingeführt hatten, geben wir hier zunächst
eine der möglichen Definitionen an:
Definition 7. Die konvexe Hülle einer Teilmenge S des Rd ist der
Schnitt aller Halbräume, die S enthalten. Dabei ist ein Halbraum eine
Menge der Form
{x ∈ Rd | x1 n1 + · · · + xd nd ≥ s}
für reelle Zahlen n1 , . . . , nd , s mit n21 + · · · + n2d 6= 0.
Wir beschränken uns wie oben auf zweidimensionale DelaunayZerlegungen und damit auf dreidimensionale konvexe Hüllen einer endlichen Menge S. Liegt S nicht ganz in einer Ebene, so ist die konvexe
Hülle gerade der Schnitt der endlich vielen Halbräume, die S enthalten
und in deren Randebene mindestens 3 nicht auf einer Geraden liegenden Punkte aus S enthalten sind.
Wir betrachten nun das durch
f (x, y) = x2 + y 2
definierte Paraboloid, also den Graphen der quadratischen Funktion f .
Die Tangentialebene an f im Punkt (a, b) hat die Form
ta,b (x, y) = a2 + b2 + 2a(x − a) + 2b(y − b) = 2ax + 2by − (a2 + b2 ).
Verschiebt man diese Ebene um r2 nach oben und berechnet den Schnitt
der so verschobenen Ebene mit dem Paraboloiden, so erhält man die
Bedingung
x2 + y 2 = 2ax + 2by − a2 − b2 + r2 ,
3. DELAUNAY-ZERLEGUNGEN UND KONVEXE HÜLLEN
61
also
(x − a)2 + (y − b)2 = r2 .
Die Projektion des gesuchten Schnitts auf die (x, y)-Ebene ist also
ein Kreis K mit Radius r um den Punkt (a, b). Ein beliebiger Punkt
p = (p1 , p2 ) der Ebene liegt folglich genau dann im Inneren von K, wenn
der hochprojezierte Punkt (p1 , p2 , p21 + p22 ) unterhalb der verschobenen
Tangentialebene liegt, beziehungsweis auf K, wenn (p1 , p2 , p21 + p22 ) in
dieser Ebene liegt.
Diese Beobachtung führt zumächst zu einem sehr praktischen Kriterium, um festzustellen, ob für Punkte p, q, r, s in der Ebene der Punkt
s im durch die Punkte p, q und r festgelegten Kreis liegt. Dies ist genau der Fall, wenn der projezierte Punkt r0 = (r1 , r2 , r12 + r22 ) unterhalb
der durch die entsprechenden Projektionen p0 , q 0 und r0 bestimmten
Ebene liegt. Die expliziten Bestimmung des Kreismittelpunktes wird
also überflüssig und die gesamte Rechnung lässt sich mit landläufiger
Vektorarithmetik durchführen.
Ist weiter K ein leerer Kreis durch die Orte p, q und r, so liegen
die Projektionen der Orte aus S sämtlich im oberen durch die zu K
gehörende Ebene begrenzten Halbraum. Das Dreieck mit den Ecken
p0 , q 0 und r0 gehört also zum unteren Rand der konvexen Hülle dieser Punkte und es ist umgekehrt klar, dass der gesamte untere Rand
auf diese Weise gewonnen wird. Da es diverse effiziente Algorithmen
zur Berechnung dreidimensionaler konvexer Hüllen gibt, könnte man
also eine zweidimensionale Delaunay-Zerlegung auch konstruieren, indem man alle Punkte auf eine Paraboloid hochprojeziert, die konvexe
62
4. DELAUNAY-ZERLEGUNGEN UND VORONOI-DIAGRAMME
Hülle der projezierten Punkte berechnet und die unteren Flächen der
konvexen Hülle auf die Ebene zurückprojeziert.
Die Projektionsmethode liefert schließlich noch eine interessante Interpretation des Flipalgorithmus. Der besseren Anschaulichkeit halber
betrachten wir hier das an der x, y-Ebene gespiegelte Paraboloid mit
f (x, y) = −(x2 + y 2 ). Das Einfügen eines neuen Punktes und das Zerlegen eines diesen enthaltenden Dreiecks entspricht dann in der Projektion dem Aufstapeln eines Tetraeders auf die bisherige Hülle. Die
Projektion einer illegalen Kante wird dadurch charakterisiert, dass die
sie enthaltenden Dreiecke einen von oben gesehen konvexen Winkel bilden. Beim Flippen wird in diesen ein Tetraeder eingefügt, dessen obere
Kante die Projektion der geflippten ursprünglichen Kante darstellt und
natürlich einen konkaven Winkel bildet. Da der teilweise aufgebauten
Hülle immer nur Tetraeder hinzugefügt werden, muss der Algorithmus,
wie schon zuvor gesehen, nach endlich vielen Schritten abbrechen.
4. Anwendungen
4.1. Nächste Nachbarn. Die offensichtlichste Anwendung eines
Voronoi-Diagrammen ist die Suche nach dem einem Punkt p in der
Ebene nächstgelegene Ort aus der Menge S. Hierzu muss man herausfinden, in welcher Voronoi-Zelle sich p befindet. Das geht naiv in
O(n) Zeitschritten, was natürlich nicht besser ist als der offensichtliche Algorithmus ohne Verwendung von Voronoi-Diagrammen. Wie wir
später sehen werden, kann man zu einer beliebigen ebenen Karte mit n
Ecken in Laufzeit O(n log n) eine Datenstruktur konstruieren, die das
Lokalisieren eines Punktes in O(log n) Zeitschritten erlaubt.
Eine andere interessante Frage ist die nach den jeweils nächsten
Nachbarn der Punkte aus S untereinander. Wie man leicht sieht, sind
solche nächsten Nachbarn durch Kanten der Delaunay-Zerlegung miteinander verbunden. Übrigens gilt, wenn für a und b aus S der Ort b der
zu a nächste Nachbar aus S ist, nicht notwendig auch die umgekehrte
Beziehung.
4.2. Euklidischer minimaler Spannbaum. Man stelle sich eine Anzahl von Orten in der Ebene, die durch ein Netzwerk von Kanten
miteinander verbunden werden sollen. Diese Kanten könnten beispielsweise Wasserleitungen oder Glasfaserkabel zur Datenübertragung sein.
Um Kosten zu sparen, soll die Gesamtlänge aller Kanten möglichst klein
sein. Offensichtlich beschreibt ein solches Netzwerk einen Graphen in
der Ebene, der zunächst einmal theoretisch auch sich überschneidende
Kanten enthalten könnte. Ganz offensichtlich aber keine dieser Graph
keine Zykeln enthalten, muss also ein Baum sein. Eine optimale Lösung
4. ANWENDUNGEN
63
heisst ein minimaler euklidischer Spannbaum. Es gibt O(n2 ) potentielle
Kanten, wie aber die folgende Beobachtung zeigt, sind nur O(n) davon
tatsächlich interessant.
Satz 10. Die Kanten eines minimalen euklidischen Spannbaums
zu einer Menge S von Orten in der Ebene sind Kanten der DelaunayZerlegung zu S.
Beweis. Es sei T ein minimaler euklidischer Spannbaum zur Menge S. Für eine beliebige Kante ab von T sei K der Kreis mit dem
Durchmesser ab. Falls ab keine Delaunay-Kante ist, ist K nicht leer,
enthält also einen weiteren Ort c. Die beiden Kanten ac und bc sind
dann echt kürzer als ab. Entfernt man nun ab, so zerfällt der Baum in
Teilbäume Ta und Tb mit a in Ta und b in Tb . Liegt nun c in Tb , so
enthält man durch Hinzufügen der Kante ac wieder einen Spannbaum
für die Menge S, der aber nun echt kürzer ist. Liegt c andererseits in
Ta , so fügt man natürlich entsprechend die Kante bc hinzu. Es ist folglich wegen der Minimalität von T die Kante ab eine Delaunay-Kante.
Da ab beliebig gewählt war, gilt die Behauptung.
Aus dem Graphen der Delaunay-Zerlegung läßt sich zum Beispiel
mit Kruskal’s Algorithmus in O(n log n) Schritten ein minimaler euklidischer Spannbaum extrahieren.
KAPITEL 5
Quadtrees
1. Motivation: Mesh-Erzeugung
Wie wir gesehen haben, wird für Delaunay-Triangulierungen der
minimal auftretenen Winkel unter allen Triangulierungen zu einer vorgegebenen Punktmenge maximal. Für viele Anwendungen ist es wichtig, dass die Winkel einer Triangulierung in bestimmten Bereichen liegen. Besonders bei ungleichmäßigen Punkteverteilungen kann das die
Delaunay-Triangulierung offenbar nicht leisten, damit aber auch keine andere Triangulierung, die nur die vorgegebenen Punkte als Ecken
besitzt. Es ist also nötig, zusätzliche Eckpunkte, sogenannte SteinerPunkte, einzuführen.
Ein einfaches mögliches Szenario, wie es in ähnlicher Form zum Beispiel in einer Finite-Elemente-Anwendung auftreten könnte, ist folgendes: alle vorgegebenen Punkte liegen auf einem Gitter, können also zum
Beispiel durch lauter ganzzahlige Koordinaten angegeben werden. Diese sollen sämtlich im Bereich von 0 bis 2j für eine geeignete natürliche
Zahl j sein. Die Punkte könnten Bohrungen oder Punkte besonderer
Beanspruchung an einer modellierten Werkstückoberfläche sein, die per
Simulation auf ihre Stabilität, ihr Temperaturverhalten oder ähnliches
getestet werden soll.
Die zu produzierende Triangulierung soll nur Winkel zwischen 45
und 90 Grad enthalten und ihre Steiner-Punkte sollen ebenfalls auf
dem vorgegebenen Gitter liegen. Wie gewohnt, sollen die Flächen der
65
66
5. QUADTREES
Triangulierung nicht nur im geometrischen, sondern auch im kombinatorischen Sinne Dreiecke sein. Das heisst insbesondere, dass kein Dreieck eine Ecke in Innern einer Kante eines anderen Dreiecks haben darf.
Eine einfache Lösung, die allerdings eine sehr große Zahl von Dreiecken
produziert, ist es, den Koordinatenbereich komplett in achsenparallele
Quadrate zu zerlegen, deren Seitenlänge gerade die Gitterweite ist und
dann jedes Quadrat in zwei Dreiecke aufzuteilen. Bei Anwendungen
wie der oben skizzierten ist es aber besser, mit möglichst wenigen Dreiecken zu arbeiten, um Rechenzeit zu sparen. Genauer gesagt, sollen
die produzierte Triangulierung, oder, wie man häufig sagt, das Mesh,
in Regionen besonderen Interesses, in unserem Fall also um die vorgegebenen Punkte herum, dicht und in anderen Bereichen weniger dicht
sein. Man spricht von einem inhomogenen Mesh.
Das Auffinden optimaler Triangulierungen für Probleme dieser Art
ist notorisch schwierig. Man sucht daher nach effizienten Heuristiken,
das heisst, nach schnellen Algorithmen, die brauchbare, wenn auch
nicht die jeweils bestmöglichen Lösungen liefern. Einen Weg hierzu
bieten die in diesem Kapitel behandelten Quadtrees, die im Übrigen
eine Fülle weiterer Anwendungen in der Computergraphik und der algorithmischen Geometrie haben.
2. Quadtrees für Punktmengen
Ein Quadtree ist ein Baum, dessen innere Knoten jeweils genau
vier Nachfolger besitzen. Jeder Knoten repräsentiert ein achsenparalleles Rechteck, wobei die Nachfolger eines Knotens v jeweils die Quadranten des zu v gehörenden Rechtecks repräsentieren. Im einfachsten
Fall, von dem wir hier im weiteren ausgehen, sind alle diese Rechtecke
Quadrate. Die den Blättern des Quadtrees zugeordneten Quadrate bilden offensichtlich eine Zerlegung des Wurzelquadrates. Im folgenden
Beispiel sind die Nachfolgerknoten jeweils der Himmelsrichtung entsprechend mit N W für den nordwestlichen Quadranten, N O für den
nordwestlichen und so weiter, bezeichnet.
NW
NE
SW
SE
SE
2. QUADTREES FÜR PUNKTMENGEN
67
Man beachte, dass die Flächen der einem Quadtree zugeordneten
Zerlegung des Quadrats, als Karte aufgefasst, nicht notwendig kombinatorische Vierecke sind. So hat zum Beispiel die rechte obere Fläche
im Bild oben 6 Knoten. Wir sprechen trotzdem weiter von Quadraten,
führen aber zur besseren Unterscheidung einige Begriffe ein. Die Knoten
an den Quadratecken heißen im folgenden Ecken. Die Liniensegmente
zwischen je zwei Ecken eines Quadrates heißen seine Seiten, während
die Kanten der Zerlegung, die zu einem Quadrat gehören, seine Kanten
heißen.
Seite
Knoten
Kante
Ecke
Quadtrees haben wie gesagt mannigfaltige Verwendungsmöglichkeiten und können dementsprechend diverse Typen von Daten speichern.
Wir wollen Quadtrees benutzen, um eine Menge S von n Punkten in der
Ebene zu speichern. Dazu wird zunächst im Wurzelknoten das kleinste
S einschließende Quadrat, das heisst, dessen linke, rechte, obere und
untere Begrenzung, gespeichert. Um beim Zerlegen Mehrdeutigkeiten
zu vermeiden, wird jedes Quadrat als unten und links offen aufgefasst,
hat also die Form
(xl , xr ] × (yu , yo ] := { (x, y) ∈ R2 | xl < x ≤ xr ; yu < y ≤ yo }.
Das Ursprungsquadrat muss demnach nach unten und nach links etwas
vergrößert werden, um alle Punkte zu enthalten.
Ist nun v ein beliebiger Knoten mit zugeordnetem Quadrat Qv =
(xl , xr ] × (yu , yo ], so gibt es zwei Fällen. Falls Qv höchstens einen Punkt
aus S enthält, so ist v ein Blatt und der eventuell vorhandene Punkt
wird zusammen mit Qv im Knoten v gespeichert. Andernfalls wird nur
Qv selbst gespeichert und v erhält vier Nachfolgerknoten, denen die
vier Quadranten des Quadrats Qv zugeordnet werden. Mit den Bezeichnungen xm := 1/2(xl + xr ) und ym := 1/2(yu + yo ) sind dies die
Quadrate (xl , xm ] × (ym , yo ], (xm , xr ] × (ym , yo ], (xl , xm ] × (yu , ym ] und
(xm , xr ] × (yu , ym ].
68
5. QUADTREES
Aus der rekursiven Definition eines Quadtrees zur Menge S ergibt sich sofort ein Konstruktionsalgorithmus. Auch die Tiefe eines
Quadtrees lässt sich sehr einfach abschätzen.
Lemma 8. Die Tiefe eines Quadtrees zu einer Menge S von Punkten in der Ebene ist höchstens log(h/d) + 3/2, wobei h die Seitenlänge
des S enthaltenden Ursprungsquadrats und d der kleinste Abstand zweier Punkte aus S ist.
Beweis. Die Seitenlänge eines Quadrates der Tiefe i ist h/2i , der
größte
möglicher Abstand zweier Punkte in einem solchen Quadrat also
√
h 2/2i , nämlich die Länge der Diagonalen. Für einen internen Knoten
der Tiefe i gilt dann
√
h 2/2i ≥ d,
beziehungsweise
√
h 2
1
i ≤ log
= log(s/c) + .
d
2
Da die Tiefe eines Baumes um eins größer als die größte Tiefe eines
Blattes ist, ergibt sich die Behauptung.
Bei bekannter Tiefe lassen sich die Größe und die Konstruktionszeit
für einen Quadtree abschätzen.
Satz 11. Ein Quadtree der Tiefe d zu einer Punktmenge der Größe
n hat O((d + 1)n) Knoten und lässt sich in einer Laufzeit von ebenfalls
O((d + 1)n) konstruieren.
Beweis. Da jeder interne Knoten eines Quadtrees ein Quadrat mit
mindestens einem Punkt aus S beschreibt und jeder Punkt in höchstens
einem Quadrat aus jeder Tiefenebene vorkommt, ist die Anzahl der inneren Knoten jeder Tiefe höchstens n. Die Gesamtanzahl der Knoten
ist aber genau das vierfache der Anzahl der inneren Knoten plus eins
für die Wurzel. Das liegt daran, dass jeder innere Knoten vier Nachfolger hat, jeder Knoten außer der Wurzel aber Nachfolger genau eines
inneren Knotens ist. Ein Quadtree der Tiefe d hat demnach O((d+1)n)
Knoten. Der aufwendigste Konstruktionsschritt ist die Zuordnung der
Punkte zu Nachfolgerknoten. Dies lässt sich so organisieren, dass der
Aufwand für jeden internen Knoten linear in der Anzahl der zuzuordnenden Punkte ist, mit dem obigen Argument also O(n) für jede Tiefenebene des Quadtrees, womit auch die Laufzeitabschätzung folgt. Eine häufig benötigte Operation ist das Auffinden von Nachbarn.
Zu einem Knoten v und einer vorgegebenen Richtung — Nord, Süd,
Ost oder West — sucht man einen Knoten w, so dass Qw ein direkter
2. QUADTREES FÜR PUNKTMENGEN
69
Nachbar von Qv in dieser Richtung ist. Es sind verschiedenen Versionen denkbar. Zum Beispiel könnte v immer ein Blatt und als Ergebnis
ebenfalls ein Blatt gesucht sein. Ein etwas allgemeiner Variante ist die
folgende, die hier nur für nördliche Nachbarn angegeben wird:
Algorithmus 4. NachbarNord(v, T )
Eingabe: Ein Knoten v in einem Quadtree T .
Ausgabe: Der tiefste Knoten, der ein nördlicher Nachbar von v und
nicht tiefer als v ist, oder null, falls kein solcher existiert.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Falls v die Wurzel von T ist
liefere null.
Es sei w der Vorgänger von v.
Falls v der Südwest-Nachfolger von w ist
liefere den Nordwest-Nachfolger von w.
Falls v der Südost-Nachfolger von w ist
liefere den Nordost-Nachfolger von w.
u ← NachbarNord(w, T )
Falls u ein Blatt oder null ist
liefere u.
Falls v der Nordwest-Nachfolger von w ist
liefere den Südwest-Nachfolger von u.
Falls v der Nordost-Nachfolger von w ist
liefere den Südost-Nachfolger von u.
Offensichtlich ist die Laufzeit dieses Algorithmus O(d + 1), da die
Laufzeit für jeden rekursiven Aufruf konstant ist und die Tiefe des
betrachteten Knoten bei jedem rekursiven Aufruf um 1 kleiner wird.
Es kann vorkommen, dass ein großes Quadrat an viele wesentlich
kleinere angrenzt. Das ist manchmal unerwünscht, insbesondere zum
Beispiel bei der Anwendung auf Mesh-Erzeugungs-Probleme wie das
eingangs Erwähnte. Ein Quadtree heißt balanciert, falls jede Seite eines
Quadrates, das zu einem Blatt gehört, in Ihrem Inneren höchstens einen
Knoten der Zerlegung enthält. Anders ausgedrückt, darf kein BlattQuadrat an eines mit weniger als der halben Seitenlänge angrenzen.
Ein Quadtree kann balanciert werden, indem man zunächst alle
Blätter der Reihe nach betrachtet und diese aufteilt, wenn ein zu kleines
angrenzendes Quadrat existiert. Dies läßt sich mit Hilfe der oben beschriebenen Nachbar-Funktionen feststellen. Anschließend müssen alle
neu entstandenen Blätter und auch eventuelle Nachbarn, die aufgrund
einer solchen Zerlegung nun zu groß sind, abgearbeitet werden. Man
70
5. QUADTREES
kann die noch abzuarbeitenden Knoten zum Beispiel in einer linearen
Liste halten. Das Verfahren ist dann beendet, sobald die Liste leer ist.
Es sieht zunächst so aus, als ob ein balancierter Quadtree sehr viel
größer werden könnte als der unbalancierte Quadtree, aus dem man
ihn konstruiert, weil eine Zerlegung unter Umstände eine ganze Kaskade weiterer Zerlegungen nach sich ziehen kann. Wie der folgende Satz
zeigt, ist dies aber nicht der Fall.
Satz 12. Ist T ein Quadtree mit m Knoten, so hat die balancierte Version von T höchstens O(m) Knoten und kann in O((d + 1)m)
Zeitschritten konstruiert werden.
Beweis. Es sei TB die balancierte Version von T . Wir nennen die
zu den Knoten von T gehörenden Quadrate alt und solche, die nur
in TB vorkommen, neu. Es sei jetzt Q ein altes oder neues Quadrat,
dass irgendwann im Laufe der Konstruktion von TB zerlegt wurde. Wir
behaupten, dass Q mit mindestens einen gleichgroßem alten Quadrat
eine gemeinsame Seite oder mit mindestens einem alten Quadrat eine
gemeinsame Ecke hat.
Andernfalls sei Q ein Gegenbeispiel minimaler Seitenlänge l. Da
Q zerlegt wird und TB balanciert ist, müssen alte oder neue Nachbarquadrate gleicher Größe entlang jeder Seite von Q existieren. Nach
Voraussetzung sind diese also alle neu. Desweiteren sind die jeweils
kleinsten Quadrate, die mit Q genau eine Ecke teilen, neu. Da Q zerlegt wird, so teilt es eine Kante mit einem Quadrat der Seitenlänge l/4
oder weniger. Es sei Q0 das Quadrat mit der Seitenlänge l/2, das dieses
enthält. Da Q0 in einem neuen Quadrat enthalten ist, muss es selbst neu
sein. Desweiteren sind alle Seitennachbarn gleicher Größe und auch alle
Eckennachbarn von Q0 neu, da sie entweder in einem Ecken- oder Seitennachbarn von Q oder in Q selbst enthalten sind. Demnach wäre Q0
ein kleineres Gegenbeispiel, was der Voraussetzung an Q widerspricht.
Die Ursprungsbehauptung ist also richtig.
Es folgt, dass bei der Konstruktion von Tb insgesamt höchstens 8m
Zerlegungen stattfinden können, da ja jedes zerlegte Quadrat in der
oben beschriebenen Weise an ein altes Quadrat angrenzt. Jede Zerlegunge produziert genau 4 neue Quadrate, folglich ist die Größe von TB
insgesamt linear in m.
Die Konstruktion lässt sich offenbar so organisieren, dass jeder vorkommende Knoten höchstens konstant oft behandelt wird, wobei dann
jeweils konstant viele Nachbarn betrachtet werden, um festzustellen,
ob der Knoten beziehungsweise einer seiner Nachbarn zerlegt werden
muss. Da das Auffinden von Nachbarn jeweils in O(d + 1) Zeitschritten
geht, erhält man dann die Gesamtlaufzeit von O((d + 1)m).
3. QUADTREES UND MESH-ERZEUGUNG
71
Eine Variante, die manchmal, zum Beispiel auch bei der MeshErzeugung, von Interesse ist, sind die stark balancierten Quadtrees, bei
denen sich auch die Seitenlängen von nur über eine Ecke benachbarten
Blatt-Quadraten höchstens um den Faktor 2 unterscheiden dürfen.
3. Quadtrees und Mesh-Erzeugung
Das eingangs erwähnte Mesh-Erzeugungs-Problem kann mit Hilfe von Quadtrees folgendermaßen behandelt werden: zunächst erzeuge
man zur gegebenen Punktmenge einen Quadtree mit einer abgewandelten Unterteilungsvorschrift. Es soll nämlich nun solange unterteilt
werden, bis alle Punkte an Ecken von Quadraten der Zerlegung liegen. Der so entstandene Quadtree wird anschließend balanciert. Teilt
ein Blatt-Quadrat des balancierten Baums mindestens eine Seite mit
kleineren Quadraten, so wird ein zusätzlicher Knoten in seiner Mitte
eingefügt und das Quadrat durch Kanten, die von diesem aus zu allen
Randknoten gehen, trianguliert. Alle übrigen Quadrate werden einfach
durch Einfügen einer Diagonalen in zwei Dreiecke zerlegt.
Offensichtlich ist ein solches Verfahren nur sinnvoll, wenn das vorgegebene Gitter relativ grob ist, oder genauer gesagt, wenn der erwartete
Punktabstand in etwa in der Größenordnung der Gitterweite liegt. Für
den allgemeinen Fall kann man folgendermaßen vorgehen: man konstruiere einen Quadtree nach der ursprünglichen Vorschrift, das heisst,
man unterteile solange, bis jedes Blatt-Quadrat nur noch höchstens
einen Punkt enthält. Durch eventuelles weiteres Unterteilen stellt man
sicher, dass jedes volle“ Blatt-Quadrat von 8 leeren“ Blatt-Quadraten
”
”
derselben Größe umgeben und der Baum außerdem balanciert ist. Anschließend wird für jedes solche Quadrat die dem enthaltenen Punkt
nächste Ecke auf dessen Position verschoben und der so entstandene
72
5. QUADTREES
verzerrte“ Quadtree wie oben trianguliert. Wird zum Zerlegen der
”
verzerrten Quadrate jeweils die beste Diagonale gewählt, so liegen alle
Winkel zwischen 22.5 und 90 Grad.
Die Abbildung unten zeigt das Ergebnis für die zwei dunkel markierten Eingabepunkte. Wie man erkennt, wird eine relativ große Anzahl von Dreiecken produziert. Dieses Verfahren und eine Reihe von
Varianten, die für unterschiedliche Kriterien an die erzeugten Meshes
existieren, haben aber den Vorteil, dass sie beweisbar asymptotisch optimal sind, was bedeutet, dass die Anzahl der erzeugten Dreiecke nur
um einen konstanten Faktor höher ist als die der kleinsten die gegebenen Kriterien erfüllende Triangulierung. Eine dieser Varianten erreicht
zum Beispiel Winkel zwischen 36 und 80 Grad. Für den praktischen
Einsatz kann man die Anzahl der erzeugten Dreiecke mit Hilfe verschiedener Heuristiken reduzieren. So entdeckt man zum Beispiel im
abgebildeten Mesh sofort eine ganze Reihe von Steiner-Punkten, die
weggelassen werden könnten.
4. Bemerkungen
Eine der Hauptanwendungen von Quadtrees ist die Bereichssuche:
aus einer Menge von geometrischen Objekten sollen diejenigen bestimmt werden, die in einem vorgegebenen achsenparallelen Rechteck liegen beziehungsweise dieses schneiden. Da die Komplexität von
der Auflösung der zu betrachtenden Objektmenge abhängt, sind sie
aus theoretischer Sicht weniger attraktiv als andere Datenstrukturen
zur Bereichssuche, zeigen aber in der Praxis häufig ein dennoch recht
günstiges Verhalten.
Eine unter vielen weiteren Anwendungen ist die Bildverarbeitung
beziehungsweise die Bildkompression. Das bekannte JPEG-Verfahren
4. BEMERKUNGEN
73
beruht im Prinzip auf einer Variante von Quadtrees: es wird der mittlere Farbton eines Bildes gespeichert, dann rekursiv unterteilt und für
Teilrechtecke jeweils nur noch der Unterschied zum enthaltenden Rechteck abgespeichert. Die Anzahl der verwendeten Bits hängt dabei von
der eingestellten Kompressionsrate ab. Sinkt insbesondere das Spektrum der in einem Rechteck enthaltenen Farben unter eine bestimmte
Schwelle, so enthalten dessen Teilrechtecke keine verwertbare Information mehr und müssen nicht mitkodiert werden.
Quadtrees lassen sich sehr leicht auf höhere Dimensionen verallgemeinern. Die dreidimensionale Variante heißt Octree.
KAPITEL 6
Wo bin ich?
1. Das Lokalisierungsproblem in Karten
Wir haben in den vergangenen Kapiteln eine Vielzahl von Methoden kennengelernt, die Zerlegungen eines Teils der Ebene produzieren.
Wir haben solche Zerlegungen kombinatorisch als sogenannte Karten
interpretiert und eine Datenstruktur zum Abspeichern von Karten, die
Halbkantenstruktur, kennengelernt.
Ein häufiges Problem ist es, in einer Karte diejenige Fläche zu finden, in der ein vorgegebener Punkt liegt. Wir nehmen wie früher an,
das alle Kanten geradlinig und alle Flächen damit, nicht notwendig
konvexe, Polygone sind. Ein erster Lösungsansatz wäre natürlich, für
jede Fläche der Reihe nach zu testen, ob sie die gesuchte ist. Dazu
braucht man einen Algorithmus, der feststellt, ob ein Punkt in einem
Polygon liegt.
Es ist nicht schwer, dieses Problem für ein beliebiges m-Eck in der
Zeit O(m) zu lösen. Die obige Idee führt dann zu einer Algorithmus,
dessen Laufzeit linear in der Zahl n der insgesamt vorkommenden Kanten der Karte ist. Das ist in Anwendungen mit großen Karten, wie zum
Beispiel echten Landkarten, oft zu langsam. Wir werden aber sehen,
dass man in O(n) beziehungsweise O(n log n) Zeitschritten eine Karte
so vorverarbeiten kann, dass Lokalisierungsanfragen in einer Laufzeit
von O(log n) beantwortbar sind.
?
75
76
6. WO BIN ICH?
2. Punkt in Polygon
Wir betrachten zunächst das Problem, zu testen, ob ein vorgegebener Punkt in einem bestimmten konvexen m-Eck liegt und nehmen wie
früher an, dass alle Polygonkanten so orientiert sind, dass das Polygoninnere jeweils links liegt. Es ist dann für alle Kanten eines Polygons der
Reihe nach zu testen, ob der gegebene Punkt links von dieser Kante
liegt. Für eine Kante ab und einen Punkt p ist das genau dann der Fall,
wenn die Determinante
(b0 − a0 )(p1 − a1 ) − (b1 − a1 )(p0 − a0 )
positiv ist. Falls der Rand des Polygons als mit zur Fläche gehörig
gelten soll, muss diese Kante entsprechend für alle Kanten nichtnegativ
sein. Offenbar funktioniert der komplette Test in O(m) Zeitschritten.
Zwei gängige lineare Verfahren für allgemeine Polygone sind der
Strahltest und das Windungszahl -Verfahren.Beim ersteren wird ein imaginärer Strahl vom Testpunkt aus in eine beliebige Richtung, meist in
Richtung der positiven x-Achse, gelegt und die Anzahl der Schnittpunkte dieses Strahls mit den Polygonkanten gezählt. Der Testpunkt
liegt genau dann im Polygon, wenn diese Anzahl ungerade ist. Bei der
Implementation muß darauf geachtet werden, bei Ecken und Kante, die
ganz oder teilweise auf dem Strahl liegen, korrekt zu zählen.
Das Windungszahlverfahren basiert auf der Idee, den Testpunkt
durch eine Strecke mit dem Polygonrand zu verbinden und den zweiten
Endpunkt diesen Rand komplett gegen den Uhrzeigersinn durchlaufen
zu lassen. Liegt der Punkt im Polygon, dreht sich die Strecke dabei einmal gegen den Uhrzeigersinn um sich selbst, liegt er dagegen draußen,
so ist der aufsummierte orientierte Drehwinkel 0. Bei der Implementation diese Verfahren wird für jede orientierte Randkante ab der Winkel
]apb ∈ [−π, π] berechnet und alle entstehenden Winkel aufsummiert.
2. PUNKT IN POLYGON
77
Für Polygone im Sinne dieser Vorlesung, also solche, deren Rand
keine Selbstüberschneidungen oder Selbstberührungen enthält, liefern
beide Verfahren dasselbe Ergebnis. Falls Selbstüberschneidungen existieren, werden beim Windungszahlverfahren mehr Punkte als innere
erkannt als beim Strahlverfahren.
+
+
−
+
−
−+
+
Obwohl übrigens beide Verfahren ganz offensichtlich lineare Laufzeiten besitzen, ist der Strahltest in der Praxis wesentlich schneller,
was hauptsächlich an den trigonometrischen Berechnungen beim Windungszahlverfahren liegt.
Um nun aber eine schnellere als lineare Laufzeit zu erreichen, liegt es
nahe, divide-and-conquer Strategien zu benutzen. Für konvexe Polygone ist dies recht einfach. Wir nehmen an, dass das Polygon P gegen den
Uhrzeigersinn gelesen die Ecken a0 bis am−1 hat. Im Fall m = 3 wird
das oben beschriebene lineare Verfahren angewandt. Um im Fall m > 3
festzustellen, ob ein Punkt p in P enthalten ist, testen wir zunächst, ob
p links oder rechts der Diagonalen p0 pbm/2c liegt. Im ersten Fall ist dann
nur noch zu testen, ob p im Teilpolygon p0 p1 . . . pbm/2c , im zweiten, ob
er im Polygon pbm/2c . . . pm−1 p0 enthalten ist. Das Verfahren wird für
das jeweilige Teilpolygon rekursiv ausgeführt und liefert offenbar einen
Algorithmus mit logarithmischer Laufzeit.
4
1
3
2
78
6. WO BIN ICH?
Um eine ähnliche Strategie für allgemeine Polygone anzuwenden,
müsste man garantieren können, dass sich ein System zerlegender Geraden findet, die jeweils die Größe des noch zu testenden Teilpolygons
auf ungefähr die Hälfte reduzieren. Das ist tatsächlich möglich und wir
werden eine solche Methode später im allgemeineren Zusammenhang
kennenlernen. Im kommenden Abschnitt verfolgen wir zunächst eine
andere Strategie.
3. Kirkpatrick-Hierarchien
Der Ansatz von Kirkpatrick zur Lösung des Lokalisierungsproblem basiert auf der Idee, den Testpunkt zunächst in einer gröberen
Karte zu lokalisieren und dann aufgrund der so gewonnenen Information die Suche in der nächstfeineren Karte einzuschränken. Diese
Strategie ähnelt ein wenig der, die wir im Abschnitt über DelaunayTriangulierungen bei der Lokalisation eines neuen Punktes für den FlipAlgorithmus kennengelernt hatten.
Die grobe Struktur des Kirkpatrick-Algorithmus ist die folgende: zunächst trianguliert man die gegebene Karte, wobei man ähnlich
wie beim Flip-Algorithmus ein zusätzliches äußeres Dreieck einfügt,
das später die Basis der Hierarchie bildet. Anschließend sucht man eine möglichst große Menge M von Ecken, von denen keine zwei durch
eine Kante verbunden sind. Eine solche Eckenmenge nennt man unabhängig. Man entfernt alle in M vorkommenden Ecken mitsamt den
inzidenten Kanten und trianguliert die neuentstandenen Flächen. Dies
wiederholt man, bis nur noch das äußere Dreieck übrigbleibt. Gleichzeitig wird ein gerichteter azyklischer Graph konstruiert, der für jedes
Dreieck der neuen, gröberen Triangulierung auf diejenige Dreiecke der
alten Triangulierung verweist, in denen ein enthaltener Punkt weiter
gesucht werden soll.
Wir werden uns später um Details des Algorithmus sowie dessen
Laufzeit und Speicherbedarf kümmern. Zunächst soll gezeigt werden,
dass es immer genügend große unabhängige Eckenmengen gibt, um eine
logarithmische Tiefe der Triangulierungshierarchie zu gewährleisten.
Lemma 9. Eine ebene Triangulierung mit n Ecken enthält mindestens dn/2e + 2 Ecken vom Grad 8 oder kleiner.
Beweis. Nach der Eulerschen Formel gilt
n − m + f = 2,
3. KIRKPATRICK-HIERARCHIEN
79
wobei m und f die Anzahlen der Kante beziehungsweise Flächen der
Triangulierung sind. Weiter gilt, da alle Flächen Dreiecke sind, die Beziehung 3f = 2m. Dies ergibt durch Einsetzen die bekannte Formel
m = 3n − 6.
Wir nehmen nun an, mehr als bn/2c − 2, also auch mehr als n/2 − 2
Ecken hätten Grad 9 oder größer. Dann ist die Summe aller Eckengrade
größer als
9 · (n/2 − 2) + 3 · (n/2 + 2) = 12 · n/2 − 18 + 6 = 6n − 12.
Dies aber ist unmöglich, da andererseits die Summe aller Eckengrade
gerade das Doppelte der Kantenanzahl ist.
80
6. WO BIN ICH?
Korollar 3. Eine ebene Triangulierung mit n Ecken enthält eine
unabhängige Eckenmenge mindestens der Größe n/18.
Beweis. Jede Ecke vom Grad 8 oder kleiner hat höchstens 8 Nachbarn derselben Sorte. Falls k solche Ecken existieren, kann man darunter also immer eine unabhängige Menge mit mindestens k/9 Ecken
finden.
Es ist auch kein Problem, in linearer Zeit eine unabhängige Menge
wie im Korollar zu finden. Man wähle irgendeine unmarkierte Ecke mit
Höchstgrad 8 und markiere diese sowie all ihre direkten Nachbarn. Dies
wiederhole man so oft wie möglich. Die gewählten Ecken bilden dann
zusammen die gewünschte unabhängige Menge.
Wählt man stattdessen jeweils die unmarkierte Ecke mit dem kleinsten Grad, so erhält man übrigens sogar eine unabhängige Menge mit
mindestens n/7 Ecken. Dies erhöht dann allerdings die Laufzeit auf
O(n log n).
Konstruieren wir ganz allgemein eine Hierarchie, in der für ein festes c < 1 jede Vergröberung jeweils höchstens das c-fache der Eckenanzahl der nächstfeinere Triangulierung besitzt, so ist klar, dass diese
nach logarithmische vielen Schritten beim äußeren Dreieck anlangt. Die
Eckenanzahl der d-ten Vergröberung ist ja höchstens cd ·n. Wir erhalten
genauer:
cd · n ≥
⇒ d · log c + log n ≥
⇔d≤
4
2
2−log n
.
log c
Für die schwächere Abschätzung c = 17/18 erhalten wir zum Beispiel
1
−
' 12.13,
log c
für die stärkere c = 6/7 dagegen nur
−
1
' 4.5,
log c
dürfen also dann mit einer maximalen Hierarchietiefe von 4.5 ∗ log n
rechnen. Ist weiter s die Summe aller Knotenanzahlen in den Triangulierungen der Hierarchie, so erhalten wir die Abschätzung
s≤
d
X
i=0
n · ci = n ·
1 − cd+1
n
<
.
1−c
1−c
3. KIRKPATRICK-HIERARCHIEN
81
Wie man sich leicht klarmacht, wird der Speicherbedarf für die komplette Hierarchie linear in s, also auch linear in n. Desweiteren ist der Zeitaufwand, abgesehen vom Auffinden der unabhängigen Menge, ebenfalls
linear in s. Die Gesamtlaufzeit beträgt demnach je nach Variante O(n)
oder O(n log n).
Wie oben schon gesagt, erzeugt der Konstruktionsalgorithmus einen
DAG, also einen gerichteten, azyklischen Graphen. Die Knoten des
Graphen haben eine variable Anzahl von Nachfolgern (maximal 8), die
zum Beispiel in Form einer verketteten Liste abspeichern werden. Für
jedes Dreieck der Hierarchie existiert nach Beendigung des Algorithmus
genau ein Knoten.
Der konstruierte Graph hat, abstrakt gesprochen, die folgenden Eigenschaften:
• Der Graph hat genau eine Quelle, die wir auch Wurzel nennen.
• Jeder Knoten kodiert einen Bereich der Ebene, für den jeweils
in konstanter Zeit getestet werden kann, ob ein beliebiger Testpunkt darin enthalten ist.
• Jeder Knoten hat eine höchstens konstante Anzahl von Nachfolgern.
• Die Blätter kodieren die Flächen der Karte, für die das Lokalisierungsproblem gestellt wurde.
• Zu einem Testpunkt p und einem Blatt v gibt es genau dann
einen Weg von der Wurzel zu v mit lauter positiven Testresultaten (einen positiven Weg), wenn der Testpunkt in der von v
kodierten Fläche liegt.
• Gibt es einen solchen Weg, so lässt sich außerdem jeder positiven Teilweg zu einem positiven Weg zu v fortsetzen.
Wir wollen einen solchen Graphen einen Lokalisierungsgraphen nennen.
Algorithmus 5.
Eingabe: Eine ebene Karte K mit n Ecken.
Ausgabe: Ein gerichtetet, azyklischer Lokalisierungsgraph für K der
Tiefe O(log n).
1.
2.
3.
4.
5.
6.
Füge ein äußeres Dreieck x1 x2 x3 hinzu.
Trianguliere alle inneren Flächen inklusive der neuen.
Ordne jedem Dreieck die Ursprungfläche zu.
Ordne jedem Dreieck ein DAG-Blatt zu.
Solange die aktuelle Triangulierung mehr als 3 Ecken hat:
Finde eine große“ unabhängige Knotenmenge M .
”
82
7.
8.
9.
10.
11.
12.
6. WO BIN ICH?
Für jedes v aus M :
Entferne v mit den inzidenten Kanten und Dreiecken.
Trianguliere das entstandene Loch“.
”
Für jedes neuen Dreiecke T :
Ordne T einen DAG-Knoten u zu.
Füge Kanten von u zu allen DAG-Knoten ein,
die zu an v angrenzenden Dreiecken gehören.
4. Trapezzerlegungen
Nimmt man einen möglicherweise quadratischen Speicherplatzbedarf in Kauf, so kann man mit folgendem Ansatz sehr leicht einen Lokalisierungsgraphen mit logarithmischer Tiefe konstruieren: man zerlege den Suchbereich in vertikale Streifen, deren Grenzen gerade alle
x-Positionen von Ecken der Karte bilden. Für einen Testpunkt kann
man dann in logarithmischer Zeit den Streifen finden, in dem dieser
liegt. Innerhalb des Streifen findet man mit einer weiteren logarithmischen Suche die direkt ober- und unterhalb liegende Kante. Leider ist
der Speicherbedarf für eine solche Suchstruktur im schlimmsten Fall
quadratisch, was schon bei mäßig großen Karten nicht angenehm ist.
Ein günstigeres Speicherplatzverhalten erhält man, indem man von
jeder Ecke aus eine vertikale Kante nach oben und unten bis zum jeweils
nächsten Segment zieht. Wir nehmen dabei zur Vereinfachung zunächst
an, dass keine zwei Ecken identische x-Koordinaten haben. Desweiteren
führen wir ein zusätzliches, alle Bestandteile der Karte umschließendes
Rechteck R ein, um die neuen Kanten gegebenenfalls nach oben und
unten zu begrenzen. Dies führt zu einer Zerlegung von R in vertikale
Trapeze, von denen einige zu Dreiecken mit jeweils nur einer vertikalen
Kante entarten.
4. TRAPEZZERLEGUNGEN
83
Die entstehende Trapezzerlegung hat für eine Karte K mit n Ecken
offensichtlich O(n) Kanten und aufgrund der Euler’schen Formel dann
auch jeweils O(n) Ecken und Flächen.
Man konstruiert zu einer Trapezzerlegung einen Lokalisierungsgraphen mit zwei Arten von Knoten. Jeder Knoten hat im Unterschied
zur Konstruktion im vorigen Absatz zwei Nachfolger und beschreibt
einen Zwei-Wege-Test, aufgrund dessen in einen der Nachfolger verzweigt wird. Ein x-Knoten enthält die x-Koordinate einer Ecke von K.
Es wird dann geprüft, ob sich ein Testpunkt rechts oder links von dieser
Position befindet. Ein y-Knoten enthält eine Kante und beschreibt den
Test, ob ein Punkt ober- oder unterhalb von dieser liegt.
Die Trapezzerlegung selbst könnte mit einem plane-sweep Algorithmus konstruiert werden. Da uns hier aber vor allem der Lokalisierungsgraph und dessen Suchtiefe interessiert, wird einem inkrementellen Algorithmus der Vorzug gegeben, wobei Kante für Kante der Ursprungskarte neu eingefügt wird. Je nach der Reihenfolge des Einfügens kann
sich eine günstige oder ungünstige Suchstruktur ergeben. Es empfiehlt
sich daher wieder eine Zufallsreihenfolge.
Es reicht aus, für jedes Trapez dessen obere und untere Seite, die
aus mehreren Kanten bestehen kann, aber notwendigerweise Teil einer
Kante von K ist, sowie jeweils den die linke und rechte vertikale Seite
bestimmenden Punkt abzuspeichern. Man kann sich leicht klarmachen,
dass aufgrund der oben getroffenen Beschränkungen jedes Trapez je
höchstens zwei rechte und linke Nachbarn hat. Diese werden ebenfalls
gespeichert.
Der inkrementelle Algorithmus beginnt mit dem äußeren Rechteck
R. Der dazu gehörige Lokalisierungsgraph besteht aus einem einzigen
Blatt, das auf R verweist. Für jede hinzugefügte Kante k von K ist
84
6. WO BIN ICH?
zunächst festzustellen, in welchen Trapezen diese liegt. Da sich Kanten
nicht schneiden, muss es eine Folge t0 , . . . , tm von horizontal benachbarten Trapezen geben, die k enthalten. Es sei t0 das ganz linke und
entsprechend tm das ganz rechte dieser Trapeze. Dann enthält t0 den
linken Endpunkt von k und kann durch eine Suche nach k im Lokalisierungsgraphen gefunden werden. Man muss allerdings etwas aufpassen,
da ja k gemeinsame Endpunkte mit schon behandelten Kanten haben
kann.
Die Trapeze t1 bis tm werden gefunden, indem man jeweils für ti
dessen höchstens zwei rechte Nachbarn durchsucht, bis das Trapez tm
mit dem rechten Endpunkt von k erreicht ist. Die Modifikation der
Trapezzerlegung und des Lokalisierungsgraphen erfolgt dann in drei
Schritten:
(1) Die Trapeze t0 und tm werden nötigenfalls entlang der x-Positionen des linken beziehungsweise rechten Endpunkts von k
horizontal gespalten. Der Einfachheit halber bezeichnen wir
das rechte Teiltrapez von t0 wieder mit t0 und das linke Teiltrapez von tm mit tm . Im Lokalisierungsgraphen werden die
zu t0 und tm gehörenden Blätter durch jeweils einen x-Knoten
mit Blättern für das linke und rechte Teiltrapez ersetzt. Im
Spezialfall m = 0 wird das Trapez zweimal geteilt, der korrespondierende Knoten des Lokalisierungsgraphen muss also
durch einen Teilgraphen der Tiefe 3 mit zwei internen Knoten
und drei Blättern ersetzt.
(2) Die Trapeze t0 bis tm werden vertikal entlang der Kante k
geteilt. Wir nennen die oberen Teiltrapeze to0 bis tom und die
unteren tu0 bis tum . Im Lokalisierungsgraphen wird jeweils das
zu ti gehörende Blatt durch einen y-Knoten mit dem Test an
k und Blättern für toi und tui ersetzt.
(3) Gibt es in der Trapezfolge to0 , . . . , tom eine Teilfolge toi , . . . , toj mit
identischen oberen und unteren Begrenzungskanten aus K, so
werden diese zu einem einzigen Trapez zusammengefasst. Im
4. TRAPEZZERLEGUNGEN
85
Lokalisierungsgraphen werden die zugehörigen Blätter ebenfalls durch ein einziges Blatt ersetzt, in dem dann alle zuvor in
jenen endenden Kanten enden. Man wiederholt dies für alle solche Teilfolgen und entsprechend für Teilfolgen von tu0 , . . . , tum .
Man kann zeigen, dass der so beschriebene Algorithmus bei zufälliger Einfügereihenfolge eine Trapezzerlegung mit dem dazugehörenden
Lokalisierungsgraphen in erwarteter Laufzeit O(n log n) erzeugt. Die
aufgebauten Datenstruktur haben einen erwarteten Speicherplatzbedarf von O(n) und erlauben die Lokalisierung eine Punktes in erwarteter Laufzeit O(log n).
Wir haben angenommen, dass alle x-Positionen von Kantenendpunkten unterschiedlich sind. Das ist für echten Anwendungen eine sehr
unpraktische Einschränkung. Um diese zu eliminieren, wendet man eine
ähnliche Technik an wie früher bei der Berechnung von Linienschnittpunkten. Man betrachte eine hypothetische Abschrägung der gesamten
Karte um einen genügend kleinen Winkel, so dass die Reihenfolge von
Ecken mit zuvor unterschiedlichen x-Koordinaten sich nicht verändert.
Diese wird nicht tatsächlich ausgeführt, sondern simuliert, indem man
den Vergleich von x-Koordinaten durch einen lexikographischen Vergleich beider Koordinaten ersetzt.
KAPITEL 7
Bewegungsplanung
Bei der Bewegungsplanung geht es ganz allgemein darum, herauszufinden, wie man ein gewisses Objekt von einer vorgegebenen Anfangsin eine vorgegebene Endlage bringen kann, wobei im Zuge der Bewegung gewisse Lagen durch Hindernisse blockiert sind. Typische Anwendungsbeispiele sind Roboterarme oder auch mobile Roboter. Die
Lösung solcher Probleme kann ausgesprochen anspruchsvoll sein. Im
folgenden soll anhand einiger grundlegender Beispiele ein kleiner Einblick in die Thematik gegeben werden.
Wir beschränken uns auf zweidimensionale Probleme und wollen
jeweils einen mobilen Roboter durch einen Raum mit polygonalen Hindernissen manövrieren. Es dürfen keine Hindernisse durchfahren, wohl
aber berührt werden. Wir nehmen außerdem an, dass die Hindernisse
sich nicht überschneiden.
1. Beliebiger Weg für Punkt-Roboter
Um irgendeinen Weg von einem vorgegebenen Startpunkt s zu einem Zielpunkt z zu finden, kann man zum Beispiel die im vorigen
Kapitel eingeführte Trapezzerlegung verwenden. Es werden nur solche
Trapeze betrachtet, die im zugänglichen Raum liegen, das heißt, die
nicht Teil eines Hindernisses sind.
Aus diesem freien“ Teil der Trapezzerlegung wird zunächst ein
”
Graph konstruiert. Dessen Knoten sind die Zentren der Trapeze sowie die Mittelpunkte aller vertikalen Trapezkanten. Ein Trapezzentrum
wird durch jeweils eine Kante mit den Mittelpunkten aller Vertikalen
verbunden, die zum Rand des zugehörigen Trapezes gehören.
Um einen Weg von s nach z zu finden, verbindet man Start- und
Endpunkt nun noch mit den Zentren der jeweiligen Trapeze, in denen
diese liegen. In dem so erweiterten Graphen sucht man nun in linearer
Zeit nach einem Weg zwischen den s und z zugeordneten Knoten. Da
alle Trapeze konvex sind, führt dies unmittelbar zum gesuchten Weg
im Raum.
87
88
7. BEWEGUNGSPLANUNG
Das Auffinden der Trapeze, in denen s und z liegen, benötigt jeweils
O(log n) Schritte, die gesamte Wegesuche also O(n) mit einer erwarteten Vorverarbeitungszeit von O(n log n) für den Aufbau der Trapezzerlegung mit ihrem zugeordneten Lokalisierungsbaum. Alternativ könnte
man in linearer Zeit alle Trapeze testen oder auch anstelle einer Trapezzerlegung eine Triangulierung benutzen.
2. Kürzester Weg für Punktroboter
In vielen Anwendungen wird es günstiger sein, anstelle eines beliebigen einen möglichst kurzen oder gar den kürzesten Weg zu finden.
Dies sieht zunächst nach einem unüberschaubaren Problem aus, da ja
ein Weg theoretisch beliebige Bögen und Zacken enthalten könnte. Wie
aber das folgende Lemma zeigt, muss tatsächlich nur eine relativ kleine
Menge von Wegen in Betracht gezogen werden.
Lemma 10. Es sei eine endliche Menge P1 , . . . , Pn von sich paarweise nicht überschneidenden polygonaler Hindernisse in der Ebene gegeben. Es seien außerdem s und z zwei Punkte, die beide nicht im Inneren eines Hindernisses liegen. Dann ist der kürzeste Weg von s nach z,
der nicht durch das Innere eines Hindernisses führt, eine Streckenzug,
dessen Eckpunkte allesamt Polygonecken sind.
Proof. Es sei w ein kürzester Weg und p ∈ w ein Punkt außerhalb
aller Hindernisse. Es gebe also eine kleine Kreisscheibe D Mittelpunkt
p, die kein Hindernis schneidet. Wäre w ∩ D keine Strecke, so ließe
sich w verkürzen, indem man den Teil innerhalb von D durch eine
Strecke zwischen Eintritts- und Austrittspunkt ersetzt. Es folgt damit
zunächst, dass w ein Streckenzug zwischen Hinderniskanten ist.
Ist nun p ∈ w ein Punkt, der im Inneren einer Hinderniskante k
liegt, so gibt es eine Kreisscheibe D mit Mittelpunkt p, die bis auf eine
Teilstrecke von k keine weiteren Schnitte mit Hindernisrändern hat.
Der im zugänglichen Raum liegende Teil von D heiße D0 . Dann muß
wiederum D0 ∩w eine Stecke sein, was nur möglich ist, wenn w innerhalb
von D0 mit k übereinstimmt. Insbesondere ist p kein Eckpunkt.
Um nun also einen kürzesten Weg von s nach z zu bestimmen,
reicht es, den sogenannten Sichtgraphen zur Hindernismenge P1 , . . . , Pn
zu betrachten. Die Knoten des Sichtgraphen sind jeweils die Ecken
aller Hindernisse. Zwei Knoten werden verbunden, wenn die Strecke
zwischen den jeweiligen Ecken frei ist, also nicht durch ein Hindernis
läuft.
Zur Berechnung des Sichtgraphen kann man zu jeder Hindernisecke
v alle von ihr aus sichtbaren weiteren Ecken bestimmen, also all die,
3. ANPASSUNG FÜR NICHT DREHBAREN, POLYGONALEN ROBOTER
89
mit denen sie durch eine freie Strecke verbunden werden kann. Dies
geht mit einer Variante des plane sweep Algorithmus, bei dem man
anstelle einer wandernden Geraden einen rotierenden Strahl mit Ausgangspunkt v benutzt. Der Aufwand beträgt in diesem Fall pro Knoten
O(n log n), also insgesamt O(n2 log n). Es gibt daneben einen ausgabesensitiven Algorithmus zur Sichtgraphberechnung, der mit einer Laufzeit von O(n log n + k) bei k Kanten im Sichtgraphen auskommt.
Zur Berechnung eines kürzesten Weges im Sichtgraphen wird anschließend Dijkstra’s Algorithmus mit einer Laufzeit von O(n log n +
k) angewandt.
3. Anpassung für nicht drehbaren, polygonalen Roboter
Herunterladen