EaseOverview easing equations for sclang and scserver



Easing and tweening classes for scserver and sclang. Ported from the Cinder C++ framework - original equations by Robert Penner.


NOTE: All these expects an input 0-1 as first argument to .value. If you give it out-of-range values the behavior is undefined.


see EaseGallery helpfile for a graphical overview.

see below for examples.



EaseNone easing equation for a simple linear tweening with no easing


//--Quadratic

EaseInQuad easing equation for a quadratic (t^2) ease-in,

accelerating from zero velocity

EaseOutQuad easing equation for a quadratic (t^2) ease-out,

decelerating to zero velocity

EaseInOutQuad easing equation for a quadratic (t^2) ease-in/out,

accelerating until halfway, then decelerating

EaseOutInQuad easing equation for a quadratic (t^2) ease-out/in,

decelerating until halfway, then accelerating


//--Cubic

EaseInCubic easing equation function for a cubic (t^3) ease-in,

accelerating from zero velocity

EaseOutCubic easing equation for a cubic (t^3) ease-out,

decelerating to zero velocity

EaseInOutCubic easing equation for a cubic (t^3) ease-in/out,

accelerating until halfway, then decelerating

EaseOutInCubic easing equation for a cubic (t^3) ease-out/in,

decelerating until halfway, then accelerating


//--Quartic

EaseInQuart easing equation for a quartic (t^4) ease-in,

accelerating from zero velocity

EaseOutQuart easing equation for a quartic (t^4) ease-out,

decelerating to zero velocity

EaseInOutQuart easing equation for a quartic (t^4) ease-in/out,

accelerating until halfway, then decelerating

EaseOutInQuart easing equation for a quartic (t^4) ease-out/in,

decelerating until halfway, then accelerating


//--Quintic

EaseInQuint easing equation function for a quintic (t^5) ease-in,

accelerating from zero velocity

EaseOutQuint easing equation for a quintic (t^5) ease-out,

decelerating to zero velocity

EaseInOutQuint easing equation for a quintic (t^5) ease-in/out,

accelerating until halfway, then decelerating

EaseOutInQuint easing equation for a quintic (t^5) ease-out/in,

decelerating until halfway, then accelerating


//--Sine

EaseInSine easing equation for a sinusoidal (sin(t)) ease-in,

accelerating from zero velocity

EaseOutSine easing equation for a sinusoidal (sin(t)) ease-out,

decelerating from zero velocity

EaseInOutSine easing equation for a sinusoidal (sin(t)) ease-in/out,

accelerating until halfway, then decelerating

EaseOutInSine easing equation for a sinusoidal (sin(t)) ease-out/in,

decelerating until halfway, then accelerating


//--Exponential

EaseInExpo easing equation for an exponential (2^t) ease-in,

accelerating from zero velocity

EaseOutExpo easing equation for an exponential (2^t) ease-out,

decelerating from zero velocity

EaseInOutExpo easing equation for an exponential (2^t) ease-in/out,

accelerating until halfway, then decelerating

EaseOutInExpo easing equation for an exponential (2^t) ease-out/in,

decelerating until halfway, then accelerating


//--Circular

EaseInCirc easing equation for a circular (sqrt(1-t^2)) ease-in,

accelerating from zero velocity

EaseOutCirc easing equation for a circular (sqrt(1-t^2)) ease-out,

decelerating from zero velocity

EaseInOutCirc easing equation for a circular (sqrt(1-t^2)) ease-in/out,

accelerating until halfway, then decelerating

EaseOutInCirc easing equation for a circular (sqrt(1-t^2)) ease-out/in,

decelerating until halfway, then accelerating


//--Bounce

EaseInBounce(a) easing equation for a bounce (exponentially decaying parabolic bounce) ease-in,

accelerating from zero velocity.

the \a parameter controls overshoot, the default producing a 10% overshoot

EaseOutBounce(a) easing equation for a bounce (exponentially decaying parabolic bounce) ease-out,

decelerating from zero velocity.

the \a parameter controls overshoot, the default producing a 10% overshoot

EaseInOutBounce(a) easing equation for a bounce (exponentially decaying parabolic bounce) ease-in/out,

accelerating until halfway, then decelerating.

the \a parameter controls overshoot, the default producing a 10% overshoot

EaseOutInBounce(a) easing equation for a bounce (exponentially decaying parabolic bounce) ease-out/in,

decelerating until halfway, then accelerating.

the \a parameter controls overshoot, the default producing a 10% overshoot


//--Back

EaseInBack(a) easing equation for a back (overshooting cubic easing: (a+1)*t^3 - a*t^2) ease-in,

accelerating from zero velocity.

the \a parameter controls overshoot, the default producing a 10% overshoot

EaseOutBack(a) easing equation for a back (overshooting cubic easing: (a+1)*t^3 - a*t^2) ease-out,

decelerating from zero velocity.

