Mouse (verticale): lunghezza dei rami
Mouse (orizzontale): angolo tra i rami
Mouse (tasto): aumenta la ricorsione
Mouse (Ctrl+tasto): diminuisce la ricorsione
Applicazione Java
final int numMax=10; final float DIR=HALF_PI; int NUM; float DIM; float deltaDir; float deltaDim; float Dimensioni[]; float X0, Y0; boolean scende=false; void setup() { size(500, 500); smooth(); stroke(0); X0 = width/2; Y0 = 0.95*height; DIM = height/2.4; Dimensioni=new float[numMax+1]; NUM=5; aggiorna(); noLoop(); } void aggiorna() { deltaDim=map(mouseY, 0, height, 0.7, 0.01); deltaDir=map(mouseX, 0, width, +PI, -PI); Dimensioni[NUM]=DIM; for(int i=NUM-1; i >=1; i--) Dimensioni[i]=Dimensioni[i+1]*deltaDim; } void mouseMoved() { aggiorna(); redraw(); } void keyPressed() { scende=true; } void keyReleased() { scende=false; } void mousePressed() { if(scende && NUM > 2) NUM--; else if(!scende && NUM < numMax) NUM++; aggiorna(); redraw(); } void draw() { background(255); albero(NUM, X0, Y0, DIR); } void albero(int n, float x, float y, float angolo) { float newX=x+Dimensioni[n]*cos(angolo); float newY=y-Dimensioni[n]*sin(angolo); line(x, y, newX, newY); if(n > 1) { albero(n-1, newX, newY, angolo+deltaDir); albero(n-1, newX, newY, angolo-deltaDir); } }