eazy_data/easing/backtracking/
back.rs1use crate::easing::Curve;
4
5const C1: f32 = 1.70158;
6const C2: f32 = C1 * 1.525;
7
8#[derive(Debug)]
21pub struct InBack;
22
23impl Curve for InBack {
24 #[inline(always)]
25 fn y(&self, p: f32) -> f32 {
26 let k = C1;
27
28 p * p * (p * (k + 1.0) - k)
29 }
30}
31
32#[test]
33fn test_in_back() {
34 let p = InBack.y(1.0);
35
36 assert_eq!(p, 1.0);
37}
38
39#[derive(Debug)]
52pub struct OutBack;
53
54impl Curve for OutBack {
55 #[inline(always)]
56 fn y(&self, p: f32) -> f32 {
57 let m = p - 1.0;
58 let k = C1;
59
60 1.0 + m * m * (m * (k + 1.0) + k)
61 }
62}
63
64#[test]
65fn test_out_back() {
66 let p = OutBack.y(1.0);
67
68 assert_eq!(p, 1.0);
69}
70
71#[derive(Debug)]
84pub struct InOutBack;
85
86impl Curve for InOutBack {
87 #[inline(always)]
88 fn y(&self, p: f32) -> f32 {
89 let m = p - 1.0;
90 let t = p * 2.0;
91 let k = C1 * C2;
92
93 if t < 1.0 {
94 return p * t * (t * (k + 1.0) - k);
95 }
96
97 1.0 + 2.0 * m * m * (2.0 * m * (k + 1.0) + k)
98 }
99}
100
101#[test]
102fn test_in_out_back() {
103 let p = InOutBack.y(1.0);
104
105 assert_eq!(p, 1.0);
106}