tween
- Tween is a lightweight easing library. Written in C++03.
- Tween provides optional memoization and chaining.
- Tween is self-contained. Only math.h header is required.
- Tween is cross-platform.
- Tween is header-only.
- Tween is tiny.
- Tween is zlib/libpng licensed.
double value, t01 = 0.5;
value = tween::bouncein( t01 ); // -> 0.234375
value = tween::bouncein( tween::quadin( t01) ); // -> 0.0273438
value = tween::bouncein( t01 ) * tween::quadin( t01 ); // -> 0.0585937
$tween: ./sample.out 28
BOUNCEIN
------------------------------------------------------------------------+$#####* 1
+*$$******$ 0
+*$***$$$$$*+ 0
+*$**$$*+ 0
+***$*+ 0
+*$*$*+ 0
+****+ 0
+**$*+ 0
+***+ 0
+***+ 0
+***+ 0
+***+ 0
+***+ 0
+***+ 0
+*$$$$$$$$$*+ +***+ 0
+*$$***********$$*+ +***+ 0
+*$$***$$$$$$$$$$$***$*+ +***+ 0
+*$$$$*+ +****$$*+ +*$$**$*+ ++*+ 0
$$$$$$$$$$$$******$$$$$$*$$*+ +*$**$$$*+ 0
*$$$$$$$$$$$######$$$$$$$+--------------------+$#$$++--------------------------- (v) 0
0.000000 0.000000 (t)
Min: 0; Max: 1; Avg: 0; Hit: 0; Lapse: 0s; Avg Hits/sec: 0; Cur: 0
$tween: ./sample.out -1 28
QUADIN* BOUNCEIN
-------------------------------------------------------------------------------- 1
0
0
0
0
0
0
0
0
0
0
0
0
0
+*$$$$$$$$$*+ 0
+*$$$$$$$$$$$*+ +*$***********$$$*+ 0
+*$$*************$$*+ +*$**$$$$$$$$$$$****$*+ 0
+*$$$*+ +*$***$$$$$$$$$$$$$***$$*+ +*$**$*+ +*$$$**$*+ 0
$$$$$$$$$$$$*****$$$$$$$**$$*+ +*$$***$$$$**$*+ +*$**$$$ 0
*$$$$$$$$$$$#####$$$$$$$#$+-----------------+$##$$$$#$+-------------------+$#$$* (v) 0
0.000000 0.000000 (t)
Min: 0; Max: 1; Avg: 0; Hit: 0; Lapse: 0s; Avg Hits/sec: 0; Cur: 0
// basics f(t) = t ; memoized
double linear( double dt01 );
// penner's f(t) = t^2 ; memoized
double quadin( double dt01 );
double quadout( double dt01 );
double quadinout( double dt01 );
// penner's f(t) = t^3 ; memoized
double cubicin( double dt01 );
double cubicout( double dt01 );
double cubicinout( double dt01 );
// penner's f(t) = t^4 ; memoized
double quartin( double dt01 );
double quartout( double dt01 );
double quartinout( double dt01 );
// penner's f(t) = t^5 ; memoized
double quintin( double dt01 );
double quintout( double dt01 );
double quintinout( double dt01 );
// penner's f(t) = sin(t) ; memoized
double sinein( double dt01 );
double sineout( double dt01 );
double sineinout( double dt01 );
// penner's f(t) = 2^t ; memoized
double expoin( double dt01 );
double expoout( double dt01 );
double expoinout( double dt01 );
// penner's f(t) = sqrt(1-t^2) ; memoized
double circin( double dt01 );
double circout( double dt01 );
double circinout( double dt01 );
// penner's exponentially decaying sine wave ; memoized
double elasticin( double dt01 );
double elasticout( double dt01 );
double elasticinout( double dt01 );
// penner's overshooting cubic easing f(t) = (s+1)*t^3 - s*t^2 ; memoized
double backin( double dt01 );
double backout( double dt01 );
double backinout( double dt01 );
// penner's exponentially decaying parabolic bounce ; memoized
double bouncein( double dt01 );
double bounceout( double dt01 );
double bounceinout( double dt01 );
// gapjumper's ; memoized
double sinesquare( double dt01 );
double exponential( double dt01 );
// terry schubring's ; memoized
double terrys1( double dt01 );
double terrys2( double dt01 );
double terrys3( double dt01 );
// lQuery's and tomas cepeda's ; memoized
double swing( double dt01 );
double sinpi2( double dt01 );
// modifiers
double ping( double dt01 );
double pong( double dt01 );
double pingpong( double dt01 );
double pongping( double dt01 );
template<typename EASE> double in( double dt01, EASE &ease );
template<typename EASE> double out( double dt01, EASE &ease );
template<typename EASE> double inout( double dt01, EASE &ease );
// generics
double ease( int type, double dt01, bool memoized = false );
const char *nameof( int type );
enum TYPE
{
LINEAR,
QUADIN, // t^2
QUADOUT,
QUADINOUT,
CUBICIN, // t^3
CUBICOUT,
CUBICINOUT,
QUARTIN, // t^4
QUARTOUT,
QUARTINOUT,
QUINTIN, // t^5
QUINTOUT,
QUINTINOUT,
SINEIN, // sin(t)
SINEOUT,
SINEINOUT,
EXPOIN, // 2^t
EXPOOUT,
EXPOINOUT,
CIRCIN, // sqrt(1-t^2)
CIRCOUT,
CIRCINOUT,
ELASTICIN, // exponentially decaying sine wave
ELASTICOUT,
ELASTICINOUT,
BACKIN, // overshooting cubic easing: (s+1)*t^3 - s*t^2
BACKOUT,
BACKINOUT,
BOUNCEIN, // exponentially decaying parabolic bounce
BOUNCEOUT,
BOUNCEINOUT,
SINESQUARE, // gapjumper's
EXPONENTIAL, // gapjumper's
SCHUBRING1, // terry schubring's formula 1
SCHUBRING2, // terry schubring's formula 2
SCHUBRING3, // terry schubring's formula 3
SINPI2, // tomas cepeda's
SWING, // tomas cepeda's & lquery's
TOTAL,
UNDEFINED
};