Have fun!

This commit is contained in:
numzero 2024-06-25 12:06:56 +03:00
parent dd054e9016
commit ad107a6910
3 changed files with 38 additions and 11 deletions

36
src/bin/flat/float_fun.rs Normal file
View File

@ -0,0 +1,36 @@
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::FloatExt2; use crate::float_fun::FloatExt2;
pub struct LinearLimiter { pub struct LinearLimiter {
pub min: f32, pub min: f32,

View File

@ -5,6 +5,7 @@ use glam::*;
mod riemann; mod riemann;
mod fns; mod fns;
mod float_fun;
use riemann::{Tens2, Decomp2, Metric, trace_iter}; use riemann::{Tens2, Decomp2, Metric, trace_iter};
use shape::Shape; use shape::Shape;
@ -680,13 +681,3 @@ fn test_tube_metric_derivs() {
} }
} }
} }
trait FloatExt2 {
fn lerp(&self, t: f32) -> f32;
fn inverse_lerp(&self, y: f32) -> f32;
}
impl FloatExt2 for (f32, f32) {
fn lerp(&self, t: f32) -> f32 { f32::lerp(self.0, self.1, t) }
fn inverse_lerp(&self, y: f32) -> f32 { f32::inverse_lerp(self.0, self.1, y) }
}