int frames = 0; float newx[]; float newy[]; int newi = 0; int newn; float oldx[]; float oldy[]; int oldi; int oldn; void setup() { size ( 320, 320 ); smooth(); newn = 40; newi = 0; newx = new float [newn]; newy = new float [newn]; oldn = 400; oldi = 0; oldx = new float [oldn]; oldy = new float [oldn]; framerate (30); } void loop() { frames++; background ( 25 ); stroke ( 200 ); int i; newx[newi] = mouseX; newy[newi] = mouseY; //for ( i = 0; i < newn - 1 ; i++ ) { // stroke ( 200 - i * 3 ); // line ( newx[(newi + i)%newn ], newy[(newi + i)%newn], newx[(newi + i + 1) % newn], newy[(newi + i + 1) % newn] ); //} for ( i = 1; i < oldn - 1 && i < (frames - newn) ; i++ ) { if ( i > oldn - 40 ) { stroke ( 80 - 2 * ( i - ( oldn - 40 ) ) ); } else { stroke ( 80 ); } line ( oldx[(oldi + i)%oldn ], oldy[(oldi + i)%oldn], oldx[(oldi + i + 1) % oldn], oldy[(oldi + i + 1) % oldn] ); } beginShape ( LINE_STRIP ); for ( i = 0; i < newn && i < frames ; i++ ) { stroke ( 240 - i * 4 ); curveVertex ( newx[ ( newi + i ) % newn ], newy[ ( newi + i ) % newn ] ); } endShape(); for ( i = 0; i < newn - 4 && i < frames ; i++ ) { int pre = ( newi + i ) % newn; int cur = ( newi + i + 2 ) % newn; int nex = ( newi + i + 4 ) % newn; float shift = 0.15 - 0.40 * ( float ) i / (float ) newn ; float dx = newx[ cur ] - 0.5 * ( newx[pre] + newx[nex] ); newx[cur] += dx * shift ; float dy = newy[ cur ] - 0.5 * ( newy[pre] + newy[nex] ); newy[cur] += dy * shift ; } newi = ( newi + newn - 1 ) % newn; oldx[oldi] = newx[newi]; oldy[oldi] = newy[newi]; oldi = ( oldi + oldn - 1 ) % oldn; }