int frames = 0; float newx[]; float newy[]; int newi = 0; int newn; int ncounts[]; int nlens[]; int nbase[]; float nlastx[]; float nlasty[]; int ncurls; void setup() { size ( 600, 400 ); smooth(); newn = 70; newi = 0; newx = new float [newn]; newy = new float [newn]; ncurls = 30; ncounts = new int[ncurls]; nbase = new int[ncurls]; nlens = new int[ncurls]; nlastx = new float[ncurls]; nlasty = new float[ncurls]; int i; for ( i = 0; i < ncurls; i++ ) { nlastx[i] = 0; nlasty[i] = 0; ncounts[i] = 0; nbase[i] = 0; nlens[i] = 5 + i * 2; } stroke ( 200 ); background ( 232 ); framerate (30); } void loop() { int i; newi++; if ( newi < newn ) { newx[newi] = mouseX; newy[newi] = mouseY; line( newx[newi-1] , newy[newi-1] , newx[newi], newy[newi] ); } for ( i = 0 ; i < ncurls ; i++ ) { if ( ncounts[i] > nlens[i] ) { nlens[i] = (int) random ( 0, newn -3 ); fill ( 255, 128, 128 ); stroke ( 255, 64, 64 ); int s = (int) sqrt ( nlens[i] ); ellipse ( nlastx[i] - s/2, nlasty[i] - s/2 , s , s ); ncounts[i] = 0; nbase[i] = (int) random ( 0, max ( 2, min ( newi, newn-1 ) - nlens[i] ) ); } int ind = ncounts[i] + nbase[i]; float dx = newx[ind+1] - newx[ind]; float dy = newy[ind+1] - newy[ind]; stroke ( 232 - 0.15 * (nlasty[i] + dy) ) ; line ( nlastx[i], nlasty[i] , nlastx[i] + dx, nlasty[i] + dy ); nlastx[i] += dx; nlasty[i] += dy; ncounts[i]++; } } int lclikx = 0; int lcliky = 0; void mouseReleased() { newi = 0; newx[newi] = mouseX; newy[newi] = mouseY; if ( lclikx == mouseX && lcliky == mouseY ) { background ( 232 ); } lclikx = mouseX; lcliky = mouseY; // background ( 6 ); stroke ( 200 ); // background ( 232 ); // stroke ( random(0,255), random(0,255), random(0,255) ); for ( int i = 0; i < ncurls; i++ ) { nlastx[i] = mouseX; nlasty[i] = mouseY; ncounts[i] = 0; nbase[i] = 0; } }