pub(crate) fn is_point_in_triangle(p: (f32, f32), v1: (f32, f32), v2: (f32, f32), v3: (f32, f32)) -> bool {
// Compute barycentric coordinates
let d1 = sign(p, v1, v2);
let d2 = sign(p, v2, v3);
let d3 = sign(p, v3, v1);
let has_neg = (d1 < 0.0) || (d2 < 0.0) || (d3 < 0.0);
let has_pos = (d1 > 0.0) || (d2 > 0.0) || (d3 > 0.0);
!(has_neg && has_pos)
}
pub(crate) fn sign(p1: (f32, f32), p2: (f32, f32), p3: (f32, f32)) -> f32 {
(p1.0 - p3.0) * (p2.1 - p3.1) - (p2.0 - p3.0) * (p1.1 - p3.1)
}