use glam::{Vec2, Mat3};
pub struct Transformer;
impl Transformer {
pub fn sort_points(mut pts: [Vec2; 4]) -> [Vec2; 4] {
let center = (pts[0] + pts[1] + pts[2] + pts[3]) * 0.25;
pts.sort_by(|a, b| {
let angle_a = (a.y - center.y).atan2(a.x - center.x);
let angle_b = (b.y - center.y).atan2(b.x - center.x);
angle_a
.partial_cmp(&angle_b)
.unwrap_or(std::cmp::Ordering::Equal)
});
let tl_idx = pts
.iter()
.enumerate()
.min_by(|(_, a), (_, b)| {
(a.x + a.y)
.partial_cmp(&(b.x + b.y))
.unwrap_or(std::cmp::Ordering::Equal)
})
.map(|(i, _)| i)
.unwrap_or(0);
pts.rotate_left(tl_idx);
log::debug!(
"[Geom::Transform] - Points sorted: {:?}",
pts.map(|p| (p.x, p.y))
);
pts
}
pub fn get_homography(_src: [Vec2; 4], _dst_w: f32, _dst_h: f32) -> Mat3 {
Mat3::IDENTITY
}
}