use anyhow::Result;
use geomutil_triangulation::alpha_shape_2d;
use geomutil_util::{Point2D, points_bounding_box};
use plotters::prelude::*;
fn main() -> Result<()> {
let points = [
Point2D::new(0.0, 0.0),
Point2D::new(1.0, 0.0),
Point2D::new(1.0, 1.0),
Point2D::new(0.0, 1.0),
Point2D::new(3.0, 0.0),
Point2D::new(4.0, 0.0),
Point2D::new(4.0, 1.0),
Point2D::new(3.0, 1.0),
];
let shapes = alpha_shape_2d(&points, 1.25).unwrap();
let root = BitMapBackend::new("triangles.png", (800, 600)).into_drawing_area();
root.fill(&WHITE)?;
let (low_boundary, up_boundary) = points_bounding_box(&points).unwrap();
println!("{}", shapes.len());
let mut chart = ChartBuilder::on(&root).margin(10).build_cartesian_2d(
low_boundary.x - 1.0..up_boundary.x + 1.0,
low_boundary.y - 1.0..up_boundary.y + 1.0,
)?; chart.configure_mesh().draw()?;
for triangle in shapes.iter().map(|s| s.triangles.clone()).flatten() {
let line_series = LineSeries::new(
vec![
triangle.a.xy(),
triangle.b.xy(),
triangle.c.xy(),
triangle.a.xy(),
], BLACK.stroke_width(2), );
chart.draw_series(line_series)?;
}
root.present()?;
Ok(())
}