top of page

Expressions

Expression for Overshoot

freq = 3;
decay = 5;

n = 0;
if (numKeys> 0) {
n = nearestKey (time) .index;
if (key (n) .time> time) n--;
}
if (n> 0) {
t = time - key (n) .time;
amp = velocityAtTime (key (n) .time - .001);
w = freq * Math.PI * 2;
value + amp * (Math.sin (t * w) /Math.exp (decay * t) / w);
} else
value

overshoot GIF.gif

Expression for Bounce

e = .7;
g = 5000;
nMax = 9;

n = 0;
if (numKeys> 0) {
n = nearestKey (time) .index;
if (key (n) .time> time) n--;
}
if (n> 0) {
t = time - key (n) .time;
v = -velocityAtTime (key (n) .time - .001) * e;
vl = length (v);
if (value instanceof Array) {
vu = (vl> 0)? normalize (v): [0,0,0];
} else {
vu = (v <0)? -1: 1;
}
tCur = 0;
segDur = 2 * vl / g;
tNext = segDur;
nb = 1; // number of bounces
while (tNext <t && nb <= nMax) {
vl * = e;
segDur * = e;
tCur = tNext;
tNext + = segDur;
nb ++
}
if (nb <= nMax) {
delta = t - tCur;
value + vu * delta * (vl - g * delta / 2);
} else {
value
}
} else
value

bounce GIF.gif

© 2021 by The Wild Meerkat

bottom of page