Un nuovo metodo per visualizzare l’insieme di Mandelbrot: il Buddhabrot.
1 December 2008 da Francesco
Chi si interessa di matematica avrà sicuramente sentito parlare di quelle meravigliose figure che sono i frattali. In questo articolo vi parlerò di un metodo particolare, chiamato Buddhabrot, per visualizzare l’insieme di Mandelbrot che è uno dei frattali più famosi. Per questo motivo darò per scontati alcuni concetti di base e anche la conoscenza dell’insieme di Mandelbrot. L’articolo sarà corredato dal codice di un programma in C++, che è lo stesso che ho usato per renderizzare le immagini presenti in questo articolo.
Il Buddhabrot è una tecnica speciale inventata da Melinda Green che porta a dei risultati davvero spettacolari. Per disegnare l’insieme di Mandelbrot si analizzano vari punti del piano e si considerano appartenenti all’insieme quelli che non divergono (cioè non tendono ad allontanarsi ad una distanza infinita dall’origine) quando gli viene applicata ripetutamente la formula Zn+1 = Zn2 + C. Nella formula C è un numero complesso che rappresenta le coordinate del punto che stiamo analizzando, e si parte da Z0 = 0. La tecnica inventata da Melinda Green, invece, tiene in considerazione non la divergenza o meno di un punto ma la traiettoria descritta dai punti che divergono quando gli viene applicata ripetutamente la formula. Tutti i punti del piano descriveranno diverse traiettorie, così ci saranno zone meno trafficate e zone più trafficate, le prime risulteranno più scure e le ultime più luminose. Se, invece di considerare le traiettorie dei punti che divergono considerassimo quelle dei punti che non divergono otterremo il cosidetto Anti-Buddhabrot.
Quando si renderizza l’insieme di Mandelbrot l’appartenenza di un punto all’insieme viene stabilita in base alla divergenza dello stesso. Per testare la divergenza viene applicata la formula su di esso diverse volte e, se il punto non accenna a divergere dopo un determinato numero di iterazioni (detto bailout) il punto viene considerato appartenente all’insieme. Chiaramente questo è scorretto dal punto di vista teorico, perchè si dovrebbe verificare che un punto non diverge quando il bailout tende all’infinito, ma visto che non è possibile effettuare un numero infinito di iterazioni ci si accontenta di un valore di bailout abbastanza alto che consente una notevole approssimazione. Ah, un punto viene considerato divergente quando la sua distanza dall’origine diventa maggiore di 2.
Quando il bailout è abbastanza alto i risultati che otterremo saranno più precisi. Anche se il bailout è relativamente trascurabile per l’insieme di Mandelbrot (con valori abbastanza alti non si nota la differenza tra un valore ed un altro a meno che non stiamo zoomando), esso diviene fondamentale per renderizzare il Buddhabrot, ecco due immagini con valori di bailout diversi:
I parametri che concorrono a determinare la qualità dei nostri rendering sono i seguenti:
- bailout: come abbiamo appena detto, più il bailout è elevato e minore sarà il margine di errore che potremmo avere su ogni punto. Per esempio, ci sono punti che divergono molto lentamente e che con un bailout basso vengono considerati non divergenti.
- numero di pixels esaminati: di più pixels esaminiamo le traiettorie e più nitida sarà la nostra immagine. Quando il numero di pixels non è sufficiente otteniamo un fastidioso “effetto griglia”.
- risoluzione: ovviamente, più è alta la risoluzione è migliore sarà la nostra immagine. C’è da notare, però, che immagini a risoluzione più alta richiedono un numero di pixels esaminati maggiore per ottenere risultati buoni, rispetto a immagini con risoluzione minore.
I tempi di rendering per questo tipo di frattale sono piuttosto lunghi, e quando i parametri qualitativi sono elevati diventano quasi insopportabili.
Le immagini che abbiamo visto fino ad ora sono tutte in bianco e nero. Per ottenere risultati a colori viene usata una tecnica simile a quella che la NASA usa per colorare le immagini astronomiche, cioè i falsi colori. Così come la NASA assegna un colore diverso ad ogni frequenza della luce che riceve dallo spazio, noi creiamo tre immagini in bianco e nero con diversi valori di bailout e le assegnamo rispettivamente ai canali R, G e B dell’immagine. Otterremo in questa maniera immagini simili alle seguenti:
(Nota: i colori dell’ultima immagine sono stati leggermente ritoccati con Photoshop)
Bene, per ora è tutto. Spero di scrivere un secondo articolo su questo argomento in cui descriverò un’altra tecnica per renderizzare animazioni con il Buddhabrot (che in realtà può essere immaginato come un oggetti in 4 dimensioni), ma siccome i tempi di rendering sono piuttosto lunghi, dovrete aspettare che finisca di renderizzare un bel video. Allego qui il file sorgente del programma che ho usato per realizzare i rendering: Buddhabrot C++
Alla prossima…
Tags: Buddhabrot, Frattali, Mandelbrot
Pubblicato in Informatica | Commenti (5)





8 December 2008 alle 19:12
Tutto molto interessante, belle anche le immagini (specie l’ultima XD)…ma……….modificate il css e fate il colore del corpo delle pagine un po piu scuro, c’e troppo poco contrasto ed è stancante la lettura delle pagine…vi prego…
10 December 2008 alle 07:20
lo pensavo anche io. perfettamente.
17 December 2008 alle 11:56
[...] un precedente articolo abbiamo visto come sia possibile renderizzare immagini dell’insieme di Mandelbrot ottenendo [...]
8 January 2009 alle 14:02
Sono fubus vorrei sapere chi ha fatto il programmino del buddhabrot perche ho fatto alcune modifiche per e vorrei parlare con lui.
mia e-mail: 0fubus0@gmail.com
new fix:
aggiunta la possibilità di cambiare i parametri dal programma e non dal codice;
aggiunti i contatori percentili per gli assi x e y in modo da sapere esattamente a che punto è la renderizzaione
sono solo cosine ma se mi contatta magari possiamo creare un metodo di renderizzaione più veloce
9 January 2009 alle 13:52
L’autore sono io, ti contatto sulla tua email.