L’albero viene disegnato utilizzando dei quadrati
Mouse (tasto): aumenta la ricorsione
Mouse (Ctrl+tasto): diminuisce la ricorsione
Applicazione Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
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); } } |