the \a parameter controls overshoot, the default producing a 10% overshoot

EaseInOutBack(a) easing equation for a back (overshooting cubic easing: (a+1)*t^3 - a*t^2) ease-in/out,

accelerating until halfway, then decelerating.

the \a parameter controls overshoot, the default producing a 10% overshoot

EaseOutInBack(a) easing equation for a back (overshooting cubic easing: (a+1)*t^3 - a*t^2) ease-out/in,

decelerating until halfway, then accelerating.

the \a parameter controls overshoot, the default producing a 10% overshoot


//--Elastic

EaseInElastic(a, p) easing equation for an elastic (exponentially decaying sine wave) ease-in,

accelerating from zero velocity.

the \a parameter is amplitude and \p is period.

EaseOutElastic(a, p) easing equation for an elastic (exponentially decaying sine wave) ease-out,

decelerating from zero velocity.

the \a parameter is amplitude and \p is period.

EaseInOutElastic(a, p) easing equation for an elastic (exponentially decaying sine wave) ease-in/out,

accelerating until halfway, then decelerating.

the \a parameter is amplitude and \p is period.

EaseOutInElastic(a, p) easing equation for an elastic (exponentially decaying sine wave) ease-out/in,

decelerating until halfway, then accelerating.

the \a parameter is amplitude and \p is period.


//Atan

EaseInAtan(a) easing equation for an atan ease-in,

accelerating from zero velocity.

the \a parameter is curvature.

EaseOutAtan(a) easing equation for an atan ease-out,

decelerating from zero velocity.

the \a parameter is curvature.

EaseInOutAtan(a) easing equation for an atan ease-in/out,

accelerating until halfway, then decelerating.

the \a parameter is curvature.



//--

e= EaseInAtan(15);

e.value(0) //0 at the start

e.value(0.5) //what is the value in the middle of the curve

e.value(1) //1 at the end


//this can also be written like this to save us from storing the ease object in a variable

EaseInAtan.value(0.5)


//or shorter

EaseInAtan.(0.5)


//to set the curvature you give a second argument

EaseInAtan.(0.5, 10)


//or in the other notation

e= EaseInAtan(10)

e.value(0.5)



//--ramping

a= (0..100)/100; //an array with 100 values 0.0-1.0

a.collect{|t| EaseInQuad.(t)}.plot;

a.collect{|t| EaseOutQuad.(t)}.plot;

a.collect{|t| EaseInOutQuad.(t)}.plot;



//--similar in sclang and inside synthdefs

s.boot

{SinOsc.ar(EaseInOutExpo.kr(MouseX.kr)*500+500, 0, 0.1)}.play

a.collect{|x| EaseInOutExpo.(x)}.plot



//--rates are flexibe when used inside synthdefs

{SinOsc.ar(EaseInAtan.(SinOsc.kr(1)).linlin(0, 1, 500, 5000), 0, 0.1)}.play //becomes kr

{SinOsc.ar(EaseInAtan.kr(SinOsc.ar(1)).linlin(0, 1, 500, 5000), 0, 0.1)}.play //kr with ar arg

{SinOsc.ar(EaseInAtan.ar(SinOsc.kr(1)).linlin(0, 1, 500, 5000), 0, 0.1)}.play //ar with kr arg



//--nesting

a= (0..100)/100; //an array with 100 values 0.0-1.0

a.collect{|t| EaseInAtan.(EaseInAtan.(t))}.plot



//--creating an object style

a= (0..100)/100; //an array with 100 values 0.0-1.0

e= EaseInAtan(3);

f= EaseInAtan(30);

a.collect{|t| [e.(t), f.(t)]}.plot



//even this works...

e.(a).plot




//--use mouse to test

s.boot

a= {SinOsc.ar(EaseInOutQuint.ar(LFSaw.ar(MouseX.kr(1, 9, 1)).range(0, 1)).linexp(0, 1, 400, 800), 0, 0.1)}.play

a.free

a= {SinOsc.ar(EaseOutInExpo.ar(LFSaw.ar(MouseX.kr(1, 9, 1)).range(0, 1)).linexp(0, 1, 400, 800), 0, 0.1)}.play

a.free

a= {SinOsc.ar(EaseInAtan.ar(LFSaw.ar(MouseX.kr(1, 9, 1)).range(0, 1)).linexp(0, 1, 400, 800), 0, 0.1)}.play

a.free

a= {SinOsc.ar(EaseOutInElastic.ar(LFSaw.ar(MouseX.kr(1, 9, 1)).range(0, 1), MouseY.kr(1, 9, 1)).linexp(0, 1, 400, 800), 0, 0.1)}.play

a.free

a= {SinOsc.ar(EaseInBounce.ar(LFSaw.ar(MouseX.kr(1, 9, 1)).range(0, 1), MouseY.kr(1, 9, 1)).linexp(0, 1, 400, 800), 0, 0.1)}.play

a.free