Merge float_fun into mathx

This commit is contained in:
numzero 2024-09-14 22:41:03 +03:00
parent 4dcc256127
commit 529d4ac7db
4 changed files with 36 additions and 43 deletions

View File

@ -1,40 +0,0 @@
use glam::FloatExt;
mod bounds {
pub trait Pair<T> {}
impl<T> Pair<T> for (T, T) {}
}
pub trait FloatExt2<T>: bounds::Pair<T> {
fn lerp(self, t: T) -> T;
fn inverse_lerp(self, y: T) -> T;
}
impl<F: FloatExt> FloatExt2<F> 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);
}
}

View File

@ -1,4 +1,4 @@
use crate::float_fun::FloatExt2; use refraction::mathx::FloatExt2;
pub trait Limiter { pub trait Limiter {
fn value(&self, x: f32) -> f32; fn value(&self, x: f32) -> f32;

View File

@ -12,7 +12,6 @@ use tube::Space;
use tube::Subspace::{Boundary, Inner, Outer}; use tube::Subspace::{Boundary, Inner, Outer};
use types::{Location, Object, Ray}; use types::{Location, Object, Ray};
mod float_fun;
mod fns; mod fns;
mod ifaces; mod ifaces;
mod riemann; mod riemann;

View File

@ -1,4 +1,24 @@
use glam::{Mat2, Mat3}; use glam::{FloatExt, Mat2, Mat3};
mod bounds {
pub trait Pair<T> {}
impl<T> Pair<T> for (T, T) {}
}
pub trait FloatExt2<T>: bounds::Pair<T> {
fn lerp(self, t: T) -> T;
fn inverse_lerp(self, y: T) -> T;
}
impl<F: FloatExt> FloatExt2<F> 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 { pub trait MatExt {
fn orthonormalize(&self) -> Self; fn orthonormalize(&self) -> Self;
@ -31,6 +51,20 @@ mod tests {
use approx::assert_abs_diff_eq; use approx::assert_abs_diff_eq;
use glam::{mat2, mat3, vec2, vec3}; 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] #[test]
fn test_orthonormalize_2d() { fn test_orthonormalize_2d() {
assert_abs_diff_eq!( assert_abs_diff_eq!(