§ 2. Un programma per generare gli alberi ricorsivi.

Supponiamo date le coordinate del minimo rettangolo [xmin,xmax] X [ymin,ymax] che include tutti i punti del disegno.

Definiamo innanzitutto un operatore di rotazione Rot. Rot prende un vettore (dx,dy), di origine (x,y), ruota tale vettore di un angolo α, lo contrae di un fattore ρ, infine restituisce il punto di arrivo (x',y') del vettore così modificato.

[Graphics:../Images/index_gr_35.gif]

Scriviamo ora un procedimento per costruire l'albero frattale. I parametri, lo ripetiamo, sono: il numero n di volte che vogliamo applicare il procedimento, lo spessore iniziale T del tronco, gli angoli [Graphics:../Images/index_gr_36.gif], [Graphics:../Images/index_gr_37.gif] tra i due nuovi rami e il ramo da cui hanno avuto origine, i fattori [Graphics:../Images/index_gr_38.gif], [Graphics:../Images/index_gr_39.gif] e [Graphics:../Images/index_gr_40.gif], [Graphics:../Images/index_gr_41.gif], di riduzione di spessore e unghezza passando da un tratto di ramo al successivo. Considereremo anche una funzione Col[i] che fornisce il colore del ramo i. Numeriamo i rami all'indietro: assegnamo al tronco il numero n, ai rami che si dipartono da esso il numero n-1, e così via. Agli ultimi tratti di ramo assegnamo il numero 1.

Il procedimento costruisce una lista annidata tree, la lista dei segmenti ottenuti dopo n passi. Partiamo dal segmento da {x,y} a {z,t}, con il tronco di spessore T e colore Col[n]. I primi due rami avranno spessore T/[Graphics:../Images/index_gr_42.gif], T/[Graphics:../Images/index_gr_43.gif], lunghezza divisa per [Graphics:../Images/index_gr_44.gif], [Graphics:../Images/index_gr_45.gif], colore Col[n-1]. I quattro successivi avranno spessore T/([Graphics:../Images/index_gr_46.gif]*[Graphics:../Images/index_gr_47.gif]), T/([Graphics:../Images/index_gr_48.gif]*[Graphics:../Images/index_gr_49.gif]), T/([Graphics:../Images/index_gr_50.gif]*[Graphics:../Images/index_gr_51.gif]), T/([Graphics:../Images/index_gr_52.gif]*[Graphics:../Images/index_gr_53.gif]), lunghezza divisa per [Graphics:../Images/index_gr_54.gif]*[Graphics:../Images/index_gr_55.gif], [Graphics:../Images/index_gr_56.gif]*[Graphics:../Images/index_gr_57.gif], [Graphics:../Images/index_gr_58.gif]*[Graphics:../Images/index_gr_59.gif], [Graphics:../Images/index_gr_60.gif]*[Graphics:../Images/index_gr_61.gif] e colore Col[n-2]. I rimanenti saranno generati con delle chiamate ricorsive.

[Graphics:../Images/index_gr_62.gif]

Scriviamo infine un programma che disegni l'albero ricorsivo nel rettangolo [xmin,xmax] X [ymin,ymax] che include tutti i punti del disegno. Ampliamo tale rettangolo di un 5% per parte, al fine di avere una cornice per il disegno. Lasciamo come parametro Base, il numero di punti dello schermo utilizzati per disegnare la base del rettangolo.

[Graphics:../Images/index_gr_63.gif]


Converted by Mathematica      February 28, 2003