L’albero viene disegnato utilizzando dei quadrati
Mouse (tasto): aumenta la ricorsione
Mouse (Ctrl+tasto): diminuisce la ricorsione
Applicazione Java
final int maxRIC=7;
final float dim=200;
int RIC;
boolean scende;
float raggi[];
int colori[];
float Xc, Yc;
int maxX, maxY;
void setup()
{
size(500, 350);
noStroke();
smooth();
rectMode(CENTER);
Xc=width/2;
Yc=0.7*height;
maxX=width-1;
maxY=height-1;
colori=new int[maxRIC+1];
raggi =new float[maxRIC+1];
RIC=3;
scende=false;
inizializzaRIC();
noLoop();
}
void inizializzaRIC()
{
colori[RIC]=25;
for(int i=RIC-1; i >=0; i--)
colori[i]=colori[i+1]+25;
raggi[RIC]=dim;
for(int i=RIC-1; i >=0; i--)
raggi[i]=raggi[i+1]/2;
}
void keyPressed()
{
scende=true;
}
void keyReleased()
{
scende=false;
}
void mousePressed()
{
if(scende && RIC > 0)
{
RIC--;
inizializzaRIC();
redraw();
}
else if(!scende && RIC < maxRIC)
{
RIC++;
inizializzaRIC();
redraw();
}
}
void draw()
{
background(255);
translate(Xc, Yc);
piano(RIC, 0, 0, HALF_PI);
}
void piano(int n, float x, float y, float angolo)
{
fill(50, colori[n], 25);
pushMatrix();
translate(x, y);
rotate(angolo);
rect(0, 0, raggi[n], raggi[n]);
popMatrix();
if(n > 0)
{
float prossimo=raggi[n-1]*sqrt(2);
float nx, ny;
angolo +=PI/4;
nx = x+prossimo*cos(angolo);
ny = y-prossimo*sin(angolo); piano(n-1, nx, ny, angolo);
angolo-=HALF_PI;
nx = x+prossimo*cos(angolo);
ny = y-prossimo*sin(angolo); piano(n-1, nx, ny, angolo);
}
}