Zum Hauptinhalt springen

5.1 Voronoi-Diagramme

Motivation (Folie 4)​

EingabeMenge von Telefonzellen, Postämtern, Sensoren, … und eine aktuelle Position
Zieldie nächstgelegene Telefonzelle / Post / … finden

Solche Nächste-Nachbarn-Probleme löst man mit Voronoi-Diagrammen. Benannt nach Georgi Woronoi (1868–1908).

Definition 1 (Folie 5)​

Sei P={p1,…,pn}P=\{p_1,\dots,p_n\} eine Menge von nn verschiedenen Punkten (Datenpunkte, Sites) und dd eine Metrik. Die Zerlegung der Ebene in nn Voronoi-Zellen V(pi)V(p_i) mit

q∈V(pi)  ⟺  d(q,pi)<d(q,pj)∀j≠iq\in V(p_i) \iff d(q,p_i) < d(q,p_j)\quad \forall j\ne i

heißt Voronoi-Diagramm Vor⁡(P)\operatorname{Vor}(P).

Im Folgenden immer die euklidische Metrik d(p,q)=(px−qx)2+(py−qy)2d(p,q)=\sqrt{(p_x-q_x)^2+(p_y-q_y)^2}.

Begriffe: Die Zellen sind offen. Punkte mit gleichem Abstand zu zwei nächsten Sites bilden die Voronoi-Kanten, Punkte mit gleichem Abstand zu drei oder mehr nächsten Sites die Voronoi-Knoten.

n = 8 · Voronoi-Knoten = 9 (≤ 2n−5 = 11) · Voronoi-Kanten = 16 (≤ 3n−6 = 18) · kleinster Winkel 14.0°
Jeder Voronoi-Knoten ist Mittelpunkt eines leeren Kreises durch ≥ 3 Punkte. Mit „Delaunay“ mit der Maus über ein Dreieck fahren zeigt seinen Umkreis. · Klick setzt Punkt, ziehen verschiebt, Rechtsklick löscht.
Voronoi-KantenDelaunay-KantenUmkreise = leere Kreise

Zellen sind Schnitte von Halbebenen (Folie 6)​

Die Punkte, die von pip_i und pjp_j gleich weit entfernt sind, bilden die Mittelsenkrechte (Bisektor) mijm_{ij}, eine Gerade. Sie teilt die Ebene in zwei offene Halbebenen. Die auf der Seite von pip_i ist

h(pi,pj)={q∣d(q,pi)<d(q,pj)}.h(p_i,p_j)=\{q \mid d(q,p_i)<d(q,p_j)\}.

Ein Punkt liegt genau dann in V(pi)V(p_i), wenn er näher an pip_i ist als an jedem anderen pjp_j:

V(pi)=⋂j≠ih(pi,pj).V(p_i)=\bigcap_{j\ne i} h(p_i,p_j).

Folge: Voronoi-Zellen sind konvex (Schnitt konvexer Mengen ist konvex). Sie sind konvexe Polygone, eventuell unbeschränkt.

(Ergänzung) Das ergibt sofort einen einfachen Algorithmus: Jede Zelle als Schnitt von n−1n-1 Halbebenen in O(nlog⁡n)O(n\log n), insgesamt O(n2log⁡n)O(n^2\log n). Die Demo oben rechnet genau so. Fortunes Algorithmus (5.2) schafft das ganze Diagramm in O(nlog⁡n)O(n\log n).

Satz 1: Globale Geometrie und Topologie (Folien 7–8)​

Satz 1

Sei PP eine Menge von n≥3n\ge3 verschiedenen Punkten in der Ebene.

  1. Liegen alle Punkte auf einer Geraden, besteht Vor⁡(P)\operatorname{Vor}(P) aus n−1n-1 parallelen Geraden.
  2. Sonst ist Vor⁡(P)\operatorname{Vor}(P) ein zusammenhängender Graph, dessen Kanten Strecken oder Halbgeraden sind.

Beweis. Die Zellen sind als Schnitt von Halbebenen konvex.

  1. Kollinear: Die Mittelsenkrechten benachbarter Punkte sind parallel und schneiden sich nicht. Ausprobieren in der Demo mit „kollinear“.
  2. Seien pi,pj,pkp_i,p_j,p_k nicht kollinear.
    • (b) Kanten: Jede Kante ist ein Stück einer Mittelsenkrechten, also Strecke, Halbgerade oder ganze Gerade. Eine ganze Gerade mijm_{ij} ist aber unmöglich: Es gibt einen Punkt pkp_k, der nicht auf der Geraden durch pi,pjp_i, p_j liegt. Dann schneidet mikm_{ik} die Gerade mijm_{ij}, und ab diesem Schnittpunkt ist ein Teil von mijm_{ij} näher an pkp_k als an pip_i und pjp_j, also keine Voronoi-Kante.
    • (a) Zusammenhang: Angenommen, Vor⁡(P)\operatorname{Vor}(P) zerfällt in zwei Komponenten. Dann muss eine Zelle V(pi)V(p_i) dazwischen liegen und sie trennen. Eine konvexe Zelle, die die Ebene in zwei Teile trennt, ist ein Streifen zwischen zwei parallelen ganzen Geraden. Das widerspricht (b). □

Satz 2: Globale Kombinatorik (Folien 9–10)​

Satz 2

Ein ebenes Voronoi-Diagramm von n≥3n\ge3 Punkten hat höchstens nv=2n−5n_v = 2n-5 Voronoi-Knoten und ne=3n−6n_e = 3n-6 Voronoi-Kanten.

