Merge float_fun into mathx
This commit is contained in:
parent
4dcc256127
commit
529d4ac7db
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
use crate::float_fun::FloatExt2;
|
||||
use refraction::mathx::FloatExt2;
|
||||
|
||||
pub trait Limiter {
|
||||
fn value(&self, x: f32) -> f32;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
36
src/mathx.rs
36
src/mathx.rs
|
|
@ -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 {
|
||||
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!(
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user