use shape_core::{Point, PointSet, Polygon, Real};
use std::cmp::Ordering::Equal;
use std::collections::BTreeSet;
use std::fmt::Debug;
use std::ops::AddAssign;
#[derive(Debug)]
pub struct FastConvexHull<T> {
bounds: Vec<Point<T>>,
inners: Vec<Point<T>>,
}
#[derive(Debug)]
pub struct ConvexHull<T> {
bounds: BTreeSet<Point<T>>,
inners: BTreeSet<Point<T>>,
}
mod solver;
impl<T> FastConvexHull<T> {
pub fn clear(&mut self) {
self.inners.clear();
}
pub fn bound_points(&self) -> impl Iterator<Item=Point<&T>> {
self.bounds.iter().map(|v| v.ref_inner())
}
pub fn inner_points(&self) -> impl Iterator<Item=Point<&T>> {
self.inners.iter().map(|v| v.ref_inner())
}
pub fn as_polygon(&self) -> Polygon<T> where T: Clone {
Polygon {
points_set: PointSet { points: self.bounds.clone() },
}
}
}