Skip to content

Commit

Permalink
Some links, and looser messaging about the package's comparison to ot…
Browse files Browse the repository at this point in the history
…her software
  • Loading branch information
DanielVandH committed Sep 10, 2024
1 parent 2a4acbf commit 7bec998
Showing 1 changed file with 4 additions and 4 deletions.
8 changes: 4 additions & 4 deletions paper/paper.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,18 @@ 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 [@churavy2024adaptive; @shewchuk1997adaptive] and ExactPredicates.jl [@lairez2024exact] for computing predicates with robust arithmetic---while still allowing for generic representations of geometric primitives.
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].

# 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_ [@shewchuk1996triangle], _MATLAB_ [@MATLAB], _SciPy_ [@SciPy], _CGAL_ [@CGAL], and _Gmsh_ [@GMSH]. DelaunayTriangulation.jl is the most feature-rich of these and benefits from the high-performance of Julia to efficiently support many operations such as centroidal Voronoi tessellations and curve-bounded refinement. 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 sacrfice performance. The [documentation](https://juliageometry.github.io/DelaunayTriangulation.jl/stable/) lists many more features, including its 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) [@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 a larger set of features than most of these other software packages, such as triangulation of curve-bounded domains and power diagrams, 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 sacrfice performance. The [documentation](https://juliageometry.github.io/DelaunayTriangulation.jl/stable/) lists many more features, including its 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 [@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.
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.

# Example

Expand Down

0 comments on commit 7bec998

Please sign in to comment.