use glam::{DVec2, FloatExt}; | |
pub use std::f64::consts::PI; | |
pub fn lin_map(value: f64, in_min: f64, in_max: f64, out_min: f64, out_max: f64) -> f64 { | |
((value - in_min) / (in_max - in_min)) * (out_max - out_min) + out_min | |
} | |
pub fn lerp(a: f64, b: f64, t: f64) -> f64 { | |
a.lerp(b, t) | |
} | |
pub fn vector_angle(u: DVec2, v: DVec2) -> f64 { | |
const EPS: f64 = 1e-12; | |
let sign = u.x * v.y - u.y * v.x; | |
if sign.abs() < EPS && (u + v).length_squared() < EPS * EPS { | |
// TODO: `u` can be scaled | |
return PI; | |
} | |
sign.signum() * (u.dot(v) / (u.length() * v.length())).acos() | |
} | |