Skip to main content

glam/f64/
float.rs

1// Generated from float.rs.tera template. Edit the template, not the generated file.
2
3use crate::float::FloatExt;
4
5impl FloatExt for f64 {
6    #[inline]
7    fn lerp(self, rhs: Self, t: Self) -> Self {
8        self * (1.0 - t) + rhs * t
9    }
10
11    #[inline]
12    fn inverse_lerp(a: Self, b: Self, v: Self) -> Self {
13        (v - a) / (b - a)
14    }
15
16    #[inline]
17    fn smoothstep(self, edge0: Self, edge1: Self) -> Self {
18        let t = ((self - edge0) / (edge1 - edge0)).clamp(0.0, 1.0);
19        t * t * (3.0 - 2.0 * t)
20    }
21
22    #[inline]
23    fn remap(self, in_start: Self, in_end: Self, out_start: Self, out_end: Self) -> Self {
24        let t = Self::inverse_lerp(in_start, in_end, self);
25        Self::lerp(out_start, out_end, t)
26    }
27
28    #[inline]
29    fn fract_gl(self) -> Self {
30        self - crate::f64::math::floor(self)
31    }
32
33    #[inline]
34    fn step(self, value: Self) -> Self {
35        if value < self {
36            0.0
37        } else {
38            1.0
39        }
40    }
41
42    #[inline]
43    fn saturate(self) -> Self {
44        self.clamp(0.0, 1.0)
45    }
46
47    #[inline]
48    fn move_towards(self, rhs: Self, d: Self) -> Self {
49        let a = rhs - self;
50        if a.abs() <= d {
51            rhs
52        } else {
53            self + a.signum() * d
54        }
55    }
56}