A common question is how to construct a simplicial complex given a data set. One such method is known as Delaunay complex. We seek to build up the Delaunay complex construction.
Nerve
Let be a finite collection of sets in . The nerve of is all sub-collections of with nonempty intersection, i.e.,
Notice that the nerve forms an abstract simplicial complex. Indeed, if is a non-empty subset of , then .
As an example, consider the collection of sets below composed of the black set , blue set , red set and pink set .
The nerve would then be all sub-collections of sets for whose intersection is non-empty. Thus, we get that
So we get that .
Voronoi Diagram
Voronoi cell
Let be a finite set of points in . The Voronoi cell of is the set of points closest to , i.e.,
In the case that , the Voronoi cells and are the half-planes divided by the perpendicular bisector equidistant from the points. As we introduce more points, we repeatedly take the perpendicular bisectors. As a result, cells become the intersection of a set of half-spaces forming a convex polyhedron.
Voronoi Diagram
The collection of Voronoi cells is called the Voronoi diagram.
Delaunay Complex
The Delaunay complex is defined to be the nerve of the Voronoi diagram.
Delaunay Complex
The Delaunay complex of a set is given as
For example, consider the Delaunay complex shown below in wireframe (white). Notice that each vertex corresponds to a single Voronoi cell (cyan). The dashed lines indicate they go on infinitely.
It is worth noting that not all Delaunay complexes in are composed of triangles. If we take our set to be four points along the unit circle, we get the four Voronoi cells intersect at the origin:
In other words,when we take the nerve we get the tetrahedron . However, by shifting one vertex by some small , we no longer get a four-way intersection.
General Position
A set of point is in general position if no points in lie on a common -sphere.
For example, in the tetrahedron example (where ), we had four points of lying on the unit circle (-sphere).
When the points are in general position, then there is no Voronoi cells with a common intersection. Hence, if , then .
Bower-Watson Algorithm
The Bower-Watson algorithm is an incremental algorithm for constructing the Delaunay triangulation of a finite set of points. It has a time complexity of , however, this can be optimized down to .
The algorithm starts by constructing a triangle large enough to contain all points of .
It then adds points one at a time. For each point added, it searches each triangle checking if lies inside the triangles circumcircle. If so, it marks the triangle as a bad triangle needing to be removed. For example, below we see that is inside the circumcircle of triangle , so we mark it for removal.
Once we’ve removed all bad triangles, we replace them with new triangles that contain the new point . So our bad triangle is replaced with triangles and .
Once we’ve added every point, we remove all triangles that have an edge of the original triangle.
The full algorithm:
1. Choose a triangle ST containing the set of points P in its interior and initialize D = {ST}.
2. For each p in P:
Initialize a list of edges E marked for deletion
For each T in D:
If p is in the circumcircle of T
Delete T from D
Add each edge of T to E
Delete the edges from E that belong to two different deleted triangles
The remaining edges in E form the boundary of the enclosing polygon.
Add the triangles that are formed by joining p to each of the vertices of edges in E to D.
3. Delete any triangles from D that share a vertex with ST
4. The remaining triangles are the Delaunay triangles.
Note the Bower-Watson algorithm can be applied to higher dimensions. Simply replace triangles with -simplices and circumcircle with -circumsphere.