<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mind Unpacked &#187; Frattali</title>
	<atom:link href="http://mindunpacked.com/tag/frattali/feed/" rel="self" type="application/rss+xml" />
	<link>http://mindunpacked.com</link>
	<description>informatica.elettronica.chimica.new stuff</description>
	<lastBuildDate>Tue, 22 Dec 2009 17:35:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<image>
<link>http://mindunpacked.com</link>
<url>http://mindunpacked.com/wp-content/plugins/maxblogpress-favicon/icons/favicon-2.ico</url>
<title>Mind Unpacked</title>
</image>
		<item>
		<title>Animare il Buddhabrot</title>
		<link>http://mindunpacked.com/2008/animare-il-buddhabrot/</link>
		<comments>http://mindunpacked.com/2008/animare-il-buddhabrot/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 16:55:53 +0000</pubDate>
		<dc:creator>Francesco</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Buddhabrot]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Frattali]]></category>

		<guid isPermaLink="false">http://mindunpacked.com/?p=244</guid>
		<description><![CDATA[In un precedente articolo abbiamo visto come sia possibile renderizzare immagini dell&#8217;insieme di Mandelbrot ottenendo il cosiddetto Buddhabrot. Oggi mostrerò come si possano renderizzare, invece, delle animazioni del Buddhabrot sfruttando il fatto che questo frattale puo&#8217; essere &#8220;interpretato&#8221; come un oggetto in quattro dimensioni. Spiegare cio&#8217; non e&#8217; molto facile, per il semplice motivo che [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">In un <a title="Renderizzare il Buddhabrot" href="http://mindunpacked.com/2008/un-nuovo-metodo-per-visualizzare-linsieme-di-mandelbrot-il-buddhabrot/" target="_self">precedente articolo</a> abbiamo visto come sia possibile renderizzare immagini dell&#8217;insieme di Mandelbrot ottenendo il cosiddetto <strong>Buddhabrot</strong>. Oggi mostrerò come si possano renderizzare, invece, delle <strong>animazioni del Buddhabrot</strong> sfruttando il fatto che questo frattale puo&#8217; essere &#8220;interpretato&#8221; come un oggetto in quattro dimensioni. Spiegare cio&#8217; non e&#8217; molto facile, per il semplice motivo che non ci e&#8217; possibile visualizzare un oggetto in 4 dimensioni e che dobbiamo accontentarci di una approssimazione creata dalla nostra immaginazione, ma faro&#8217; del mio meglio per rendere l&#8217;articolo il piu&#8217; chiaro possibile.<br />
<span id="more-244"></span><br />
Il concetto di base e&#8217; questo: quando utilizziamo la formula di Mandelbrot e cioe&#8217; Z<sub>n+1</sub>=Z<sub>n</sub><sup>2</sup> + C i valori che entrano in gioco sono 4 e sono le parti reali di Z e C e le loro parti immaginarie (d&#8217;ora in poi saranno indicate con Z.r, C.r, Z.i, C.i); per ogni possibile combinazione di questi quattro valori avremo un solo valore in uscita, diverso per ogni combinazione. Visto pero&#8217;, che non possiamo visualizzare un oggetto in quattro dimensioni, l&#8217;unica cosa che possiamo fare e&#8217; visualizzare una sezione bidimensionale dell&#8217;oggetto, ed e&#8217; questo quello che accade quando poniamo Z=0 nel renderizzare l&#8217;insieme di Mandelbrot. Gli insieme di Julia non sono altro che sezioni dello stesso oggetto ma su piani diversi (che corrispondono ad una diversa scelta del valore iniziale di Z).</p>
<p style="text-align: justify;">In un ambiente tridimensionale abbiamo 3 piani perpendicolari tra di loro; in <strong>4 dimensioni</strong> invece, questi piani diventano 6 e sono rappresentati appunto dalle varie coppie possibili dei 4 valori in entrata: [Z.r, Z.i], [Z.r, C.r], [Z.r, C.i], [Z.i, C.r], [Z.i, C.i], [C.r, C.i]. Questi piani sono tutti perpendicolari tra di loro e sono i piani che si riconoscono a prima vista, ma ovviamente il numero di piani su cui potremmo effettuare delle sezioni da visualizzare e&#8217; infinito. Questo e&#8217; il punto che ci permette di renderizzare delle vere e proprie animazioni che includono delle <strong>rotazioni del Buddhabrot</strong>. Prima di parlare di questo, pero&#8217;, vediamo quali sono le modifiche da effettuare al file sorgente che ho distribuito nel precedente articolo per renderizzare sezioni di piani diverse.</p>
<p style="text-align: justify;">In realta&#8217;, la modifica da fare e&#8217; una sola ed e&#8217; questa: nella funzione escape() si trova questa parte:</p>
<pre class="brush: cpp;">
zz[(int)N].r = ZOOM*(Z.r+OFFSET_X)*(WIDTH/2);
zz[(int)N].i = ZOOM*(Z.i)*(HEIGHT/2) + HEIGHT/2;
</pre>
<p style="text-align: justify;">Come vedete, le coordinate che prendiamo in considerazione sono Z.r e Z.i. Basta cambiare questi valori per renderizzare un&#8217;altra sezione del frattale. Se al posto di Z.i mettiamo, per esempio, C.r, visualizzeremo l&#8217;oggetto visto dal piano [Z.r, C.r].</p>
<p style="text-align: justify;">Vediamo ora come realizzare una rotazione del frattale. Quello che vogliamo fare e&#8217;, in poche parole, passare gradualmente dall&#8217;immagine di un piano, diciamo [Z.r, Z.i] a quella di un&#8217;altro, per esempio, [Z.i, C.r]. Per fare cio&#8217; dobbiamo modificare sempre la formula precedente, nella seguente maniera:</p>
<pre class="brush: cpp;">
zz[(int)N].r = ZOOM*(rot*Z.r+Z.i*(1-rot)+OFFSET_X)*(WIDTH/2);
zz[(int)N].i = ZOOM*(rot*Z.i+C.r*(1-rot))*(HEIGHT/2) + HEIGHT/2;
</pre>
<p><center><script type="text/javascript">
heyos_ad_user = 11334;
heyos_ad_type = "G";
heyos_ad_format = "1";
heyos_color_border = "23292b";
heyos_color_bg = "23292b";
heyos_color_link = "FFFFFF";
heyos_color_text = "21b8ca";
heyos_color_url = "21b8ca";
</script>
<script type="text/javascript" src="http://admaster.heyos.com/core/bnr.js"></script></center></p>
<p style="text-align: justify">E&#8217; apparso un nuovo coefficiente, rot. Questo, come potete immaginare, e&#8217; un coefficiente che rappresenta, se vogliamo, l&#8217;angolo di rotazione. Per un valore di rot pari a 1, verra&#8217; renderizzato il piano [Z.r, Z.i] poiche&#8217; 1-rot = 0 e quindi le parti Z.i e C.r si annullano. Per rot = 0, avverra&#8217; il contrario. Ovviamente per valori di rot che variano tra 0 e 1 otteremo immagini diverse, per esempio, visto che la rotazione complessiva e&#8217; di 90° (da rot = 0 a rot = 1), rot=0.5 dovrebbe corrispondere ad una rotazione di 45°. Se si renderizzano varie immagini per valori di rot che aumentano progressivamente da 0 a 1, si otterra&#8217; una vera e propria animazione del Buddhabrot rotante.</p>
<p style="text-align: justify">Ora, se non volete mettervi a modificare manualmente ogni volta il valore di rot, vi conviene aggiungere un paio di cicli for al codice e fare in modo che, ad ogni ciclo, il valore di rot venga modificato per renderizzare un&#8217;immagine diversa. Ecco un esempio di &#8220;rotazione&#8221;, anche se non appare affatto come tale:</p>
<p style="text-align: center"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/NcyQHsuv-1o&amp;hl=it&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/NcyQHsuv-1o&amp;hl=it&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p style="text-align: justify">Vi lascio un ultimo link alla pagina originale creata da chi ha scoperto questa tecnica (e&#8217; in inglese): <a title="Buddhabrot Hologram" href="http://www.superliminal.com/fractals/bgram/ZrZiOut.htm" target="_blank">http://www.superliminal.com/fractals/bgram/ZrZiOut.htm</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mindunpacked.com/2008/animare-il-buddhabrot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Un nuovo metodo per visualizzare l&#8217;insieme di Mandelbrot: il Buddhabrot.</title>
		<link>http://mindunpacked.com/2008/un-nuovo-metodo-per-visualizzare-linsieme-di-mandelbrot-il-buddhabrot/</link>
		<comments>http://mindunpacked.com/2008/un-nuovo-metodo-per-visualizzare-linsieme-di-mandelbrot-il-buddhabrot/#comments</comments>
		<pubDate>Mon, 01 Dec 2008 23:25:58 +0000</pubDate>
		<dc:creator>Francesco</dc:creator>
				<category><![CDATA[Informatica]]></category>
		<category><![CDATA[Buddhabrot]]></category>
		<category><![CDATA[Frattali]]></category>
		<category><![CDATA[Mandelbrot]]></category>

		<guid isPermaLink="false">http://mindunpacked.com/?p=116</guid>
		<description><![CDATA[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&#8217;insieme di Mandelbrot che è uno dei frattali più famosi. Per questo motivo darò per scontati alcuni concetti di base e anche la conoscenza dell&#8217;insieme [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">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&#8217;<strong>insieme di Mandelbrot</strong> che è uno dei frattali più famosi. Per questo motivo darò per scontati alcuni concetti di base e anche la conoscenza dell&#8217;insieme di Mandelbrot. L&#8217;articolo sarà corredato dal codice di un programma in C++, che è lo stesso che ho usato per renderizzare le immagini presenti in questo articolo.<br />
<span id="more-116"></span><br />
Il <strong>Buddhabrot</strong> è una tecnica speciale inventata da <a title="Pagina del Buddhabrot di Melina Green" href="http://www.superliminal.com/fractals/bbrot/bbrot.htm" target="_blank">Melinda Green</a> che porta a dei risultati davvero spettacolari. Per disegnare l&#8217;insieme di Mandelbrot si analizzano vari punti del piano e si considerano appartenenti all&#8217;insieme quelli che <strong>non divergono</strong> (cioè non tendono ad allontanarsi ad una distanza infinita dall&#8217;origine) quando gli viene applicata ripetutamente la formula Z<sub>n+1</sub> = Z<sub>n</sub><sup>2</sup> + C. Nella formula C è un numero complesso che rappresenta le coordinate del punto che stiamo analizzando, e si parte da Z<sub>0</sub> = 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 <strong>divergono</strong> 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.</p>
<p style="text-align: justify;">Quando si renderizza l&#8217;insieme di Mandelbrot l&#8217;appartenenza di un punto all&#8217;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 <strong>bailout</strong>) il punto viene considerato appartenente all&#8217;insieme. Chiaramente questo è scorretto dal punto di vista teorico, perchè si dovrebbe verificare che un punto non diverge quando il bailout tende all&#8217;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&#8217;origine diventa maggiore di 2.</p>
<p style="text-align: justify;">Quando il bailout è abbastanza alto i risultati che otterremo saranno più precisi. Anche se il bailout è relativamente trascurabile per l&#8217;insieme di <strong>Mandelbrot</strong> (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:</p>
<table style="text-align: justify;" border="0">
<tbody>
<tr>
<td>
<p><div id="attachment_129" class="wp-caption alignnone" style="width: 310px"><a href="http://mindunpacked.com/wp-content/uploads/2008/11/1.jpg"><img class="size-medium wp-image-129" title="Buddhabrot N=20" src="http://mindunpacked.com/wp-content/uploads/2008/11/1-300x300.jpg" alt="Buddhabrot N=20" width="300" height="300" /></a><p class="wp-caption-text">Buddhabrot N=20</p></div></td>
<td>
<p><div id="attachment_131" class="wp-caption alignnone" style="width: 310px"><a href="http://mindunpacked.com/wp-content/uploads/2008/11/2.jpg"><img class="size-medium wp-image-131" title="Buddhabrot N=200" src="http://mindunpacked.com/wp-content/uploads/2008/11/2-300x300.jpg" alt="Buddhabrot N=200" width="300" height="300" /></a><p class="wp-caption-text">Buddhabrot N=200</p></div></td>
</tr>
</tbody>
</table>
<p style="text-align: justify;"><center><script type="text/javascript">
heyos_ad_user = 11334;
heyos_ad_type = "G";
heyos_ad_format = "1";
heyos_color_border = "23292b";
heyos_color_bg = "23292b";
heyos_color_link = "FFFFFF";
heyos_color_text = "21b8ca";
heyos_color_url = "21b8ca";
</script>
<script type="text/javascript" src="http://admaster.heyos.com/core/bnr.js"></script></center><br />
I parametri che concorrono a determinare la qualità dei nostri rendering sono i seguenti:</p>
<ul style="text-align: justify;">
<li><strong>bailout</strong>: 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.</li>
</ul>
<ul style="text-align: justify;">
<li><strong> numero di pixels esaminati</strong>: di più pixels esaminiamo le traiettorie e più nitida sarà la nostra immagine. Quando il numero di pixels non è sufficiente otteniamo un fastidioso &#8220;effetto griglia&#8221;.</li>
</ul>
<ul style="text-align: justify;">
<li><strong> risoluzione</strong>: ovviamente, più è alta la risoluzione è migliore sarà la nostra immagine. C&#8217;è 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.</li>
</ul>
<p style="text-align: justify;">I tempi di rendering per questo tipo di frattale sono piuttosto lunghi, e quando i parametri qualitativi sono elevati diventano quasi insopportabili.</p>
<p style="text-align: justify;">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 <a title="Come la NASA colora le immagini" href="http://hubblesite.org/sci.d.tech/behind_the_pictures/meaning_of_color/index.shtml" target="_blank">colorare le immagini astronomiche</a>, cioè i <a title="Falsi colori, Wikipedia" href="http://en.wikipedia.org/wiki/False-color" target="_blank">falsi colori</a>. 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&#8217;immagine. Otterremo in questa maniera immagini simili alle seguenti:</p>
<table style="text-align: justify;" border="0">
<tbody>
<tr>
<td>
<p><div id="attachment_181" class="wp-caption alignnone" style="width: 310px"><a href="http://mindunpacked.com/wp-content/uploads/2008/12/3.jpg"><img class="size-medium wp-image-181" title="Buddahbrot 1" src="http://mindunpacked.com/wp-content/uploads/2008/12/3-300x300.jpg" alt="" width="300" height="300" /></a><p class="wp-caption-text">valore di bailout = 500, risoluzione = 1024x1024, tempo di rendering 50 minuti</p></div></td>
<td>
<p><div id="attachment_182" class="wp-caption alignnone" style="width: 310px"><a href="http://mindunpacked.com/wp-content/uploads/2008/12/davebrotmy6.jpg"><img class="size-medium wp-image-182" title="Buddahbrot" src="http://mindunpacked.com/wp-content/uploads/2008/12/davebrotmy6-300x300.jpg" alt="" width="300" height="300" /></a><p class="wp-caption-text">I dati di questa immagine non li ricordo... spero mi perdoniate.</p></div></td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">(Nota: i colori dell&#8217;ultima immagine sono stati leggermente ritoccati con Photoshop)</p>
<p style="text-align: justify;">Bene, per ora è tutto. Spero di scrivere un secondo articolo su questo argomento in cui descriverò un&#8217;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: <a title="Buddhabrot C++" href="http://www.mindunpacked.com/risorse/buddhabrot.tar.gz" target="_self">Buddhabrot C++</a></p>
<p style="text-align: justify;">Alla prossima&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://mindunpacked.com/2008/un-nuovo-metodo-per-visualizzare-linsieme-di-mandelbrot-il-buddhabrot/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

<!-- www.000webhost.com Analytics Code -->
<script type="text/javascript" src="http://analytics.hosting24.com/count.php"></script>
<noscript><a href="http://www.hosting24.com/"><img src="http://analytics.hosting24.com/count.php" alt="web hosting" /></a></noscript>
<!-- End Of Analytics Code -->
