wanderer[] tracers; int numberOfTracers = 1000; int tracerSteps=100; float tracerEndurance=1.0f/tracerSteps; grid intensityGrid; grid velocityGrid; grid accelerationGrid; int drawX, drawY, maxX, maxY; float sqrthalf=sqrt(2.0f)/2.0f; float[] parameters=new float[9]; int shiftX, shiftY; float range=4.0f; float drawingScale=200.0f; float maxValue; int colorPalette; boolean SAVING; float mouseStartDragX; float mouseStartDragY; float mouseEndDragX; float mouseEndDragY; framePoster fPost = new framePoster("strangeSymmetry","strangeSymmetry"); void setup(){ size(800,800); background(255); reset(); SAVING=false; colorPalette=0; } void reset(){ background(255); tracers= new wanderer[numberOfTracers]; initParameters(); for(int w=0;w=0)&&(drawX=0)&&(drawY=0)&&(drawX=0)&&(drawY20){ shiftX+=mouseEndDragX-mouseStartDragX; shiftY+=mouseEndDragY-mouseStartDragY; redrawNeeded=true; } if(redrawNeeded){ intensityGrid=new grid(width, height); velocityGrid=new grid(width, height); accelerationGrid=new grid(width, height); } } void keyReleased() { boolean redrawNeeded=false; if(key == CODED) { if (keyCode == UP) { shiftY-=10; redrawNeeded=true; } else if (keyCode == DOWN) { shiftY+=10; redrawNeeded=true; } else if (keyCode == RIGHT) { shiftX+=10; redrawNeeded=true; } else if (keyCode == LEFT) { shiftX-=10; redrawNeeded=true; } } else if ((key == ' ')&&(!SAVING)) { SAVING=true; fPost.postFrame(); } else if ((key == 'c')||(key =='C')) { colorPalette++; if (colorPalette>17) colorPalette=0; } else if ((key == 'r')||(key =='R')) { shiftX+=width/2-mouseX; shiftY+=height/2-mouseY; redrawNeeded=true; } else if (key == '-') { if (drawingScale>1.0f){ drawingScale*=0.9f; shiftX=(int)(width/2-0.9f*(width/2-shiftX)); shiftY=(int)(height/2-0.9f*(height/2-shiftY)); } redrawNeeded=true; } else if (key == '+') { drawingScale*=1.1f; shiftX=(int)(width/2-1.1f*(width/2-shiftX)); shiftY=(int)(height/2-1.1f*(height/2-shiftY)); redrawNeeded=true; } else{ reset(); } if(redrawNeeded){ intensityGrid=new grid(width, height); velocityGrid=new grid(width, height); accelerationGrid=new grid(width, height); } }