| Crates.io | delaunay |
| lib.rs | delaunay |
| version | 0.7.0 |
| created_at | 2022-03-29 03:49:32.969311+00 |
| updated_at | 2026-01-13 08:09:34.210374+00 |
| description | A d-dimensional Delaunay triangulation library with float coordinate support |
| homepage | https://github.com/acgetchell/delaunay |
| repository | https://github.com/acgetchell/delaunay |
| max_upload_size | |
| id | 558342 |
| size | 4,863,928 |
D-dimensional Delaunay triangulations in Rust, inspired by CGAL.
This library implements d-dimensional Delaunay triangulations in Rust. It is inspired by CGAL, which is a C++ library for computational geometry, and Spade, a Rust library that implements 2D Delaunay triangulations, Constrained Delaunay triangulations, and Voronoi diagrams. The goal of this library is to provide a lightweight alternative to CGAL for the Rust ecosystem.
See CHANGELOG.md for details.
The incremental Bowyer-Watson algorithm produces structurally valid triangulations but may contain local violations of the Delaunay empty circumsphere property in rare cases. These violations typically occur with:
Most triangulations satisfy the Delaunay property, and all structural invariants (TDS validity) are maintained. Full Delaunay property guarantees will require a future bistellar flip implementation, currently planned for v0.7.0+.
For details, see: Issue #120 Investigation
Validation: You can verify your triangulation meets your requirements using the library's 4-level validation hierarchy:
dt.tds().is_valid()) - Structural correctness (expected to pass when using public APIs; not affected by Issue #120)dt.as_triangulation().is_valid()) - Manifold topology + Euler characteristicdt.is_valid()) - Delaunay property only (may fail in rare cases per Issue #120)dt.validate()) - Elements + structure + topology + Delaunay propertyLevel 3 topology validation is parameterized by TopologyGuarantee (default: Pseudomanifold).
To enable stricter PL-manifold checks, set TopologyGuarantee::PLManifold (adds vertex-link validation).
During incremental insertion, the automatic Level 3 validation pass is controlled by
ValidationPolicy (default: OnSuspicion).
use delaunay::prelude::*;
let mut dt: DelaunayTriangulation<_, (), (), 3> = DelaunayTriangulation::empty();
// Strictest topology checks (adds vertex-link validation):
dt.set_topology_guarantee(TopologyGuarantee::PLManifold);
// In tests/debugging, validate Level 3 after every insertion:
dt.set_validation_policy(ValidationPolicy::Always);
For applications requiring strict Delaunay guarantees:
dt.is_valid() (Level 4 only) or dt.validate() (Levels 1–4) to check your specific triangulationThis crate was originally maintained at https://github.com/oovm/shape-rs through version 0.1.0.
The original implementation provided basic Delaunay triangulation functionality.
Starting with version 0.3.4, maintenance transferred to this repository, which hosts a completely
rewritten d-dimensional implementation focused on computational geometry research applications.
We welcome contributions! Here's a 30-second quickstart:
# Clone and setup
git clone https://github.com/acgetchell/delaunay.git
cd delaunay
# Setup development environment (installs tools, builds project)
cargo install just
just setup # Installs all development tools and dependencies
# Development workflow
just fix # Apply formatters/auto-fixes (mutating)
just check # Lint/validators (non-mutating)
just ci # Full CI run (checks + all tests + examples + bench compile)
just ci-slow # CI + slow tests (100+ vertices)
just --list # See all available commands
just help-workflows # Show common workflow patterns
Try the examples:
just examples # Run all examples
# Or run specific examples:
cargo run --release --example triangulation_3d_20_points
cargo run --release --example convex_hull_3d_20_points
The examples/ directory contains several demonstrations:
triangulation_3d_20_points: 3D Delaunay triangulation with a stable 20-point random configurationconvex_hull_3d_20_points: 3D convex hull extraction and analysis on the same 20-point configurationinto_from_conversions: Demonstrates Into/From trait conversions and utilitiespoint_comparison_and_hashing: Demonstrates point comparison and hashing behaviormemory_analysis: Memory usage analysis for triangulations across dimensions with allocation trackingzero_allocation_iterator_demo: Performance comparison between allocation and zero-allocation iteratorsFor detailed documentation, sample output, and usage instructions for each example, see examples/README.md.
For comprehensive guidelines on development environment setup, testing, benchmarking, performance analysis, and development workflow, please see CONTRIBUTING.md.
This includes information about:
For a comprehensive list of academic references and bibliographic citations used throughout the library, see REFERENCES.md.
This repository contains an AGENTS.md file, which defines the canonical rules and invariants
for all AI coding assistants and autonomous agents working on this codebase.
AI tools (including ChatGPT, Claude, GitHub Copilot, Cursor, Warp, and CI repair agents) are
expected to read and follow AGENTS.md when proposing or applying changes.
Portions of this library were developed with the assistance of these AI tools:
All code was written and/or reviewed and validated by the author.