use glam::Vec3;
#[inline(always)]
pub fn modifier_shear(point: Vec3, shear: Vec3) -> Vec3 {
Vec3::new(
point.x,
shear.x * -point.x + point.y,
shear.z * -point.y + (shear.y * -point.x + point.z),
)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn zero_shear_is_identity() {
let p = Vec3::new(0.3, -0.7, 1.1);
assert_eq!(modifier_shear(p, Vec3::ZERO), p);
}
#[test]
fn shear_xy_moves_y_by_x() {
let p = Vec3::new(2.0, 1.0, 0.0);
let q = modifier_shear(p, Vec3::new(0.5, 0.0, 0.0));
assert!((q.y - 0.0).abs() < 1e-6);
assert_eq!(q.x, 2.0);
assert_eq!(q.z, 0.0);
}
}