Skip to content

Commit

Permalink
Define constrained/unconstrained separatey; Fix bib capitalisation; M…
Browse files Browse the repository at this point in the history
…ention programming languages
  • Loading branch information
DanielVandH committed Sep 26, 2024
1 parent 8697a95 commit 918f87a
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 5 deletions.
2 changes: 1 addition & 1 deletion paper/paper.bib
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ @book{cheng2013delaunay

@book{aurenhammer2013voronoi,
author = {Franz Aurenhammer and Rolf Klein and Der-Tsai Lee},
title = {Voronoi Diagrams and Delaunay Triangulations},
title = {Voronoi Diagrams and {D}elaunay Triangulations},
publisher = {World Scientific},
year = {2013},
url = {https://doi.org/10.1142/8685},
Expand Down
7 changes: 3 additions & 4 deletions paper/paper.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,22 +15,21 @@ authors:
affiliations:
- name: Department of Mathematics, Imperial College London, UK
index: 1
date: 10 September 2024
date: 26 September 2024
bibliography: paper.bib
---

# Summary

DelaunayTriangulation.jl is a feature-rich Julia [@bezanson2017julia] package for computing Delaunay triangulations and Voronoi tessellations. The package, amongst many other features, supports unconstrained and constrained triangulations, mesh refinement, clipped and centroidal Voronoi tessellations, power diagrams, and dynamic updates. Thanks to the speed and genericity of Julia, the package is both performant and robust---making use of [AdaptivePredicates.jl](https://github.com/JuliaGeometry/AdaptivePredicates.jl) [@churavy2024adaptive; @shewchuk1997adaptive] and [ExactPredicates.jl](https://github.com/lairez/ExactPredicates.jl) [@lairez2024exact] for computing predicates with robust arithmetic---while still allowing for generic representations of geometric primitives.

Given a set of points $\mathcal P$, edges $\mathcal E$, and piecewise linear boundaries $\mathcal B$ together defining some domain $\Omega$, a _Delaunay triangulation_ is a subdivision of this domain into triangles. The vertices of the triangles come from $\mathcal P$, and each of the edges in $\mathcal E$ and $\mathcal B$ are present as an edge of some triangle [@cheng2013delaunay; @aurenhammer2013voronoi]. The boundaries $\mathcal B$ may also be given as parametric curves, in which case they are discretised until they accurately approximate the curved boundary [@gosselin2009delaunay]. A related geometric structure is the _Voronoi tessellation_ that partitions the plane into convex polygons for each $p \in \mathcal P$ such that, for a given polygon, each point in that polygon is closer to the associated polygon's point than to any other $q \in \mathcal P$ [@cheng2013delaunay; @aurenhammer2013voronoi]. Weighted triangulations and power diagrams are generalisations of these structures that allow for the inclusion of weights associated with the points [@cheng2013delaunay]. A more detailed description of these mathematical details can be found in the package's [documentation](https://juliageometry.github.io/DelaunayTriangulation.jl/stable/math/overview/).
Given a set of points $\mathcal P$, a _Delaunay triangulation_ is a subdivision of the convex hull of $\mathcal P$ into triangles, with the vertices of the triangles coming from $\mathcal P$, constructed such that no triangle's circumcircle contains any point from $\mathcal P$ into its interior [@cheng2013delaunay; @aurenhammer2013voronoi]. A _constrained Delaunay triangulation_ extends this definition to additionally allow for edges $\mathcal E$ and piecewise linear boundaries $\mathcal B$ to be included, ensuring that each segment from $\mathcal E$ and $\mathcal B$ is an edge of some triangle and the boundaries of the domain come from $\mathcal B$ [@cheng2013delaunay]. For constrained Delaunay triangulations, the triangles must still obey the empty circumcircle property above, except for allowing a point $p$ to be in a triangle $T$'s circumcircle if any line segment from $T$'s interior to $p$ intersects a segment from $\mathcal E$ or $\mathcal B$ [@cheng2013delaunay]. The boundaries $\mathcal B$ may also be given as parametric curves, in which case they are discretised until they accurately approximate the curved boundary [@gosselin2009delaunay]. A related geometric structure is the _Voronoi tessellation_ that partitions the plane into convex polygons for each $p \in \mathcal P$ such that, for a given polygon, each point in that polygon is closer to the associated polygon's point than to any other $q \in \mathcal P$ [@cheng2013delaunay; @aurenhammer2013voronoi]. Weighted triangulations and power diagrams are generalisations of these structures that allow for the inclusion of weights associated with the points [@cheng2013delaunay]. A more detailed description of these mathematical details can be found in the package's [documentation](https://juliageometry.github.io/DelaunayTriangulation.jl/stable/math/overview/).

# Statement of Need

Delaunay triangulations and Voronoi tessellations have applications in a myriad of fields. Delaunay triangulations have been used for point location [@mucke1999fast], solving differential equations [@golias1997delaunay; @ju2006adaptive], path planning [@yan2008path], etc. Voronoi tessellations are typically useful when there is some notion of _influence_ associated with a point, and have been applied to problems such as geospatial interpolation [@bobach2009natural], image processing [@du1999centroidal], and cell biology [@hermann2008delaunay; @wang2024calibration].

Several software packages with support for computing Delaunay triangulations and Voronoi tessellations in two dimensions already exist, such as [_Triangle_](https://www.cs.cmu.edu/~quake/triangle.html) [@shewchuk1996triangle], [_MATLAB_](https://uk.mathworks.com/help/matlab/computational-geometry.html?s_tid=CRUX_lftnav) [@MATLAB], [_SciPy_](https://docs.scipy.org/doc/scipy/tutorial/spatial.html) [@SciPy], [_CGAL_](https://www.cgal.org/) [@CGAL], and [_Gmsh_](https://gmsh.info/) [@GMSH]. There are also other Julia packages supporting some of these features, although none are as developed as DelaunayTriangulation.jl; a comparison with these other packages is given in DelaunayTriangulation.jl's [README](https://github.com/JuliaGeometry/DelaunayTriangulation.jl?tab=readme-ov-file#similar-packages). DelaunayTriangulation.jl supports many features not present in most of these other software packages, such as power diagrams and the triangulation of curve-bounded domains, and benefits from the high-performance of Julia to efficiently support many operations. Julia's multiple dispatch [@bezanson2017julia]
is leveraged to allow for complete customisation in how a user wishes to represent geometric primitives such as points and domain boundaries, a useful feature for allowing users to represent primitives in a way that suits their application without needing to sacrifice performance. The [documentation](https://juliageometry.github.io/DelaunayTriangulation.jl/stable/) lists many more features, including the package's ability to represent a wide range of domains, even those that are disjoint and with holes.
Several software packages with support for computing Delaunay triangulations and Voronoi tessellations in two dimensions already exist, such as [_Triangle_](https://www.cs.cmu.edu/~quake/triangle.html) in C [@shewchuk1996triangle], [_MATLAB_](https://uk.mathworks.com/help/matlab/computational-geometry.html?s_tid=CRUX_lftnav) [@MATLAB], [_SciPy_](https://docs.scipy.org/doc/scipy/tutorial/spatial.html) [@SciPy] in Python, [_CGAL_](https://www.cgal.org/) [@CGAL] in C++, and [_Gmsh_](https://gmsh.info/) [@GMSH] which has interfaces in several languages. There are also other Julia packages supporting some of these features, although none is as developed as DelaunayTriangulation.jl; a comparison with these other software packages is given in DelaunayTriangulation.jl's [README](https://github.com/JuliaGeometry/DelaunayTriangulation.jl?tab=readme-ov-file#similar-packages). DelaunayTriangulation.jl supports many features not present in most of these other software packages, such as power diagrams and the triangulation of curve-bounded domains, and benefits from the high-performance of Julia to efficiently support many operations. Julia's multiple dispatch [@bezanson2017julia] is leveraged to allow for complete customisation in how a user wishes to represent geometric primitives such as points and domain boundaries, a useful feature for allowing users to represent primitives in a way that suits their application without needing to sacrifice performance. The [documentation](https://juliageometry.github.io/DelaunayTriangulation.jl/stable/) lists many more features, including the package's ability to represent a wide range of domains, even those that are disjoint and with holes.

DelaunayTriangulation.jl has already seen use in several areas. DelaunayTriangulation.jl was used for mesh generation in @vandenheuvel2023computational and is used for the `tricontourf`, `triplot`, and `voronoiplot` routines inside [Makie.jl](https://github.com/MakieOrg/Makie.jl) [@danisch2021makie]. The packages [FiniteVolumeMethod.jl](https://github.com/SciML/FiniteVolumeMethod.jl) [@vandenheuvel2024finite] and [NaturalNeighbours.jl](https://github.com/DanielVandH/NaturalNeighbours.jl) [@vandenheuvel2024natural] are also built directly on top of DelaunayTriangulation.jl.

Expand Down

0 comments on commit 918f87a

Please sign in to comment.