/**
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);
}