Le nuvole sono un esempio significativo di frattale. Quelle che noi proponiamo in questa prima parte sono un esempio di frattale IFS, facili da realizzare e, secondo noi, anche belle da vedere.
Passo 1
Si parte da un quadrilatero, ad esempio un parallelogramma, e si calcolano le coordinate del punto di incontro delle diagonali.
Indicati con
Disegneremo il punto O sullo schermo.
Passo 2
Dal punto O condurre la parallela a CD che incontra in
M((x1+x4)/2, (y1+y4)/2) il lato AD;
in P((x2+x3)/2, (y2+y3)/2) il lato BC.
Passo 3
Dal punto O condurre la parallela ad AD che incontra in
N((x1+x2)/2, (y1+y2)/2) il lato AB;
in Q((x3+x4)/2, (y3+y4)/2) il lato CD.
Ora il parallelogramma ABCD risulta diviso in quattro parallelogrammi. In ognuno di essi potremo ripetere il procedimento precedente.
![]() | Osserviamo come si evolve il nostro bozzetto di nuvola passo per passo premendo su successivo nella colonna a fianco. Come si può osservare, i punti si dispongono in modo troppo ordinato per poter formare una nuvola. |
Passo 4
Aggiungiamo allora qualche elemento di casualità. Potremo spostare i punti a destra o a sinistra, in alto o in basso, di una piccola percentuale rispetto alla loro posizione standard.
![]() | Osserviamo come si evolve il nostro bozzetto di nuvola passo per passo premendo su successivo nella colonna a fianco dopo che abbiamo aggiunto qualche elemento di casualità. All'inizio i punti sono disposti in modo simile al precedente, ma già dalla terza iterazione accennano a formare proprio una nuvola. |
Passo 5
Ora pensiamo ad aggiungere il colore, per ottenere, ad esempio, una nuvola come quella della figura a lato. Per prima cosa conviene scegliere una tonalità di base come rosa o grigio. L'idea di tridimensionalità si ottiene aggiungendo delle chiazze di colore diverso ma sempre abbastanza in scala.
Nel nostro caso, inoltre, la nuvola si schiarisce gradatamente andando da in alto a sinistra verso il basso a destra.
PROGRAMMA IN LINGUAGGIO DI PROGETTO
Procedura nuvola Se n = 0 allora non fare niente Altrimenti xb = (x1 + x2 + x3 + x4) / 4 yb = (y1 + y2 + y3 + y4) / 4 |
Calcolo dell'ascissa e dell'ordinata del punto di incontro delle diagonali |
x1t = (x1 + x2) / 2 + 0.5 * Abs(x1t - x1) * (Rnd - 0.5) y1t = (y1 + y2) / 2 + 0.4 * Abs(y1t - y1) * (Rnd - 0.5) x2t = (x2 + x3) / 2 + 0.25 * Abs(x2t - xb) * (Rnd - 0.5) y2t = (y2 + y3) / 2 + 0.3 * Abs(y2t - yb) * (Rnd - 0.5) x3t = (x3 + x4) / 2 + 0.5 * Abs(x3t - x4) * (Rnd - 0.5) y3t = (y3 + y4) / 2 + 0.5 * Abs(y3t - y4) * (Rnd - 0.5) x4t = (x1 + x4) / 2 + 0.8 * Abs(xb - x4) * (Rnd - 0.5) y4t = (y1 + y4) / 2 + 0.55 * Abs(yb - y4) * (Rnd - 0.5) |
Calcolo dell'ascissa e dell'ordinata dei punti medi dei lati del parallelogramma con l'aggiunta di una percentuale di casualità. L'istruzione Rnd genera un numero casuale compreso fra 0 ed 1 |
Se il resto della divisione di 100 * xb per n = 1, allora blu = 210 rosso = 1.34 * blu verde = 0.89 * blu Altrimenti verde = Round(xb + yb + (xb + yb) * (Rnd -0.5)) blu = 1.5 * verde rosso = 1.5 * verde Fine se |
Calcolo del colore, in parte dipendente dalla posizione dell'ascissa del punto medio e in parte dipendente dal resto della divisione per n della somma di xb ed yb.
|
Call nuvola(n - 1, x1, y1, x1t, y1t, xb, yb, x4t, y4t) Call nuvola(n - 1, x1t, y1t, x2, y2, x2t, y2t, xb, yb) Call nuvola(n - 1, xb, yb, x2t, y2t, x3, y3, x3t, y3t) Call nuvola(n - 1, x4t, y4t, xb, yb, x3t, y3t, x4, y4) Fine se Fine procedura | Chiamata alla procedura nuvola passando come parametri i vertici dei punti "medi" trovati prima. Si tratta cioè di ripetere la procedura in alto a destra, in alto a sinistra, in basso a sinistra, in basso a destra. |
Ecco infine altri esempi di nuvole: le forme diverse sono dovute all'introduzione del caso anche nella generazione dei vertici di partenza.
![]() |
![]() |
![]() |
©2002 www.webfract.it