Saturday, September 29, 2012

Bounce Over Time



  • Ball Bounce Simulation
elev = degreesToRadians(45); //elevation
v = 2000; //velocity
e = .7; //elasticity
f = .5; //friction
g = 5000; //gravity
nMax = 9; //maximum number of bounces
tLaunch = 0; //launch time

vy = v*Math.sin(elev);
vx = v*Math.cos(elev);
if (time >= tLaunch){
t = time - tLaunch;
tCur = 0;
segDur = 2*vy/g;
tNext = segDur;
d = 0; // x distance traveled
nb = 0; // number of bounces
while (tNext < t && nb <= nMax){
d += vx*segDur;
vy *= e;
vx *= f;
segDur *= e;
tCur = tNext;
tNext += segDur;
nb++
}
if(nb <= nMax){
delta = t - tCur;
x = d + delta*vx;
y = delta*(vy - g*delta/2);
}else{
x = d;
y = 0;
}
value + [x,-y]
}else
value


  • Keyframe Bounce

e = .7; //elasticity
g = 5000; //gravity
nMax = 9; //maximum number of bounces

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

  • Keyframe 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
REF: Motionscript.com bounce-and-overshoot


veloc = 20; 
amplitude = 10; 
decay = .8; 
y = amplitude*Math.cos(veloc*time)/Math.exp(decay*time);
value + [0,y]

Friday, August 5, 2011

Start, Stop Expression from Adobe (REF)


You can use any expression in place of the wiggle expression used here, to begin and end the influence of any expression at a specific time.
  • Apply the following expression to a property to wiggle it beginning at time 2 seconds:
      timeToStart = 2; 
      if (time > timeToStart){ 
          wiggle(3,25); 
      }else{ 
          value; 
      }
  • Apply the following expression to a property to stop wiggling it at time 4 seconds:
      timeToStop = 4; 
      if (time > timeToStop){ 
          value; 
      }else{ 
          wiggle(3,25); 
      }
  • Apply the following expression to a property to start wiggling it at time 2 seconds and stop wiggling it at time 4 seconds:
      timeToStart = 2; 
      timeToStop = 4; 
        
      if ((time > timeToStart) && (time < timeToStop)){ 
          wiggle(3,25); 
      }else{ 
          value; 
      }

Tuesday, August 2, 2011

Offset Controller

Create an adjustment layer and apply Slider Expression Controls named "Offset Controller"
Apply code to layer that needed offsetting. Duplicate layer on how much thickness you need.

[Start]
X = (index-1)*thisComp.layer("Offset Controller").effect("Offset")("Slider");
Y = (index-1)*thisComp.layer("Offset Controller").effect("Offset")("Slider");
Z = (index-1)*thisComp.layer("Offset Controller").effect("Offset")("Slider");

value + [X,Y,Z]
[End]