eazy_core/interpolation/piecewize/
quadratic.rs1use crate::easing::Curve;
4
5use libm::sqrtf;
6
7#[derive(Debug)]
20pub struct InPiecewizeQuadratic;
21
22impl Curve for InPiecewizeQuadratic {
23 #[inline(always)]
24 fn y(&self, p: f32) -> f32 {
25 if p < 0.5 {
26 return 2.0 * p * p;
27 }
28
29 2.0 * p * (2.0 - p) - 1.0
30 }
31}
32
33#[test]
34fn test_in_piecewize_quadratic() {
35 let p = InPiecewizeQuadratic.y(1.0);
36
37 assert_eq!(p, 1.0);
38}
39
40#[derive(Debug)]
53pub struct OutPiecewizeQuadratic;
54
55impl Curve for OutPiecewizeQuadratic {
56 #[inline(always)]
57 fn y(&self, p: f32) -> f32 {
58 if p < 0.5 {
59 return sqrtf(0.5 * p);
60 }
61
62 1.0 - sqrtf(0.5 - 0.5 * p)
63 }
64}
65
66#[test]
67fn test_out_piecewize_quadratic() {
68 let p = OutPiecewizeQuadratic.y(1.0);
69
70 assert_eq!(p, 1.0);
71}