use crate::geometry::Point;
use num_traits::float::Float;
pub fn extract_x<F: Float>(ps: &[Point<F>]) -> Vec<F> {
ps.iter().map(|p| p.x).collect()
}
pub fn extract_y<F: Float>(ps: &[Point<F>]) -> Vec<F> {
ps.iter().map(|p| p.y).collect()
}
pub fn sort_by_x<F: Float>(ps: &mut [Point<F>]) {
ps.sort_by(|a, b| a.x.partial_cmp(&b.x).unwrap());
}
pub fn sort_by_y<F: Float>(ps: &mut [Point<F>]) {
ps.sort_by(|a, b| a.y.partial_cmp(&b.y).unwrap());
}
pub fn convert_to_points<F: Float>(ps: &[[F; 2]]) -> Option<Vec<Point<F>>> {
Some(ps.iter().map(|p| Point::new(p[0], p[1])).collect())
}