- efficiently enumerating all vertices in the QuadEdge data structure which provides the basis for Delaunay computation
- computing the circumcentre of all Delaunay triangles in a consistent way
- clipping the generated Voronoi cell polygons to a reasonable bounding area)
Delaunay and Voronoi diagrams of 20 points (15 ms)
Voronoi diagram of 100 points (63 ms)
Voronoi diagram of 100,000 points (7.3 sec)
The JTS implementation scales very well - a Delaunay/Voronoi diagram of 1 million points computes in under 5 minutes. The one downside is memory usage. As usual, Java is quite memory-hungry - a 1 M point Delaunay takes around 700 MB. This seems excessive, even for Java. Hopefully some memory profiling may reveal that this can be reduced by some tuning of the class structures involved.
Even better, the Delaunay/Voronoi algorithm seems to be quite robust, even though no special attempt has been made to provide high-precision or otherwise robust implementations of some of the key predicates (inCircle and orientation). This may yet prove to be an issue for some inputs, but at this point it seems possible to claim that for non-pathological inputs the algorithms execute correctly.