19#ifndef _USE_MATH_DEFINES
20#define _USE_MATH_DEFINES
29T EasePowCurve(T x, T c)
31 return std::pow(x, 1.0 / c);
50T EaseQuadraticOut(T x)
52 return -(x * (x - 2));
59T EaseQuadraticInOut(T x)
67 return (-2 * x * x) + (4 * x) - 1;
99 return 0.5 * f * f * f + 1;
107 return x * x * x * x;
115 return f * f * f * (1 - x) + 1;
122T EaseQuarticInOut(T x)
126 return 8 * x * x * x * x;
131 return -8 * f * f * f * f + 1;
139 return x * x * x * x * x;
147 return f * f * f * f * f + 1;
154T EaseQuinticInOut(T x)
158 return 16 * x * x * x * x * x;
163 return 0.5 * f * f * f * f * f + 1;
171 return std::sin((x - 1) * M_PI_2) + 1;
178 return std::sin(x * M_PI_2);
185 return 0.5 * (1 - std::cos(x * M_PI));
192 return 1 - std::sqrt(1 - (x * x));
197T EaseCircularOut(T x)
199 return std::sqrt((2 - x) * x);
206T EaseCircularInOut(T x)
210 return 0.5 * (1 - std::sqrt(1 - 4 * (x * x)));
214 return 0.5 * (std::sqrt(-((2 * x) - 3) * ((2 * x) - 1)) + 1);
220T EaseExponentialIn(T x)
222 return (x == 0.0) ? x : std::pow(2, 10 * (x - 1));
227T EaseExponentialOut(T x)
229 return (x == 1.0) ? x : 1 - std::pow(2, -10 * x);
236T EaseExponentialInOut(T x)
238 if(x == 0.0 || x == 1.0)
return x;
242 return 0.5 * std::pow(2, (20 * x) - 10);
246 return -0.5 * std::pow(2, (-20 * x) + 10) + 1;
254 return std::sin(13 * M_PI_2 * x) * std::pow(2, 10 * (x - 1));
261 return std::sin(-13 * M_PI_2 * (x + 1)) * std::pow(2, -10 * x) + 1;
268T EaseElasticInOut(T x)
272 return 0.5 * std::sin(13 * M_PI_2 * (2 * x)) * std::pow(2, 10 * ((2 * x) - 1));
276 return 0.5 * (std::sin(-13 * M_PI_2 * ((2 * x - 1) + 1)) * std::pow(2, -10 * (2 * x - 1)) + 2);
284 return x * x * x - x * std::sin(x * M_PI);
292 return 1 - (f * f * f - f * std::sin(f * M_PI));
304 return 0.5 * (f * f * f - f * std::sin(f * M_PI));
308 T f = (1 - (2*x - 1));
309 return 0.5 * (1 - (f * f * f - f * std::sin(f * M_PI))) + 0.5;
318 return (121 * x * x)/16.0;
322 return (363/40.0 * x * x) - (99/10.0 * x) + 17/5.0;
326 return (4356/361.0 * x * x) - (35442/1805.0 * x) + 16061/1805.0;
330 return (54/5.0 * x * x) - (513/25.0 * x) + 268/25.0;
337 return 1 - EaseBounceOut(1 - x);
341T EaseBounceInOut(T x)
345 return 0.5 * EaseBounceIn(x*2);
349 return 0.5 * EaseBounceOut(x * 2 - 1) + 0.5;