Have fun!
This commit is contained in:
parent
dd054e9016
commit
ad107a6910
36
src/bin/flat/float_fun.rs
Normal file
36
src/bin/flat/float_fun.rs
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
use crate::FloatExt2;
|
use crate::float_fun::FloatExt2;
|
||||||
|
|
||||||
pub struct LinearLimiter {
|
pub struct LinearLimiter {
|
||||||
pub min: f32,
|
pub min: f32,
|
||||||
|
|
|
||||||
|
|
@ -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) }
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user