Das Diagramm hat also nur linear viele Knoten und Kanten, obwohl es (n2)\binom n2 Mittelsenkrechte gibt.

Beweis.

  • Nicht alle Punkte sind kollinear (sonst nur n−1n-1 Kanten, die Aussage stimmt dann trivial).
  • Trick: Die Halbgeraden sind keine richtigen Kanten mit zwei Endpunkten. Man fügt einen Hilfsknoten v∞v_\infty „im Unendlichen“ hinzu und verbindet alle Halbgeraden mit ihm. Dann ist das Diagramm ein zusammenhängender, planarer Graph mit nv+1n_v+1 Knoten, nen_e Kanten und nn Flächen (die Zellen).
  • Eulersche Formel nv−ne+nf=2n_v - n_e + n_f = 2: 2=(nv+1)−ne+n.(1)2 = (n_v+1) - n_e + n. \qquad (1)
  • Grad-Abschätzung: Jede Kante hat zwei Endpunkte, und jeder Knoten (auch v∞v_\infty) hat mindestens drei Kanten. Summe der Grade =2ne=2n_e: 3(nv+1)≤2ne.(2)3(n_v+1)\le 2n_e. \qquad (2)
  • Kanten: (1) mal 3 und (2) einsetzen: 6=3(nv+1)−3ne+3n≤2ne−3ne+3n=−ne+3n  ⟺  ne≤3n−6.6 = 3(n_v+1) - 3n_e + 3n \le 2n_e - 3n_e + 3n = -n_e + 3n \iff n_e\le 3n-6.
  • Knoten: (1) mal 2 und 2ne≥3(nv+1)2n_e\ge 3(n_v+1) einsetzen: 4=2(nv+1)−2ne+2n≤2(nv+1)−3(nv+1)+2n=−nv−1+2n  ⟺  nv≤2n−5.4 = 2(n_v+1) - 2n_e + 2n \le 2(n_v+1) - 3(n_v+1) + 2n = -n_v - 1 + 2n \iff n_v \le 2n-5. □
Für die Prüfung

Diesen Beweis sollte man an der Tafel vorführen können: v∞v_\infty einführen → Euler → Grad ≥3\ge3 → zwei Zeilen Umformung. Häufige Nachfrage: Warum hat jeder Knoten Grad ≥ 3? Weil an einem Voronoi-Knoten mindestens drei Zellen zusammenstoßen (sonst wäre es nur ein Punkt auf einer Kante).

Satz 3: Leere Kreise (Folien 11–12)​

Sei cP(q)c_P(q) der größte leere Kreis um qq: der Kreis mit Mittelpunkt qq, der keinen Punkt von PP im Inneren enthält. Er wächst, bis er den nächsten Punkt (oder mehrere gleich nahe) berührt.

Satz 3
  1. Ein Punkt qq ist genau dann ein Voronoi-Knoten, wenn cP(q)c_P(q) mindestens drei Punkte von PP auf seinem Rand hat.
  2. Ein Bisektor mijm_{ij} enthält genau dann eine Voronoi-Kante, wenn es einen Punkt r∈mijr\in m_{ij} gibt, dessen cP(r)c_P(r) nur pip_i und pjp_j auf dem Rand hat.

Beweis.

  1. „⇐“: Hat cP(q)c_P(q) die Punkte pi,pj,pkp_i,p_j,p_k auf dem Rand und keinen im Inneren, sind diese drei die nächsten Sites von qq, alle gleich weit entfernt. Also stoßen in qq die drei Zellen V(pi),V(pj),V(pk)V(p_i), V(p_j), V(p_k) zusammen, qq ist ein Voronoi-Knoten. „⇒“: Ist qq ein Voronoi-Knoten, stoßen dort mindestens drei Zellen zusammen, also liegen mindestens drei gleich nahe Punkte auf dem leeren Kreis um qq.
  2. „⇐“: Hat cP(q)c_P(q) genau pi,pjp_i,p_j auf dem Rand, liegt qq auf der Grenze von V(pi)V(p_i) und V(pj)V(p_j), und nach 1. ist qq kein Knoten. Also liegt qq im Inneren einer Kante. „⇒“: Enthält mijm_{ij} eine Kante, hat jeder innere Punkt qq der Kante genau pip_i und pjp_j als nächste Sites. □

In der Demo: „Delaunay“ und „Umkreise“ einschalten. Jeder blaue Kreis ist leer, sein Mittelpunkt ist ein Voronoi-Knoten. Mit dem Preset „kreis“ liegen vier Punkte auf einem Kreis: Dort ist der Voronoi-Knoten vom Grad 4, und die Delaunay-Triangulierung ist nicht eindeutig.

Weitere Eigenschaften (Ergänzung)​

  • V(pi)V(p_i) ist unbeschränkt ⇔ pip_i ist eine Ecke der konvexen Hülle (siehe Komplexität in 5.2).
  • Der nächste Nachbar von pip_i in PP ist ein Voronoi-Nachbar (seine Zelle grenzt an V(pi)V(p_i)).
  • Der Mittelpunkt des größten leeren Kreises mit Mittelpunkt in der konvexen Hülle liegt auf einem Voronoi-Knoten oder auf dem Schnitt einer Kante mit dem Hüllrand (Standortplanung: „Wo baue ich die neue Filiale, möglichst weit weg von allen anderen?“).