From 529d4ac7db3e02be027270523e940b79c6fe0723 Mon Sep 17 00:00:00 2001 From: numzero Date: Sat, 14 Sep 2024 22:41:03 +0300 Subject: [PATCH] Merge float_fun into mathx --- src/bin/flat/float_fun.rs | 40 --------------------------------------- src/bin/flat/fns.rs | 2 +- src/bin/flat/main.rs | 1 - src/mathx.rs | 36 ++++++++++++++++++++++++++++++++++- 4 files changed, 36 insertions(+), 43 deletions(-) delete mode 100644 src/bin/flat/float_fun.rs diff --git a/src/bin/flat/float_fun.rs b/src/bin/flat/float_fun.rs deleted file mode 100644 index e9eb4c3..0000000 --- a/src/bin/flat/float_fun.rs +++ /dev/null @@ -1,40 +0,0 @@ -use glam::FloatExt; - -mod bounds { - pub trait Pair {} - - impl Pair for (T, T) {} -} - -pub trait FloatExt2: bounds::Pair { - fn lerp(self, t: T) -> T; - fn inverse_lerp(self, y: T) -> T; -} - -impl FloatExt2 for (F, F) { - fn lerp(self, t: F) -> F { - F::lerp(self.0, self.1, t) - } - fn inverse_lerp(self, y: F) -> F { - F::inverse_lerp(self.0, self.1, y) - } -} - -#[cfg(test)] -mod test { - use super::FloatExt2; - - #[test] - fn test_lerp() { - assert_eq!((3., 7.).lerp(-0.5), 1.); - assert_eq!((3., 7.).lerp(0.0), 3.); - assert_eq!((3., 7.).lerp(0.5), 5.); - assert_eq!((3., 7.).lerp(1.0), 7.); - assert_eq!((3., 7.).lerp(1.5), 9.); - assert_eq!((3., 7.).inverse_lerp(1.), -0.5); - assert_eq!((3., 7.).inverse_lerp(3.), 0.0); - assert_eq!((3., 7.).inverse_lerp(5.), 0.5); - assert_eq!((3., 7.).inverse_lerp(7.), 1.0); - assert_eq!((3., 7.).inverse_lerp(9.), 1.5); - } -} diff --git a/src/bin/flat/fns.rs b/src/bin/flat/fns.rs index 077820b..491df0d 100644 --- a/src/bin/flat/fns.rs +++ b/src/bin/flat/fns.rs @@ -1,4 +1,4 @@ -use crate::float_fun::FloatExt2; +use refraction::mathx::FloatExt2; pub trait Limiter { fn value(&self, x: f32) -> f32; diff --git a/src/bin/flat/main.rs b/src/bin/flat/main.rs index 26cac12..283f2f9 100644 --- a/src/bin/flat/main.rs +++ b/src/bin/flat/main.rs @@ -12,7 +12,6 @@ use tube::Space; use tube::Subspace::{Boundary, Inner, Outer}; use types::{Location, Object, Ray}; -mod float_fun; mod fns; mod ifaces; mod riemann; diff --git a/src/mathx.rs b/src/mathx.rs index 8176de7..93136ce 100644 --- a/src/mathx.rs +++ b/src/mathx.rs @@ -1,4 +1,24 @@ -use glam::{Mat2, Mat3}; +use glam::{FloatExt, Mat2, Mat3}; + +mod bounds { + pub trait Pair {} + + impl Pair for (T, T) {} +} + +pub trait FloatExt2: bounds::Pair { + fn lerp(self, t: T) -> T; + fn inverse_lerp(self, y: T) -> T; +} + +impl FloatExt2 for (F, F) { + fn lerp(self, t: F) -> F { + F::lerp(self.0, self.1, t) + } + fn inverse_lerp(self, y: F) -> F { + F::inverse_lerp(self.0, self.1, y) + } +} pub trait MatExt { fn orthonormalize(&self) -> Self; @@ -31,6 +51,20 @@ mod tests { use approx::assert_abs_diff_eq; use glam::{mat2, mat3, vec2, vec3}; + #[test] + fn test_lerp() { + assert_eq!((3., 7.).lerp(-0.5), 1.); + assert_eq!((3., 7.).lerp(0.0), 3.); + assert_eq!((3., 7.).lerp(0.5), 5.); + assert_eq!((3., 7.).lerp(1.0), 7.); + assert_eq!((3., 7.).lerp(1.5), 9.); + assert_eq!((3., 7.).inverse_lerp(1.), -0.5); + assert_eq!((3., 7.).inverse_lerp(3.), 0.0); + assert_eq!((3., 7.).inverse_lerp(5.), 0.5); + assert_eq!((3., 7.).inverse_lerp(7.), 1.0); + assert_eq!((3., 7.).inverse_lerp(9.), 1.5); + } + #[test] fn test_orthonormalize_2d() { assert_abs_diff_eq!(