u(t) is called 60 times per second.
t: Elapsed time in seconds.
S: Shorthand for Math.sin.
C: Shorthand for Math.cos.
T: Shorthand for Math.tan.
R: Function that generates rgba-strings, usage ex.: R(255, 255, 255, 0.5)
c: A 1920x1080 canvas.
x: A 2D context for that canvas.
If q will only ever be 0 or 1 (t%2), couldn't this just be for(x.fillRect(x.globalAlpha=.2,q=t%2,2e3,2e3),i=125;i--;x.clearRect(S(t|1)*760+S(i)*v+960,(q/2-C(i))*v+380,l=6-q*3,l))v=q*200-S(i*.2)*i*q? That way, the variation also works.
I opted for what I had because it held the initial shape in the sky for longer before gravity takes hold. Your version works and if you're happy to trade off the initial shape, you could also drop the \2 and save another 2 chars
u(t) is called 60 times per second.
t: elapsed time in seconds.
c: A 1920x1080 canvas.
x: A 2D context for that canvas.
S: Math.sin
C: Math.cos
T: Math.tan
R: Generates rgba-strings, ex.: R(255, 255, 255, 0.5)