- GitHub: Source code repository
This package finds the Delaunay
triangulation
for a set of points in arbitrary dimensions. It uses the Python
package
scipy.spatial.Delaunay
to perform the actual calculation.
This package is inspired by QHull.jl, which uses the same Python library.
using Delaunay
points = rand(10, 2)
mesh = delaunay(points)
mesh.points # the points
mesh.simplices # the simplices (triangles in 2d)
mesh.neighbors # neighbouring simplices of a simplex
mesh.vertex_to_simplex # find a simplex for a point
mesh.convex_hull # convex hull of the domain
mesh.vertex_neighbor_vertices # neighbouring vertices of a vertex
using GLMakie # or CairoMakie/WGLMakie/RPRMakie
color = rand(size(mesh.points, 1))
fig, ax, pl = Makie.poly(mesh.points, mesh.simplices, color=color, strokewidth=2, figure=(resolution=(800, 400),))
points = randn(100, 2)
mesh = delaunay(points)
color = rand(size(mesh.points, 1))
poly(fig[1, 2], mesh.points, mesh.simplices, color=color, strokewidth=2)
save("delaunay2d.png", fig)
using Delaunay
points = rand(100, 3)
mesh = delaunay(points)
using GeometryBasics
# Convert to tetrahedra faces
tetras = [GeometryBasics.TetrahedronFace(mesh.simplices[i, :]...) for i in 1:size(mesh.simplices, 1)]
points = Makie.to_vertices(mesh.points) # Use Makie to convert to Vector{Point3f}
m = GeometryBasics.Mesh(points, tetras) # create tetrahedra mesh
# Triangulate it, since Makie's mesh conversion currently doesn't handle tetrahedras itself
tris = GeometryBasics.triangle_mesh(m)
fig, ax, pl = Makie.mesh(tris, color=rand(length(tris.position)), colormap=(:viridis, 0.5), transparency=true)
# add wireframe plot, which actually supports tetrahedras...
wireframe!(ax, m, color=:white, transparency=true)
save("delaunay3d.png", fig)
The test cases contain also examples in higher dimensions.