float unitlength; float s, s_old; color bgcol; boolean[] keyDown; PFont font; void setup() { size(800,600); framerate(30); initKeys(); bgcol = color(0,62,156); stroke(255, 255, 72); fill(30,135,220); font = loadFont("CourierNew36.vlw"); //font = loadFont("Ziggurat-HTF-Black-32.vlw"); textFont(font, 12); unitlength=2; s_old=0; } void initKeys() { keyDown = new boolean[256]; for(int i=0; i<256; i++) keyDown[i]=false; } void keyPressed() { if(key != CODED && key>=0 && key<256) keyDown[key]=true; } void keyReleased() { if(key != CODED && key>=0 && key<256) keyDown[key]=false; } void draw() { background(bgcol); text("move mouse horizontally to change angle\nand vertically to change generation depth\nhold down 'x' to freeze angle\nhold down 'c' for smooth angle changes\nhold down 'v' for auto zoom\ncurlicue explorer v0.2 by stefan kreitmayer, ICEM 2006", 12,height-6*12); if(keyDown['c']) s=s_old*.99999 + .00001*pow(float(mouseX)/width*2,3); else if(keyDown['x']) s=s; else s=pow(float(mouseX)/width*2,3); s_old=s; int n=int(pow(2, float(mouseY)/height*11+5)); // println(s+" "+n); float posx_old=0, posy_old=0, posx=0, posy=0, maxposx=0, maxposy=0; float theta=0, phi=0; for(int i=0; imaxposx) maxposx=abs(posx); if(abs(posy)>maxposy) maxposy=abs(posy); posx_old=posx; posy_old=posy; } if(keyDown['v']) { unitlength*=pow(width/maxposx/4,.1); unitlength*=pow(height/maxposy/4,.1); } else unitlength=2; }