La crescita si ferma quando l’aggregato raggiunge il bordo.
Gli ostacoli deviano la crescita.
- Mouse (tasto): ricomincia
- Applicazione Java
final float diametro=3; final float xx=0.5; final color cFondo=color(255), cOstacolo=color(75, 0, 75); final float cMin=0, cMax=200; int Xmin, Ymin, Xmax, Ymax, X2, Y2, Xa, Ya, Xb, Yb; color cPianta, c; float rosso, verde, blu; boolean rossoUP, bluUP; void setup() { size(500, 500); smooth(); strokeWeight(4); // valori definitivi X2=width/2; Y2=height/2; Xmin=0; Ymin=0; Xmax=width-1; Ymax=height-1; inizia(); } void mousePressed() { inizia(); } void inizia() { background(cFondo); stroke(cOstacolo, 50); fill(cOstacolo); ellipse(0 , random(Ymin, Ymax), Xmax-25, Ymax); ellipse(Xmax, random(Ymin, Ymax), Xmax-25, Ymax); rosso=random(cMin, cMax); verde=125; blu=random(cMin, cMax); switch((int)random(4)) { case 0: bluUP=false; rossoUP=false; break; case 1: bluUP=false; rossoUP=true; break; case 2: bluUP=true; rossoUP=false; break; case 3: bluUP=true; rossoUP=true; break; } nuovoColore(); ellipse(X2, Y2, diametro, diametro); loop(); } void draw() { nuovoColore(); daCapo(); do { Xb=Xa; Yb=Ya; switch((int)random(4)) { case 0: Xb=Xa-1; break; case 1: Xb=Xa+1; break; case 2: Yb=Ya-1; break; case 3: Yb=Ya+1; break; } c=get(Xb, Yb); if(c != cOstacolo) { Xa=Xb; Ya=Yb; } } while(c != cFondo); ellipse(Xa, Ya, diametro, diametro); if(Xa <= Xmin || Xa >= Xmax || Ya <= Ymin || Ya >= Ymax) noLoop(); } void daCapo() { Xa=X2; Ya=Y2; } void nuovoColore() { switch((int)random(2)) { case 0: if(rossoUP) { rosso+=xx; if(rosso >= cMax) rossoUP=false; } else { rosso-=xx; if(rosso <= 0) rossoUP=true; } break; case 1: if( bluUP) { blu+=xx; if( blu >= cMax) bluUP=false; } else { blu-=xx; if( blu <= 0) bluUP=true; } break; } cPianta=color(rosso, verde, blu); stroke(cPianta, 50); fill(cPianta); }