#delaunay-triangulation #hilbert-curve #2d-3d #triangle #points #graph #algorithm

simple_delaunay_lib

Implementation of 2D and 3D Delaunay algorithms in Rust

2 unstable releases

0.2.0 Feb 2, 2024
0.1.0 Jan 10, 2024

#642 in Algorithms

22 downloads per month

MIT license

110KB
2.5K SLoC

Delaunay triangulation and tetrahedralization in Rust

This software is an implementation of Delaunay 2D and 3D algorithms, for coding exercice. It is not fully optimized, but should at least work correctly.

Delaunay 2D

A list of 2D points is ordered along an Hilbert curve.

A first (non flat) triangle is inserted, then next points are inserted one by one.

For each point, a walk inside the Delaunay graph is done until a triangle containing the point is found. The point in inserted within the triangle, and a sequence of edge flips is done until the graph is fully Delaunay.

Delaunay 3D

A list of 3D points is ordered along an Hilbert curve.

A first (non flat) tetrahedron is inserted, then next points are inserted one by one.

For each point, a walk inside the Delaunay graph is done until a triangle containing the point is found. Then, every neighbor tetrahedron which sphere contains the point is removed. A new set of tetrahedra is then inserted to replace the hole in the graph (Bowyer-Watson algorithm).

Sources

Olivier Devilliers, Delaunay Triangulation, Theory vs practice, EuroCG12 link here

David F. Watson, Computing the n-dimensional Delaunay tessellation with application to Voronoi polytopes, The Computer Journal, vol. 24, no 2, 1981, p. 167-172

Adrian Bowyer, Computing Dirichlet tessellations, The Computer Journal, vol. 24, no 2, 1981, p. 162-166

SI, Hang, TetGen, a Delaunay-based quality tetrahedral mesh generator, ACM Transactions on Mathematical Software, 2015, vol. 41, no 2, p. 11. (This repository is not an implementation of TetGen)

Gavrilova, Marina, Ratschek, Helmut, et Rokne, Jon G. Exact computation of Delaunay and power triangulations, Reliable Computing, 2000, vol. 6, p. 39-60. (Not implemented in this repository)

Hilbert curve

Dependencies

~690KB