34 using Fn = float (*)(float);
36 static constexpr float kPi = 3.14159265358979323846f;
39 static float Linear(
float t) {
return t; }
43 static float EaseOutQuad(
float t) {
return 1.f - (1.f - t) * (1.f - t); }
45 return t < 0.5f ? 2.f * t * t : 1.f - std::pow(-2.f * t + 2.f, 2.f) / 2.f;
50 static float EaseOutCubic(
float t) {
return 1.f - std::pow(1.f - t, 3.f); }
52 return t < 0.5f ? 4.f * t * t * t : 1.f - std::pow(-2.f * t + 2.f, 3.f) / 2.f;
57 static float EaseOutQuart(
float t) {
return 1.f - std::pow(1.f - t, 4.f); }
59 return t < 0.5f ? 8.f * t * t * t * t : 1.f - std::pow(-2.f * t + 2.f, 4.f) / 2.f;
63 static float EaseInQuint(
float t) {
return t * t * t * t * t; }
64 static float EaseOutQuint(
float t) {
return 1.f - std::pow(1.f - t, 5.f); }
66 return t < 0.5f ? 16.f * t * t * t * t * t : 1.f - std::pow(-2.f * t + 2.f, 5.f) / 2.f;
70 static float EaseInSine(
float t) {
return 1.f - std::cos((t *
kPi) / 2.f); }
75 static float EaseInExpo(
float t) {
return t <= 0.f ? 0.f : std::pow(2.f, 10.f * t - 10.f); }
76 static float EaseOutExpo(
float t) {
return t >= 1.f ? 1.f : 1.f - std::pow(2.f, -10.f * t); }
78 if (t <= 0.f)
return 0.f;
79 if (t >= 1.f)
return 1.f;
80 return t < 0.5f ? std::pow(2.f, 20.f * t - 10.f) / 2.f
81 : (2.f - std::pow(2.f, -20.f * t + 10.f)) / 2.f;
85 static float EaseInCirc(
float t) {
return 1.f - std::sqrt(1.f - t * t); }
86 static float EaseOutCirc(
float t) {
return std::sqrt(1.f - (t - 1.f) * (t - 1.f)); }
89 ? (1.f - std::sqrt(1.f - std::pow(2.f * t, 2.f))) / 2.f
90 : (std::sqrt(1.f - std::pow(-2.f * t + 2.f, 2.f)) + 1.f) / 2.f;
95 const float c1 = 1.70158f, c3 = c1 + 1.f;
96 return c3 * t * t * t - c1 * t * t;
99 const float c1 = 1.70158f, c3 = c1 + 1.f;
100 return 1.f + c3 * std::pow(t - 1.f, 3.f) + c1 * std::pow(t - 1.f, 2.f);
103 const float c1 = 1.70158f, c2 = c1 * 1.525f;
105 ? (std::pow(2.f * t, 2.f) * ((c2 + 1.f) * 2.f * t - c2)) / 2.f
106 : (std::pow(2.f * t - 2.f, 2.f) * ((c2 + 1.f) * (t * 2.f - 2.f) + c2) + 2.f) / 2.f;
111 if (t <= 0.f)
return 0.f;
112 if (t >= 1.f)
return 1.f;
113 const float c4 = (2.f *
kPi) / 3.f;
114 return -std::pow(2.f, 10.f * t - 10.f) * std::sin((t * 10.f - 10.75f) * c4);
117 if (t <= 0.f)
return 0.f;
118 if (t >= 1.f)
return 1.f;
119 const float c4 = (2.f *
kPi) / 3.f;
120 return std::pow(2.f, -10.f * t) * std::sin((t * 10.f - 0.75f) * c4) + 1.f;
123 if (t <= 0.f)
return 0.f;
124 if (t >= 1.f)
return 1.f;
125 const float c5 = (2.f *
kPi) / 4.5f;
127 ? -(std::pow(2.f, 20.f * t - 10.f) * std::sin((20.f * t - 11.125f) * c5)) / 2.f
128 : (std::pow(2.f, -20.f * t + 10.f) * std::sin((20.f * t - 11.125f) * c5)) / 2.f + 1.f;
133 const float n1 = 7.5625f, d1 = 2.75f;
134 if (t < 1.f / d1)
return n1 * t * t;
135 else if (t < 2.f / d1) { t -= 1.5f / d1;
return n1 * t * t + 0.75f; }
136 else if (t < 2.5f / d1){ t -= 2.25f / d1;
return n1 * t * t + 0.9375f; }
137 else { t -= 2.625f/ d1;
return n1 * t * t + 0.984375f; }
Easing curves for animation, as pure functions of normalized time.
static float EaseOutBack(float t)
static float EaseOutCirc(float t)
static float EaseOutExpo(float t)
static float EaseInSine(float t)
static float EaseOutSine(float t)
static float EaseInOutQuint(float t)
static float EaseInQuad(float t)
static float EaseOutElastic(float t)
static float Linear(float t)
static float EaseInOutExpo(float t)
static float EaseOutQuint(float t)
static constexpr float kPi
static float EaseInOutCubic(float t)
static float EaseInBounce(float t)
static float EaseInOutBack(float t)
static float EaseOutQuad(float t)
static float EaseInBack(float t)
static float EaseInExpo(float t)
static float EaseOutCubic(float t)
static float EaseInQuart(float t)
static float EaseInCirc(float t)
static float EaseInElastic(float t)
static float EaseInOutQuad(float t)
static float EaseInCubic(float t)
static float EaseOutBounce(float t)
static float EaseInOutElastic(float t)
static float EaseInOutBounce(float t)
static float EaseInOutQuart(float t)
static float EaseInOutCirc(float t)
static float EaseInQuint(float t)
static float EaseInOutSine(float t)
static float EaseOutQuart(float t)