1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
use num_traits::One; use std::ops::{Add, Div, Mul, Sub}; pub fn lerp<T, U, V, F>(a: T, b: T, f: F) -> T where for<'a> T: Sub<&'a T, Output = U>, U: Mul<F, Output = V>, V: Add<T, Output = T>, { (b - &a) * f + a } pub fn lerp_half<T, U>(a: T, b: T) -> U::Output where T: Add<Output = U> + One, U: Div, { (a + b) / (T::one() + T::one()) }