1 module animate.animate.interpolator;
2 
3 import std.math;
4 
5 interface Interpolator
6 {
7     double interpolate(double progress);
8 }
9 
10 class LinearInterpolator : Interpolator
11 {
12     double interpolate(double progress)
13     {
14         return progress;
15     }
16 }
17 
18 class CosineInterpolator : Interpolator
19 {
20     double interpolate(double progress)
21     {
22         return cos(PI * 2 * progress);
23     }
24 }
25 
26 class SineInterpolator : Interpolator
27 {
28     double interpolate(double progress)
29     {
30         return sin(PI * 2 * progress);
31     }
32 }
33 
34 class AccelerationInterpolator : Interpolator
35 {
36     double interpolate(double progress)
37     {
38         return progress * progress;
39     }
40 }
41 
42 class DecelerationInterpolator : Interpolator
43 {
44     double interpolate(double progress)
45     {
46         return 1.0 - (1.0 - progress)^^2;
47     }
48 }
49 
50 class AccelerationDecelerationInterpolator : Interpolator
51 {
52     double interpolate(double progress)
53     {
54         return ((cos(progress + 1) * PI) / 2.0) + .5;
55     }
56 }