/* "mandala" egg syntax http://www.novonon.com 2007 */ float x1,y1,ang1Stun,ang1Jerk,ang1Accel,ang1Vel,ang1Pos,ang1Temp,rad1Stun,rad1Jerk,rad1Accel,rad1Vel,rad1Pos; float x2,y2,ang2Stun,ang2Jerk,ang2Accel,ang2Vel,ang2Pos,ang2Temp,rad2Stun,rad2Jerk,rad2Accel,rad2Vel,rad2Pos; float x3,y3,ang3Stun,ang3Jerk,ang3Accel,ang3Vel,ang3Pos,ang3Temp,rad3Stun,rad3Jerk,rad3Accel,rad3Vel,rad3Pos; float fill1,fill2,fill3; int i; float eSize1 = 1; float eSize2 = 1; float eSize3 = 1; float eDist1 = 1; float eDist2 = 1; float eDist3 = 1; float fadeAlpha = .07; float fillAlpha = 0; float age,curHue,curBrightness = 0,curSat=0,curAlpha = 0,colorRange; int MAXAGE = 100000; int symmetry; int whichSym = floor(random(10)); void setup() { size(900, 500); // Size should be the first statement background(0); framerate(100); colorMode(HSB,1.0); colorRange = random(0,0.7); age = floor(random(50000)) + 5000; // so that 1/age (ie alpha)doesn't decrease too quickly whichSym = floor(random(10)); switch (whichSym) { case 0: symmetry = 72; break; case 1: symmetry = 90; break; default: symmetry = 60; break; } eSize1 = 2; eSize2 = 2; eSize3 = 2; } void draw() { age++; if (age % 10 == 0) { eSize1 = min(80,max(0,eSize1 + random(.6) - .3 + sin(age/17111) / 20)); eSize2 = min(200,max(0,eSize2 + random(.6) - .3+ sin(age /7333) / 20)); eSize3 = min(80,max(0,eSize3 + random(.6) - .3 + sin(age / 7887) / 20)); eDist1 = min(2,max(.8,eDist1 + random(.002) - .004)); eDist2 = min(2,max(.8,eDist2 + random(.002) - .004)); eDist3 = min(2,max(.8,eDist2 + random(.002) - .004)); fadeAlpha = min(.015,max(0,fadeAlpha + rad3Vel / 100)); fill (0,0,0,fadeAlpha); rect (0,0,900,500); fill (0,0,0,fillAlpha); } curHue = sin(age / 13007) * .1 + colorRange; // (anywhere from 0.. .2 to .8.. 1.0) curAlpha = (1.5 + sin(age / 30077.0)) / 20.0; curSat = 0.03 + ((cos(age + 1433) + 1) / 16); //colorRange = colorRange + rad1Jerk + rad2Jerk; colorRange = (colorRange + (rad1Accel + rad2Accel) / 30 + 1.0) % 1; if (age < 5200) {fill(0);ellipse(350,100,200,200);} // insane hack to prevent bizarre behavior at beginning for (i = 0; i < 6; i++) { // #1 ang1Temp = ang1Pos + (i * symmetry); fill1 = min(.4,max(0,fill1 + rad1Accel)); fill (curHue,curSat,fill1 / 2,curAlpha / 30); x1 = 450 + rad1Pos * cos (radians (ang1Temp)); y1 = 250 + rad1Pos * sin (radians (ang1Temp)); // I may1 have sin & cos backward here but it doesn't matter (rotates whole picture 90 degrees) stroke(curHue,curSat / 2,1.0,curAlpha); ellipse (x1,y1,eSize1,eSize1); x1 = 450 + (1.5 * eDist1 * rad1Pos) * cos (radians (ang1Temp + 20)); y1 = 250 + (1.5 * eDist1 * rad1Pos) * sin (radians (ang1Temp + 20)); // I may1 have sin & cos backward here but it doesn't matter (rotates whole picture 90 degrees) stroke(curHue,curSat / 2,1.0,curAlpha / 1.5); ellipse (x1,y1,eSize1 * 2,eSize1 * 2); x1 = 450 + (2.0 * eDist1 * rad1Pos) * cos (radians (ang1Temp + 30)); y1 = 250 + (2.0 * eDist1 * rad1Pos) * sin (radians (ang1Temp + 30)); // I may1 have sin & cos backward here but it doesn't matter (rotates whole picture 90 degrees) stroke(curHue,curSat / 2,1.0,curAlpha / 2.5); ellipse (x1,y1,eSize1 * 3,eSize1 * 3); x1 = 450 + (3.5 * eDist1 * rad1Pos) * cos (radians (ang1Temp + 40)); y1 = 250 + (3.5 * eDist1 * rad1Pos) * sin (radians (ang1Temp + 40)); // I may1 have sin & cos backward here but it doesn't matter (rotates whole picture 90 degrees) stroke(curHue,curSat / 2,1.0,curAlpha / 3.5); ellipse (x1,y1,eSize1 * 2,eSize1 * 2); x1 = 450 + (5.0 * eDist1 * rad1Pos) * cos (radians (ang1Temp + 50)); y1 = 250 + (5.0 * eDist1 * rad1Pos) * sin (radians (ang1Temp + 50)); // I may1 have sin & cos backward here but it doesn't matter (rotates whole picture 90 degrees) stroke(curHue,curSat / 2,1.0,curAlpha / 4.5); ellipse (x1,y1,eSize1 * 1,eSize1 * 1); x1 = 450 + (4.0 * eDist1 * rad1Pos) * cos (radians (ang1Temp + 55)); y1 = 250 + (4.0 * eDist1 * rad1Pos) * sin (radians (ang1Temp + 55)); // I may1 have sin & cos backward here but it doesn't matter (rotates whole picture 90 degrees) stroke(curHue,curSat / 2,1.0,curAlpha / 5.5); ellipse (x1,y1,eSize1 * .5,eSize1 * 1); x1 = 450 + (6.0 * eDist1 * rad1Pos) * cos (radians (ang1Temp + 60)); y1 = 250 + (6.0 * eDist1 * rad1Pos) * sin (radians (ang1Temp + 60)); // I may1 have sin & cos backward here but it doesn't matter (rotates whole picture 90 degrees) stroke(curHue,curSat / 2,1.0,curAlpha / 5.5); ellipse (x1,y1,eSize1 * 2,eSize1 * 1); // #2 ang2Temp = ang2Pos + (i * symmetry); fill2 = min(.4,max(0,fill2 + rad2Accel)); fill (1.0 - curHue,curSat,fill2,curAlpha / 10); x2 = 450 + rad2Pos * cos (radians (ang2Temp)); y2 = 250 + rad2Pos * sin (radians (ang2Temp)); // I may2 have sin & cos backward here but it doesn't matter (rotates whole picture 90 degrees) stroke(1.0 - curHue,curSat,1.0,curAlpha); ellipse (x2,y2,eSize2,eSize2); x2 = 450 + (1.1 * eDist2 * rad2Pos) * cos (radians (ang2Temp + 15)); y2 = 250 + (1.1 * eDist2 * rad2Pos) * sin (radians (ang2Temp + 15)); // I may2 have sin & cos backward here but it doesn't matter (rotates whole picture 90 degrees) stroke(1.0 - curHue,curSat,1.0,curAlpha / 1.5); ellipse (x2,y2,eSize2 * 1.7,eSize2 * 1.7); x2 = 450 + (1.2 * eDist2 * rad2Pos) * cos (radians (ang2Temp + 30)); y2 = 250 + (1.2 * eDist2 * rad2Pos) * sin (radians (ang2Temp + 30)); // I may2 have sin & cos backward here but it doesn't matter (rotates whole picture 90 degrees) stroke(1.0 - curHue,curSat,1.0,curAlpha / 2.5); ellipse (x2,y2,eSize2 * 2.2,eSize2 * 2.2); // #3 ang3Temp = ang3Pos + (i * symmetry); fill3 = min(.4,max(0,fill3 - rad3Accel)); fill (curHue * curHue,1.0 - curSat,fill3,curAlpha / 10); x3 = 450 + rad3Pos * cos (radians (ang3Temp)); y3 = 250 + rad3Pos * sin (radians (ang3Temp)); // I may3 have sin & cos backward here but it doesn't matter (rotates whole picture 90 degrees) stroke(curHue * curHue,curSat,0.75,curAlpha); ellipse (x3,y3,eSize3,eSize3); x3 = 450 + (1.5 * eDist3 * rad3Pos) * cos (radians (ang3Temp + 20)); y3 = 250 + (1.5 * eDist3 * rad3Pos) * sin (radians (ang3Temp + 20)); // I may3 have sin & cos backward here but it doesn't matter (rotates whole picture 90 degrees) stroke(curHue * curHue,curSat,0.75,curAlpha / 1.5); ellipse (x3,y3,eSize3 * 2,eSize3 * 2); x3 = 450 + (2.0 * eDist3 * rad3Pos) * cos (radians (ang3Temp + 30)); y3 = 250 + (2.0 * eDist3 * rad3Pos) * sin (radians (ang3Temp + 30)); // I may3 have sin & cos backward here but it doesn't matter (rotates whole picture 90 degrees) stroke(curHue * curHue,curSat,0.75,curAlpha / 2.5); ellipse (x3,y3,eSize3 * 3,eSize3 * 3); x3 = 450 + (3.5 * eDist3 * rad3Pos) * cos (radians (ang3Temp + 40)); y3 = 250 + (3.5 * eDist3 * rad3Pos) * sin (radians (ang3Temp + 40)); // I may3 have sin & cos backward here but it doesn't matter (rotates whole picture 90 degrees) stroke(curHue * curHue,curSat,0.75,curAlpha / 3.5); ellipse (x3,y3,eSize3 * 2,eSize3 * 2); x3 = 450 + (5.0 * eDist3 * rad3Pos) * cos (radians (ang3Temp + 50)); y3 = 250 + (5.0 * eDist3 * rad3Pos) * sin (radians (ang3Temp + 50)); // I may3 have sin & cos backward here but it doesn't matter (rotates whole picture 90 degrees) stroke(curHue * curHue,curSat,0.75,curAlpha / 4.5); ellipse (x3,y3,eSize3 * 1,eSize3 * 1); x3 = 450 + (4.0 * eDist3 * rad3Pos) * cos (radians (ang3Temp + 55)); y3 = 250 + (4.0 * eDist3 * rad3Pos) * sin (radians (ang3Temp + 55)); // I may3 have sin & cos backward here but it doesn't matter (rotates whole picture 90 degrees) stroke(curHue * curHue,curSat,0.75,curAlpha / 5.5); ellipse (x3,y3,eSize3 * .5,eSize3 * .5); x3 = 450 + (6.0 * eDist3 * rad3Pos) * cos (radians (ang3Temp + 60)); y3 = 250 + (6.0 * eDist3 * rad3Pos) * sin (radians (ang3Temp + 60)); // I may3 have sin & cos backward here but it doesn't matter (rotates whole picture 90 degrees) stroke(curHue * curHue,curSat,0.75,curAlpha / 5.5); ellipse (x3,y3,eSize3 * 2,eSize3 * 2); } ang1Jerk = random(-.001,.001); ang1Accel = min(.01,max(-.01,ang1Accel+ang1Jerk)); ang1Vel = min(.2,max(-.25,ang1Vel+ang1Accel)); ang1Pos += ang1Vel; rad1Jerk = random(-.001,.0012); rad1Accel = min(.01,max(-.01,rad1Accel+rad1Jerk)); rad1Vel = min(.2,max(-.2,rad1Vel+rad1Accel)); rad1Pos += rad1Vel; if (rad1Pos < 0) { rad1Pos = 0; rad1Vel = .1; // reverse direction rad1Accel = 0.1; } if (rad1Pos > 800) { rad1Pos = 000; rad1Vel = 0.1; // reverse direction rad1Accel = 0.1; } ang2Jerk = random(-.001,.001); ang2Accel = min(.01,max(-.01,ang2Accel+ang2Jerk)); ang2Vel = min(.2,max(-.2,ang2Vel+ang2Accel)); ang2Pos += ang2Vel; rad2Jerk = random(-.001,.001); rad2Accel = min(.01,max(-.01,rad2Accel+rad2Jerk)); rad2Vel = min(.2,max(-.2,rad2Vel+rad2Accel)); rad2Pos += rad2Vel; if (rad2Pos < 0) { rad2Pos = 0; rad2Vel = .1; rad2Accel = 0.1; } if (rad2Pos > 800) { rad2Pos = 000; rad2Vel = .1; rad2Accel = 0.1; } ang3Jerk = random(-.001,.001); ang3Accel = min(.01,max(-.01,ang3Accel+ang3Jerk)); ang3Vel = min(.22,max(-.2,ang3Vel+ang3Accel)); ang3Pos += ang3Vel; rad3Jerk = random(-.001,.001); rad3Accel = min(.01,max(-.01,rad3Accel+rad3Jerk)); rad3Vel = min(.2,max(-.2,rad3Vel+rad3Accel)); rad3Pos += rad3Vel; if (rad3Pos < 0) { rad3Pos = 0; rad3Vel = .1; // reverse direction rad3Accel = 0.1; } if (rad3Pos > 800) { rad3Pos = 000; rad3Vel = 0.1; // reverse direction rad3Accel = 0.1; } } void mousePressed() { setup(); }