int maxIter, pointCount, pointsPerUpdate, timer=0; final int winsize = 500; float scle = 3.0; float xoff = -2f; float yoff = -1.5; boolean drawSemiBrot = false, drawAntiBrot = false; int[][] img; int[][] antiimg; Slider maxIterSlid; Slider exposureSlid; Button renderButton; Button semiBrotButton; Button antiBrotButton; Button saveImgButton; PFont font; //------------------------------------------------ void setup() { size(winsize+60,winsize); framerate(20); font = loadFont("sansserif-9.vlw"); textFont(font); saveImgButton = new Button(winsize+7, 10, 46, 15, font, "explain"); //saveImgButton = new Button(winsize+7, 10, 46, 15, font, "save img"); maxIterSlid = new Slider(winsize+25, 50, 10, 100, 2f, 12f, 8f); renderButton = new Button(winsize+7, 205, 46, 15, font, "render"); exposureSlid = new Slider(winsize+25, 300, 10, 100, 0f, 2f, 1f); antiBrotButton = new Button(winsize+7, winsize-50, 46, 15, font, "anti"); semiBrotButton = new Button(winsize+7, winsize-25, 46, 15, font, "half"); initialize(); } //------------------------------------------------ void initialize() { maxIter = (int) pow( 2 , maxIterSlid.value ); pointCount = 0; pointsPerUpdate = 20000; img = new int[winsize][winsize]; antiimg = new int[winsize][winsize]; background(0); visualizeUI(); } //------------------------------------------------ void draw() { generateBbrot(false); if(timer%60 == 0) drawBbrot(); if(timer%60 == 0) visualizeUI(); pointCount += pointsPerUpdate; } //------------------------------------------------ void visualizeUI() { fill(0); stroke(255,64); rect(winsize-1,0,60,winsize); line(winsize, 35, winsize+60, 35); line(winsize, 230, winsize+60, 230); maxIterSlid.visualize(); exposureSlid.visualize(); renderButton.visualize(); semiBrotButton.visualize(); antiBrotButton.visualize(); saveImgButton.visualize(); textAlign(CENTER); fill(255); text( (int) pow(2,maxIterSlid.value) +"\nmax\niteration", winsize+30, maxIterSlid.y+maxIterSlid.h+15 ); text( pointCount/1000+"\nthousand\npaths", winsize+30, 250 ); text( "exposure\nlevel", winsize+30, exposureSlid.y+exposureSlid.h+15 ); } //------------------------------------------------ void mouseReleased() { if(semiBrotButton.mouseInput(mouseX,mouseY)) drawSemiBrot = !drawSemiBrot; if(antiBrotButton.mouseInput(mouseX,mouseY)) drawAntiBrot = !drawAntiBrot; if(renderButton.mouseInput(mouseX,mouseY)) initialize(); if(saveImgButton.mouseInput(mouseX,mouseY)) link("http://en.wikipedia.org/wiki/Buddhabrot"); //if(saveImgButton.mouseInput(mouseX,mouseY)) saveFrame("Buddhabrot-bailout"+maxIter+"-"+pointCount+"points.tif"); maxIterSlid.mouseInput(mouseX,mouseY); exposureSlid.mouseInput(mouseX,mouseY); visualizeUI(); } //------------------------------------------------ void drawBbrot() { loadPixels(); int antix; for( int x=0 ; x=0 && ix =0 && iy