/* Attractors IV v Black and White (16bit per channel color, anti-aliasing) created in 2005 by Marcus Graf marcus[AT]florito.net // click LEFT MOUSE BUTTON on screen to create new dots // press [i] or RIGHT MOUSE BUTTON to restart */ float particleDrawTime = 0, bufferFadeTime = 0, bufferDrawTime = 0; int nr_att=16; int max_nr_dot=6000; int splotSize=15; int mainTypes=12; Particle[] dot; int dotToSteal; int nr_dot=0; GrafColor[] dotColVar; float xToW,yToH; boolean initializeAll=true; BackgroundBuffer backgroundBuffer; //PFont verdanaBold; PFont verdanaItalic10; void setup() { size(500,300,P3D); //verdanaBold = loadFont("Verdana-Bold-12.vlw"); verdanaItalic10 = loadFont("Verdana-Italic-10.vlw"); textFont(verdanaItalic10,10); backgroundBuffer = new BackgroundBuffer(width,height); xToW=1.2*width/100.0; yToH=1.2*width/100.0; } void draw() { if (initializeAll) { initializeAll=false; setupColors(); setupAttractors(); setupDots(); backgroundBuffer.clear(); nr_dot=0; } if (mousePressed&&mouseButton==LEFT) { float dx = pmouseX-mouseX; float dy = pmouseY-mouseY; float d = sqrt(sq(dx)+sq(dy)); if (d>1.4) { for (float p=0;p<1.0;p+=1/d) createNewSplot(mouseX+p*dx,mouseY+p*dy); } else createNewSplot(mouseX,mouseY); } long ms = millis(); backgroundBuffer.fadeToWhite(); bufferFadeTime = 0.9*bufferFadeTime + 0.1*(millis()-ms); ms = millis(); backgroundBuffer.drawbgBuf(); bufferDrawTime = 0.9*bufferDrawTime + 0.1*(millis()-ms); updateAttractors(); ms = millis(); updateAndDrawDots(); particleDrawTime = 0.9*particleDrawTime + 0.1*(millis()-ms); if (keyPressed&&key=='S') { //textFont(verdanaBold,12); //textAlign(LEFT); fill(128); println("backgroundBuffer draw time: "+nf(bufferDrawTime,2,1)+" ms"); println("backgroundBuffer fade time: "+nf(bufferFadeTime,2,1)+" ms"); println("particle draw time: "+nf(particleDrawTime,2,1)+" ms"); } textAlign(RIGHT); if (mouseX>width-80&&mouseY>288&&!mousePressed) { cursor(12); fill(128); } else { cursor(0); fill(192); } text("www.florito.net",width-4,height-4); for (int x=0;xwidth-80&&mouseY>288) { link("http://www.florito.net");//,"_blank"); } } if (mouseButton==RIGHT) initializeAll=true; } void createNewSplot(float sx, float sy) { for (int i=0;imax_nr_dot) { nr_dot=max_nr_dot; } dotToSteal++; if (dotToSteal==nr_dot) { dotToSteal=0; } } } // PARTICLES void setupDots() { dot=new Particle[max_nr_dot]; for (int i=0;i