eazy_core/interpolation/rational/
quadratic.rs

1//! The Quadratic Interpolating Rational Curve.
2
3use crate::easing::Curve;
4
5use libm::sqrtf;
6
7/// The [`InRationalQuadratic`] Curve.
8#[derive(Debug)]
9pub struct InRationalQuadratic;
10
11impl Curve for InRationalQuadratic {
12  #[inline(always)]
13  fn y(&self, p: f32) -> f32 {
14    p * p / (2.0 * p * p - 2.0 * p + 1.0)
15  }
16}
17
18#[test]
19fn test_in_rational_quadratic() {
20  let p = InRationalQuadratic.y(1.0);
21
22  assert_eq!(p, 1.0);
23}
24
25/// The [`OutRationalQuadratic`] Curve.
26#[derive(Debug)]
27pub struct OutRationalQuadratic;
28
29impl Curve for OutRationalQuadratic {
30  #[inline(always)]
31  fn y(&self, p: f32) -> f32 {
32    (p - sqrtf(p * (1.0 - p))) / (2.0 * p - 1.0)
33  }
34}
35
36#[test]
37fn test_out_rational_quadratic() {
38  let p = OutRationalQuadratic.y(1.0);
39
40  assert_eq!(p, 1.0);
41}