Duluoz Weblog

Informatica e sviluppo web

Arte matematica

Pubblicato da jackduluoz su febbraio 27, 2008

“Un frattale è un oggetto geometrico che si ripete nella sua struttura allo stesso modo su scale diverse, ovvero che non ambia aspetto anche se visto con una lente d’ingrandimento. Questa caratteristica è spesso chiamata auto-similarità (self-similarity). Il termine frattale venne coniato nel 1975 da Benoît Mandelbrot, e deriva dal latino fractus (rotto, spezzato), così come il termine frazione; infatti le immagini frattali sono considerate dalla matematica oggetti di dimensione frazionaria.” (Wikipedia, voce: ‘Frattale’)

Le immagini in questa pagina sono create usando una tecnica chiamata Buddahbrot particolare per renderizzare l’insieme di Mandelbrot (un famoso frattale) originariamente creata da Melinda Green.

Questa tecnica tiene conto della traiettoria che ogni punto percorre quando su di esso viene applicata iterativamente la nota formula che descrive l’insieme di Mandelbrot: Z = Z2 + C; applicando questa formula ad ogni punto del piano, si nota che alcuni punti tendono ad “allontanarsi”, cioè le coordinate tendono all’infinito, e altri invece convergono verso un punto.
Questa tecnica dai risultati spettacolari prende in considerazione i punti che tendono all’infinito e traccia le loro traiettorie. Essendo questo procedimento applicato a tutti i punti del piano, ci saranno delle zone più “trafficate”, cioè dove passano le traiettorie di molti punti, e altre meno. Il risultato è semplice: quelle più trafficate saranno più luminose, le altre più scure.

Piccola parentesi tecnica sull’implementazione del programma.
Per implementare realmente un programma che renderizza il Buddhabrot ho seguito questo procedimento:
- si crea una matrice in cui ogni elemento rappresenta un pixel dello schermo.
- si sceglie un punto casuale dello schermo e su di esso vengono effettuate le iterazioni della formula.
- se, dopo un certo numero di iterazioni, chiamato bail-out, il punto non tende all’infinito, non lo prendiamo in considerazione,

- altrimenti, se invece le coordinate tendono all’infinito, si ripercorrono i valori assunti da Z durante le iterazioni e si incrementa di 1 la casella della matrice creata in precedenza corrispondete al pixel Z in questione.

Solitamente questo procedimento viene eseguito su un gran numero di punti scelti o casualmente sul piano o facendo una scansione di esso e prendendo in considerazione un punto ogni, per esempio, 0.025 unita.
Piu’ punti si prendono in considerazione e’ piu’ definita sara’ l’immagine. Se in alcune immagini di questa guida vedete una specie di quadrettatura e’ proprio dovuta al fatto che non sono stati “analizzati” molti punti nel crearla, anche perche’, ovviamente, piu’ saranno i punti analizzati e piu’ lungo sara’ il tempo necessario al rendering.
E’ da notare che anche il valore di bail-out, cioe’ il numero massimo di iterazioni per ogni punto, influisce molto sulla resa dell’immagine dando risultati completamente differenti. Ecco tre esempi con valori di bail-out diversi: rispettivamente 25, 50 e 100.

Le immagini che vedete sono in bianco e nero, per ottenere quelle a colori vanno fatti dei piccoli cambiamenti. All’inizio si creano tre immagini con differenti valori di bail-out, e quindi tutte e tre in bianco e nero, poi si impostano queste come i tre livelli RGB di una nuova immagine.

Il programma usato per genereare queste immagini e’ stato scritto da me in C++ ed e’ rilasciato sotto licenza GPL, scaricalo!

Ci sarebbe ancora molto altro da dire… probabilmente scrivero’ un altro articolo in seguito, e aggiungero’ altre immagini, ma per ora penso possa bastare, alla prsdossima!

Lascia un Commento

Fill in your details below or click an icon to log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Log Out / Modifica )

Foto Twitter

You are commenting using your Twitter account. Log Out / Modifica )

Foto di Facebook

You are commenting using your Facebook account. Log Out / Modifica )

Connecting to %s

 
Follow

Get every new post delivered to your Inbox.