Vous êtes sur la page 1sur 24

1

Voronoi Diagrams
by Divide & Conquer
2

Sort points lexicographically by (x, y)-coordinates in increasing


order and store the points in array S[1 . . n].

Algorithm sketch:

VoronoiDC(S, i, j)
1 if j − i ≤ 3
2 then return VoronoiDirect(S, i, j)
3 else k ← b(i + j)/2c
4 VD(L) ← VoronoiDC(S, i, k)
5 VD(R) ← VoronoiDC(S, k + 1, j)
6 merge
3

VoronoiDirect:
4

merge
5

merge
6

merge
7

merge
8

Definition
Let S = L∪R· be a set of points in the plane. The set of edges in
VS(S) where one of the generating sites is in L and the other one is
in R is called the bisector of L and R. We write B(L, R) to denote
the bisector of L and R.

Lemma
If there is a straight line separating L and R, then B(L, R) is a
connected, unbounded, simple polygonal chain.
9

Observation:
• The Voronoi skeleton VS(S) consists of all Voronoi edges of
B(L, R), the part of the Voronoi skeleton VS(L), which lies left
of B(L, R), and the part of the Voronoi skeleton VS(R), which
lies right of B(L, R).
10

Observation:
• B(L, R) contains two semi-infinite rays on the common
boundary of two unbounded Voronoi regions each.
• The generating sites of these rays are on the lower and upper
bridges between CH(L) and CH(R).
• If there are no collinear sites, the generating sites are the
endpoints of the upper and lower bridge.

In order to find an initial part of B(L, R), we additionally compute


CH(L) and CH(R) and modify the search for the bridges between
CH(L) and CH(R).
11
12

How to compute B(L, R)?


• Start at the lower ray and walk along B(L, R).
• Assume, while walking along B(L, R), we enter a region
VRR (sr ) with sr ∈ R at a point p. Then p ∈ VRL (sl ) for a site
sl ∈ L.
• The bisector of sl and sr is split by p into two rays starting at
p. Let r be that ray that is going upward.
• The edge of B(L, R) supported by r ends, when r hits the
boundary of VRL (sl ) or the boundary of VRR (sr ), whatever
comes first.
• Stop when the upper ray has been processed.
13
14
15
16

• In order to detect which boundary is reached first, we


compute the intersection points of r and bd(VRL (sl )) and
of r and bd(VRR (sr )) and compare their distances to p.
• In order to find the intersection points of ray r and
bd(VRR (sr )), we walk clockwise around bd(VRR (sr ))
starting at p.
• Check each edge we reach for intersection with r. Since
VRR (sr ) is convex, there is at most one such intersection of
the boundary with r (besides p).
• Along bd(VRL (sl )), we walk counterclockwise.
17

VRS (sl ) ?

VRS (sl ) ⊆ VRL (sl )


Observations:
• bd(VRS (sl )) consists of (parts of) surviving edges of
bd(VRL (sl )) interspersed with edges of B(L, R).
• Note that B(L, R) ∩ bd(VRS (sl )) is not necessarily connected.
18
19

Observation:
• We can start our walk along bd(VRL (sl )) at the most recently
computed intersection point on bd(VRL (sl )).
20

Time complexity of walking along B(L, R)?


• charge the cost of walking around the region boundaries to
the Voronoi edges of VD(L) and VD(R) visited during the
walks and to the newly created Voronoi vertices of VD(S).

|VS(S)| = number of edges and vertices in VS(S)

O( |VS(L)| + |VS(R)| + |VS(S)| ) = O( |S| )


21

Initial sorting step takes time O(n log n).


T (n) = worst-case running time for VoronoiDC(S, 1, n)

∃ constants c, c0 such that



c n=1
T (n) ≤
c0 n + T (b n2 c) + T (d n2 e) n > 1

Theorem
Using divide & conquer, we can compute the Voronoi diagram
of n points in the plane in time O(n log n).
22

Delaunay Diagrams
by Divide & Conquer
23
24