Skip to main content

use_delaunay/
lib.rs

1#![forbid(unsafe_code)]
2#![doc = include_str!("../README.md")]
3
4/// A Delaunay triangulation represented by indexed triangles.
5#[derive(Debug, Clone, PartialEq, Eq)]
6pub struct DelaunayTriangulation {
7    triangles: Vec<[usize; 3]>,
8}
9
10impl DelaunayTriangulation {
11    /// Creates a Delaunay triangulation record.
12    #[must_use]
13    pub const fn new(triangles: Vec<[usize; 3]>) -> Self {
14        Self { triangles }
15    }
16
17    /// Returns the indexed triangles.
18    #[must_use]
19    pub fn triangles(&self) -> &[[usize; 3]] {
20        &self.triangles
21    }
22
23    /// Returns the number of triangles.
24    #[must_use]
25    pub fn triangle_count(&self) -> usize {
26        self.triangles.len()
27    }
28
29    /// Returns a conservative upper bound for the number of triangle edges.
30    #[must_use]
31    pub fn edge_count_upper_bound(&self) -> usize {
32        self.triangles.len() * 3
33    }
34}
35
36#[cfg(test)]
37mod tests {
38    use super::DelaunayTriangulation;
39
40    #[test]
41    fn stores_delaunay_triangles() {
42        let triangulation = DelaunayTriangulation::new(vec![[0, 1, 2]]);
43
44        assert_eq!(triangulation.triangle_count(), 1);
45        assert_eq!(triangulation.edge_count_upper_bound(), 3);
46        assert_eq!(triangulation.triangles()[0], [0, 1, 2]);
47    }
48}