/** Growing steak in a dark, rainy setting by guru */ float b[]; int leaf = 0; int[] speed; int[] pos; boolean lleft = true; void setup() { noiseSeed(1); size(300, 300); b = new float[40]; for ( int i=0; i=0; i--) { vertex( 150 + b[i]+map(i, 0, b.length, 0, 10), 120+(i+1)*(200/b.length)); } for ( int i=0; i < b.length; i++) { vertex( 150 + b[i]-map(i, 0, b.length, 0, 10), 120+(i+1)*(200/b.length)); } endShape(); stroke(0); strokeWeight(1); float l = map( leaf, 0, b.length, 0, 15); float ofs = map( leaf, 0, b.length, 0, 10); line( 150 + b[leaf] + ( lleft ? -1 : 1 ) * map(leaf, 0, b.length, 0, 10), 120 +(leaf+1) * 200/b.length, 150 + b[leaf] + ( lleft ? -1 : 1 ) * ( l + map(leaf, 0, b.length, 0, 10)), 120 + (leaf+1) * 200/b.length - l ); if ( leaf > 2 ) { pushMatrix(); translate( 150 + b[leaf] + ( lleft ? -1 : 1 ) * ( l/2 + map(leaf, 0, b.length, 0, 10)), 120 + (leaf+1) * 200/b.length - l/2); rotate( lleft ? 5*PI/4 : -PI/3); ellipse( 0, 0, l, l/3 ); popMatrix(); } leaf++; if (leaf > b.length-1) { leaf = 0; lleft = !lleft; } strokeWeight(1); stroke(0, 50); pushMatrix(); translate(width/2, height/2); rotate(PI/2.4); translate(-width/2-40, -height/2); for ( int i = 0; i<100; i++) { line(pos[i], i* 4, pos[i] + speed[i]*4, i * 4 ); pos[i] += speed[i]; pos[i] = pos[i] % width; } popMatrix(); for ( int i=b.length-1; i>=1; i--) { b[i] = b[i-1]; } b[0] = 15 * sin(TWO_PI*frameCount/2.0/b.length)*sin(TWO_PI*frameCount/2.4/b.length); //b[0] += random(-4,4); }