A triangulation of a point set in which no point lies inside the circumcircle of any triangle. It is the dual of the Voronoi diagram, and it is unique when no four points are concyclic.
Why it is the “right” triangulation
Among all triangulations of the same points, Delaunay:
- maximises the minimum angle (avoids skinny triangles) — and in fact maximises the whole sorted angle vector lexicographically;
- minimises the maximum circumcircle radius;
- contains the closest pair as an edge;
- contains the Euclidean minimum spanning tree as a subgraph;
- contains the nearest-neighbour graph as a subgraph.
The last two are the reasons it matters algorithmically.
Construction
| Method | Time | Note |
|---|---|---|
| Flip algorithm | start anywhere, flip illegal edges until none remain | |
| Bowyer-Watson | expected | incremental; easiest to understand |
| Divide and conquer (Guibas-Stolfi) | worst case | quad-edge structure |
| Sweep line (Fortune) | build Voronoi and dualise | |
| Lift to 3D + convex hull | the most elegant |
The lifting map
Send onto the paraboloid. Then:
The lower convex hull of the lifted points, projected back to the plane, is the Delaunay triangulation.
A point is inside a circumcircle in 2D exactly when its lift is below the corresponding plane in 3D — so the in-circle predicate becomes an orientation test in 3D. If you have a 3D hull routine, you get Delaunay for free.
The in-circle predicate — the hard part
with counter-clockwise; positive means is strictly inside.
This determinant is degree 4
With coordinates up to it reaches — far beyond
long longand beyonddouble’s 53-bit mantissa. Getting the sign wrong produces a non-triangulation, not a slightly wrong one.Options: restrict coordinates to and use
__int128; use exact rational or big-integer arithmetic; or use adaptive-precision predicates (Shewchuk). This is the single biggest obstacle to implementing Delaunay correctly.
Uses
| Problem | How |
|---|---|
| Euclidean MST | Delaunay has edges and contains the EMST → Kruskal on those |
| Closest pair | the shortest Delaunay edge |
| Nearest neighbour graph | a subgraph |
| Largest empty circle | centred at a Voronoi vertex = a Delaunay circumcentre |
| Terrain / mesh generation | maximising the minimum angle avoids numerical trouble |
| Interpolation (natural neighbour) | uses the Voronoi structure |
| Point location | walk the triangulation |
Euclidean MST, concretely
1. Build the Delaunay triangulation O(n log n)
2. Take its O(n) edges with Euclidean weights
3. Run Kruskal O(n log n)
Versus on the complete graph. For that is the difference between feasible and not.
Constrained Delaunay
Forces certain edges to appear (for meshing a polygon with fixed boundaries). The result is no longer strictly Delaunay — triangles may violate the empty-circle property, but only because of the forced edges.
3D and beyond
Delaunay tetrahedralisation exists in 3D but can have tetrahedra, and its construction is much harder. The lifting map still works (to 4D), and the in-sphere predicate has degree 5.
The contest reality
Full Delaunay implementations are long and precision-critical. Before writing one, check whether you actually need it:
- Euclidean MST with → the complete graph is edges; just run Kruskal.
- Nearest neighbour queries → a KD-tree.
- Closest pair → the sweep.
- Largest empty circle → enumerate candidate centres.
Delaunay earns its place at with a genuine Euclidean MST requirement.
See also: Voronoi Diagram · Bowyer-Watson · Convex Hull