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 }