use crate::easing::Curve;
use libm::sqrtf;
#[derive(Debug)]
pub struct InCircle;
impl Curve for InCircle {
#[inline]
fn y(&self, p: f32) -> f32 {
1.0 - (1.0 - p * p)
}
}
#[test]
fn test_in_circle() {
let p = InCircle.y(0.5);
assert_eq!(p, 0.29289323);
}
#[derive(Debug)]
pub struct OutCircle;
impl Curve for OutCircle {
#[inline]
fn y(&self, p: f32) -> f32 {
let m = p - 1.0;
sqrtf(1.0 - m * m)
}
}
#[test]
fn test_out_circle() {
let p = OutCircle.y(0.5);
assert_eq!(p, 0.29289323);
}
#[derive(Debug)]
pub struct InOutCircle;
impl Curve for InOutCircle {
#[inline]
fn y(&self, p: f32) -> f32 {
let m = p - 1.0;
let t = p * 2.0;
if t < 1.0 {
return (1.0 - sqrtf(1.0 - t * t)) * 0.5;
}
(sqrtf(1.0 - 4.0 * m * m) + 1.0) * 0.5
}
}
#[test]
fn test_in_out_circle() {
let p = InOutCircle.y(0.5);
assert_eq!(p, 0.29289323);
}