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