#![forbid(unsafe_code)]
use delaunay::prelude::construction::{
SphericalDelaunayBuilder, SphericalDelaunayConstructionError, SphericalDelaunayValidationError,
};
#[derive(Debug, thiserror::Error)]
enum SphericalExampleError {
#[error(transparent)]
Construction(#[from] SphericalDelaunayConstructionError),
#[error(transparent)]
Validation(#[from] SphericalDelaunayValidationError),
}
fn main() -> Result<(), SphericalExampleError> {
demonstrate_s2()?;
demonstrate_s3()?;
Ok(())
}
fn demonstrate_s2() -> Result<(), SphericalExampleError> {
let points = [
[1.0, 1.0, 1.0],
[1.0, -1.0, -1.0],
[-1.0, 1.0, -1.0],
[-1.0, -1.0, 1.0],
];
let triangulation = SphericalDelaunayBuilder::<2>::try_new(points)?.build()?;
triangulation.validate()?;
println!("S^2 Delaunay triangulation:");
println!(" ambient dimension: {}", triangulation.ambient_dimension());
println!(" vertices: {}", triangulation.number_of_vertices());
println!(
" triangular simplices: {}",
triangulation.number_of_simplices()
);
Ok(())
}
fn demonstrate_s3() -> Result<(), SphericalExampleError> {
let points = [
[1.0, 0.0, 0.0, 0.0],
[0.0, 1.0, 0.0, 0.0],
[0.0, 0.0, 1.0, 0.0],
[0.0, 0.0, 0.0, 1.0],
[-1.0, -1.0, -1.0, -1.0],
];
let triangulation = SphericalDelaunayBuilder::<3>::try_new(points)?.build()?;
triangulation.validate()?;
println!("\nS^3 Delaunay triangulation:");
println!(" ambient dimension: {}", triangulation.ambient_dimension());
println!(" vertices: {}", triangulation.number_of_vertices());
println!(
" tetrahedral simplices: {}",
triangulation.number_of_simplices()
);
Ok(())
}