Lecture 16: Fortune's Algorithm and Voronoi diagrams
Voronoi Diagrams: Voronoi diagrams (like convex hulls) are among the most important structures in computational geometry. A Voronoi diagram records information about what is close to what.

Definition:

Because we need to define "distance", we need to now talk about euclidean geometry, this is a subtle but important shift. Up to know, virtually everything that we have done has not needed the notion of angles, lengths, or distances (except for our work on circles). All geometric tests were made on the basis of orientation tests, a purely affine construct. But there are important geometric algorithms which depend on nonaffine quantities such as distances and angles. Let us begin by defining the Euclidean length of a vector v = (vx, vy) in the plane to be
|v| = sqrt(x2 + y2)
The distance between two points p and q, denoted dist(p; q), is defined to be |p - q|. (recall that in affine geometry, we weren't allowed to do the "-" operation on two points. Euclidean geometry allows this).

Alternative Definition:


Figure 56: Voronoi diagram

Voronoi diagrams have a number of important applications:

Properties of the Voronoi diagram:

Here are some observations about the structure of Voronoi diagrams in the plane.

Computing Voronoi Diagrams: There are a number of algorithms for computing Voronoi diagrams. Of course, there is a naive O(n2 log n) time algorithm, which operates by computing V(pi) by intersecting the n - 1 bisector halfplanes h(pi, pj), for j != i. However, there are much more efficient ways, which run in O(n log n) time. Since the convex hull can be extracted from the Voronoi diagram in O(n) time, it follows that this is asymptotically optimal in the worst case. Historically, O(n2) algorithms for computing Voronoi diagrams were known for many years (based on incremental constructions). When computational geometry came along, a more complex, but asymptotically superior O(n log n) algorithm was discovered. This algorithm was based on divide and conquer. But it was rather complex, and somewhat difficult to understand. Later, Steven Fortune invented a plane sweep algorithm for the problem, which provided a simpler O(n log n) solution to the problem. It is his algorithm that we will discuss. Somewhat later still, it was discovered that the incremental algorithm is actually quite efficient, if it is run as a randomized incremental algorithm. We will discuss this algorithm later when we talk about the dual structure, called a Delaunay triangulation.

Images / Examples

Real World Voronoi
voronoi game
Voro-glide