(Meditations at the Edge: Paper & Spirit,
Peter and Donna Thomas.)
Jonathan's papers
Most recent:
Greatest personal satisfaction: |
Also available is a set of full-page figures from the paper, which may be printed on transparencies for classroom use.
“I hate meshes. I cannot believe how hard this is. Geometry is hard.”DELAUNAY REFINEMENT MESH GENERATION ALGORITHMS construct meshes of triangles or tetrahedra (“elements”) that are suitable for applications like interpolation, rendering, terrain databases, geographic information systems, and most demandingly, the solution of partial differential equations by the finite element method. Delaunay refinement algorithms operate by maintaining a Delaunay or constrained Delaunay triangulation which is refined by inserting additional vertices until the mesh meets constraints on element quality and size. These algorithms simultaneously offer theoretical bounds on element quality, edge lengths, and spatial grading of element sizes; the ability to triangulate general straight-line domains (and not just polygons/polyhedra with holes); and truly satisfying performance in practice.
— David Baraff, Senior Research Scientist, Pixar Animation Studios
The following papers include theoretical treatments of Delaunay refinement
and discussions of the implementation details of
my two-dimensional mesh generator and Delaunay triangulator, Triangle,
and my three-dimensional mesh generator and Delaunay tetrahedralizer,
Pyramid.
See the
Triangle page for information about what Triangle can do,
or to obtain the C source code.
Suppose you want to tetrahedralize a three-dimensional domain. The result implies that if you insert enough extra vertices on the boundary of a facet to recover its edges in a Delaunay tetrahedralization (in other words, if you make it be ridge-protected) then you can recover the facet's interior for free—that is, you can force the triangular faces of the tetrahedralization to conform to the facet without inserting yet more vertices. This method of facet recovery is immediately useful for mesh generation or the interpolation of discontinuous functions. (The result also fills a theoretical hole in my dissertation by showing that it is safe to delete a vertex from a constrained Delaunay tetrahedralization in the circumstances where my “diametral lens” algorithm does so.)
I provide two algorithms for constructing constrained Delaunay triangulations that are fast enough to be useful in practice. One is based on bistellar flips (which swap a few tetrahedra for a few others), and one is a sweep algorithm. The flip algorithm is easier to implement, and is probably usually faster in practice. However, the sweep algorithm works on almost every input that has a CDT, whereas the flip algorithm works only on ridge-protected inputs. The question of which algorithm is asymptotically faster is tricky—the answer depends on the size of the output, and is different for a worst-case input than for a random input; see the flip algorithm paper for details. See the “Strange Complexity” paper to find out why the sweep algorithm doesn't work on every input that has a CDT.
By starting with a Delaunay (or regular) triangulation and
incrementally inserting facets one by one,
you can construct the constrained Delaunay
(or constrained regular) triangulation of a ridge-protected input in
O(nv
+ 1 log nv) time,
where nv is the number of input vertices
and d is the dimensionality.
In odd dimensions (including three dimensions, which is what I care about most)
this is within a factor of log nv of worst-case optimal.
The algorithm is likely to take only
O(nv log nv)
time in many practical cases.
Aimed at both programmers and computational geometers.
Discusses the general-dimensional case, but most useful in three dimensions.
To make robust geometric tests fast, I propose two new techniques (which can also be applied to other problems of numerical accuracy). First, I develop and prove the correctness of software-level algorithms for arbitrary precision floating-point arithmetic. These algorithms are refinements (especially with regard to speed) of algorithms suggested by Douglas Priest, and are roughly five times faster than the best available competing method when values of small or intermediate precision (hundreds or thousands of bits) are used. Second, I show how simple expressions (whose only operations are addition, subtraction, and multiplication) can be computed adaptively, trading off accuracy and speed as necessary to satisfy an error bound as quickly as possible. (This technique is probably applicable to any exact arithmetic scheme.) I apply these ideas to build fast, correct orientation and incircle tests in two and three dimensions, and to make robust the implementations of two- and three-dimensional Delaunay triangulation in Triangle and Pyramid. Detailed measurements show that in most circumstances, these programs run nearly as quickly when using my adaptive predicates as they do using nonrobust predicates.
See my
Robust Predicates page for more information
about this research, or to obtain C source code for
exact floating-point addition and multiplication
and the robust geometric predicates.