Ecco il frattale di von Koch costruito con il metodo di Barnsley.
Si predispone un'urna con quattro palline, una rossa, una verde, una blu ed una gialla; ogni pallina contiene le istruzioni per una trasformazione.
Pallina rossa | Contrazione di 1/3 |
Pallina gialla |
Contrazione di 1/3; rotazione di 60° in verso antiorario; traslazione orizzontale di 1/3. |
Pallina verde |
Contrazione di 1/3; rotazione di 60° in verso orario; traslazione orizzontale di 1/2 e verticale di 0.289 (altezza del triangolo equilatero di lato 1/3). |
Pallina blu |
Contrazione di 1/3; traslazione orizzontale di 2/3. |
|
Segue la matrice delle trasformazioni che ne permettono la costruzione e che è riportata nella seguente tabella:
| a | b | c | d | e | f | p |
Estrazione |
I | 0.33 | 0.00 | 0.00 | 0.00 | 0.333 | 0.00 | 0.25 |
Pallina rossa |
II | 0.167 | -0.289 | +0.333 | 0.289 | 0.167 | 0.00 | 0.25 |
Pallina gialla |
III | 0.167 | 0.289 | 0.5 | -0.289 | 0.167 | 0.289 | 0.25 |
Pallina verde |
IV | 0.33 | 0.00 | 0.667 | 0.00 | 0.333 | 0.00 | 0.25 |
Pallina blu |
E' questo un metodo compatto per scrivere le equazioni delle trasformazioni lineari, cioè quelle in cui le variabili sono tutte al primo grado; invece che scrivere:
(x'= ax + by + c) AND (y'= dx + ey + f)
si dispongono in una stessa riga i coefficienti che fanno parte della stessa trasformazione,
mentre l'ultima colonna rappresenta la probabilità con cui applicare la trasformazione.
Ad esempio, riferendoci alla III trasformazione, che si applica con probabilità del 25%, possiamo scrivere:
(x'= 0.167x - 0.289y + 0.5) AND (y'= -0.289x + 0.167y+0.289 )
Non dimentichiamo che il nostro è un sistema di funzioni iterate, e dunque il risultato di ogni trasformazione deve diventare il numero in entrata per la prossima trasformazione, si tratta quindi di assegnare rispettivamente ad x ed a y x' ed y'.
Ecco il listato del programma in linguaggio di progetto:
INIZIA k=1/3 x=1 y=1 | K è il rapporto di
contrazione; x ed y sono rispettivamente l'ascissa e l'ordinata del punto di partenza. | ||||||||||||||
Ripeti per 20000 volte: Estrai un numero a caso (di nomeT) minore di 100 | Si inizia il ciclo: viene
estratto un numero casuale che ci permette di impostare la trasformazione a
seconda del suo valore
| SeT < 25 allora x1 = k * x y1 = k * y Ecco la prima trasformazione, applicata con probabilità del
25% |
| Altrimenti seT < 50 allora x1 = k/2 * x - 0.289 * y + k y1 = 0.289 * x + k/2 * y Ecco la seconda trasformazione, applicata con probabilità del
25%
|
| Altrimenti seT < 75 allora x1 = k/2 * x + 0.289 * y + 1/2 y1 = - 0.289 * x + k/2 * y + 0.289 Ecco la terza trasformazione, applicata con
probabilità del 25%
|
| Altrimenti x1 = k * x + 2k y1 = k * y Ecco la quarta trasformazione, applicata con
probabilità del 25%
|
Fine se. | Se hai già fatto 20 ripetizioni allora Disegna sullo schermo il punto moltiplicando la sua ascissa per la larghezza e la sua ordinata per l'altezza dello schermo grafico.
x = x1 | y = y1
Le coordinate del
punto trasformato sostituiscono i valori iniziali e ad esse si applica la
prossima trasformazione. |
Fine ciclo
| FINE | |
|
| |
©2002 - 2007 www.webfract.it