{"id":331,"date":"2011-04-07T01:17:39","date_gmt":"2011-04-07T00:17:39","guid":{"rendered":"http:\/\/julia2.lucaamore.com\/?p=331"},"modified":"2024-02-09T21:06:32","modified_gmt":"2024-02-09T19:06:32","slug":"rappresentazione-dellinsieme-frattale-di-mandelbrot","status":"publish","type":"post","link":"https:\/\/www.lucaamore.com\/?p=331","title":{"rendered":"Rappresentazione dell&#8217;insieme frattale di Mandelbrot in Perl"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_mandelbrot_steampunk_inside_a_monitor_510df169-e51b-433f-94f1-f18eac4ea6ac.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_mandelbrot_steampunk_inside_a_monitor_510df169-e51b-433f-94f1-f18eac4ea6ac-1024x1024.png\" alt=\"\" class=\"wp-image-1582\" srcset=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_mandelbrot_steampunk_inside_a_monitor_510df169-e51b-433f-94f1-f18eac4ea6ac-1024x1024.png 1024w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_mandelbrot_steampunk_inside_a_monitor_510df169-e51b-433f-94f1-f18eac4ea6ac-300x300.png 300w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_mandelbrot_steampunk_inside_a_monitor_510df169-e51b-433f-94f1-f18eac4ea6ac-150x150.png 150w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_mandelbrot_steampunk_inside_a_monitor_510df169-e51b-433f-94f1-f18eac4ea6ac-768x768.png 768w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_mandelbrot_steampunk_inside_a_monitor_510df169-e51b-433f-94f1-f18eac4ea6ac-1536x1536.png 1536w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2023\/01\/lukelv_mandelbrot_steampunk_inside_a_monitor_510df169-e51b-433f-94f1-f18eac4ea6ac.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p>La rappresentazione dell&#8217;insieme di <a title=\"Mandelbrot set Wikipedia\" href=\"http:\/\/en.wikipedia.org\/wiki\/Mandelbrot_set\">Mandelbrot<\/a>, considerato uno dei <a title=\"Fractal Wikipedia\" href=\"http:\/\/en.wikipedia.org\/wiki\/Fractal\">frattali<\/a> pi\u00f9 popolari, \u00e8 tra i miei algoritmi di prova preferiti quando studio un nuovo linguaggio di programmazione.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/800px-Mandelset_hires.png\"><img loading=\"lazy\" decoding=\"async\" width=\"800\" height=\"579\" src=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/800px-Mandelset_hires.png\" alt=\"\" class=\"wp-image-375\" srcset=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/800px-Mandelset_hires.png 800w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/800px-Mandelset_hires-300x217.png 300w\" sizes=\"auto, (max-width: 800px) 100vw, 800px\" \/><\/a><figcaption class=\"wp-element-caption\">Mandelbrot<\/figcaption><\/figure>\n\n\n\n<p>L&#8217;algoritmo di base \u00e8 estremamente semplice e si presta facilmente ad esser parallelizzato.<\/p>\n\n\n\n<p>Recentemente, all&#8217;interno dei Google Labs, \u00e8 stata rilasciata un&#8217;applicazione Web che, sfruttando le API di Google Maps e canvas di HTML5, permette la navigazione all&#8217;interno dell&#8217;insieme di Mandelbrot o di altri frattali (es. Julia); vi consiglio di utilizzarla per un tour veloce.<\/p>\n\n\n\n<p><strong>Definizione formale<\/strong><\/p>\n\n\n\n<p>L&#8217;insieme di Mandelbrot \u00e8 definito come il sottoinsime del piano complesso per cui la successione ricorsiva:<\/p>\n\n\n<p><img src='https:\/\/s0.wp.com\/latex.php?latex=+P%5Ec_n%3D+%5Cbegin%7Bcases%7D+%26+Z_0%3D0+%5C%5C+%26+Z_%7Bn%2B1%7D%3DZ_n%5E2%2Bc+%5Cend%7Bcases%7D+&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' P^c_n= \\begin{cases} &amp; Z_0=0 \\\\ &amp; Z_{n+1}=Z_n^2+c \\end{cases} ' title=' P^c_n= \\begin{cases} &amp; Z_0=0 \\\\ &amp; Z_{n+1}=Z_n^2+c \\end{cases} ' class='latex' \/><\/p>\n\n\n\n<p>al tendere di n all&#8217;infinito, rimane limitata nel suo modulo, ovvero:<\/p>\n\n\n<p><img src='https:\/\/s0.wp.com\/latex.php?latex=+M%3D%5Cleft%5C%7Bc%5Cin+%5Cmathbb%7BC%7D+%3A+%5Cexists+s+%5Cin+%5Cmathbb%7BR%7D%2C+%5Cforall+n+%5Cin+%5Cmathbb%7BN%7D%2C%7CP_n%5Ec%7C+%5Cleq+s+%5Cright%5C%7D+&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' M=\\left\\{c\\in \\mathbb{C} : \\exists s \\in \\mathbb{R}, \\forall n \\in \\mathbb{N},|P_n^c| \\leq s \\right\\} ' title=' M=\\left\\{c\\in \\mathbb{C} : \\exists s \\in \\mathbb{R}, \\forall n \\in \\mathbb{N},|P_n^c| \\leq s \\right\\} ' class='latex' \/><\/p>\n\n\n\n<p><strong>Sorgente perl<\/strong><\/p>\n\n\n\n<p>Ecco un sorgente perl che rappresenta l&#8217;insieme in modalit\u00e0 rigorosamente monocromatica:<br><\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: perl; gutter: false; title: ; notranslate\" title=\"\">\n#!\/usr\/bin\/perl\n \n##########################\n# M A N D E L B R O T\n# Luca Amore\n##########################\n \nuse strict;\nuse warnings;\n \nuse GD;\n \nmy $FILENAME = 'mandelbrot.png';\nmy $ITERATIONS = 30;\nmy ($SIZEX, $SIZEY) = (700, 400);\nmy ($RE_MIN, $RE_MAX) = (-2.5, 1.0);\nmy ($IM_MIN, $IM_MAX) = (-1.0, 1.0);\n \nmy $re_factor = ($RE_MAX - $RE_MIN) \/ $SIZEX;\nmy $im_factor = ($IM_MAX - $IM_MIN) \/ $SIZEY;\n \nmy $img = new GD::Image-&gt;newTrueColor($SIZEX,$SIZEY)\n    or die \"Can't create GD::Image\";\n \n# palette\nmy $cl_black = $img-&gt;colorAllocate(  0,  0,  0);\nmy $cl_white = $img-&gt;colorAllocate(255,255,255);\n \nopen(my $fh, '&gt;', $FILENAME)\n    or die \"Can't open $FILENAME: $!\";\n \nbinmode $fh;\n \nmy $C_im = $IM_MIN;\n \nYY: for (my $yy=0; $yy &lt; $SIZEY; $yy++){\n \n    my $C_re = $RE_MIN;\n \n    XX: for (my $xx=0; $xx &lt; $SIZEX; $xx++){\n \n        my ($Z_re, $Z_im, $i) = (0,0);\n \n        # Z0=0, Zn+1 = Zn^2 + C\n        ESCAPE_ITERATIONS: for ($i = 1; $i &lt; $ITERATIONS; $i++){\n \n            my ($Z_re2, $Z_im2) = ($Z_re * $Z_re, $Z_im * $Z_im);\n \n            last ESCAPE_ITERATIONS unless ($Z_re2 + $Z_im2 &lt; 4);\n \n            # (a+bi)^2 = a^2 + 2abi - b^2\n            $Z_im = 2 * $Z_re * $Z_im + $C_im;\n            $Z_re = $Z_re2 - $Z_im2 + $C_re;\n \n        } # end: ESCAPE_ITERATIONS\n \n        # draw pixel\n        $img-&gt;setPixel(\n            $xx, $yy, $i == $ITERATIONS ? $cl_black : $cl_white\n        );\n \n        $C_re += $re_factor;\n \n    } # end: XX\n \n    $C_im += $im_factor;\n \n} # end: YY\n \n# save image\nprint $fh $img-&gt;png(0);\nclose $fh;\n<\/pre><\/div>\n\n\n<p>Il codice \u00e8 stato mantenuto semplice per facilitare le modifiche e la comprensione.<\/p>\n\n\n\n<p>E&#8217; richiesto il package <a title=\"GD\" href=\"http:\/\/search.cpan.org\/~lds\/GD-2.45\/GD.pm\">GD<\/a> per la produzione dell&#8217;immagine di output in formato PNG: &#8220;<em>mandelbrot.png<\/em>&#8220;.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/mandelbrot.png\"><img loading=\"lazy\" decoding=\"async\" width=\"700\" height=\"400\" src=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/mandelbrot.png\" alt=\"\" class=\"wp-image-437\" srcset=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/mandelbrot.png 700w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/mandelbrot-300x171.png 300w\" sizes=\"auto, (max-width: 700px) 100vw, 700px\" \/><\/a><figcaption class=\"wp-element-caption\">mandelbrot.png generato dal sorgente perl<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"has-text-align-center\">&nbsp;<\/p>\n\n\n\n<p><span style=\"color: #000000;\"><strong>Colori<\/strong><\/span><\/p>\n\n\n\n<p>Normalmente, per rendere tale frattale pi\u00f9 gradevole, nella sua rappresentazione pi\u00f9 semplice, si colorano i punti esterni all&#8217;insieme in funzione della velocit\u00e0 con la quale divergono a pi\u00f9 infinito. Per la colorazione dei punti interni ed esterni esistono una miriade di algoritmi di complessit\u00e0 crescente; <a title=\"Colorazione insieme di Mandelbrot\" href=\"http:\/\/www.mrob.com\/pub\/muency\/color.html\">alcuni spunti interessanti<\/a>.<\/p>\n\n\n\n<p><strong>Insieme di Julia<\/strong><\/p>\n\n\n\n<p>Una variante dell&#8217;insieme di Mandelbrot \u00e8 l&#8217;insieme di <a title=\"Julia Set Wikipedia\" href=\"http:\/\/en.wikipedia.org\/wiki\/Julia_set\">Julia<\/a> definito in questo modo:<\/p>\n\n\n<p><img src='https:\/\/s0.wp.com\/latex.php?latex=+Q_n%5EK%28c%29%3D+%5Cbegin%7Bcases%7D+%26+Z_0%3Dc+%5C%5C+%26+Z_%7Bn%2B1%7D%3DZ_n%5E2%2BK+%5Cend%7Bcases%7D+&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' Q_n^K(c)= \\begin{cases} &amp; Z_0=c \\\\ &amp; Z_{n+1}=Z_n^2+K \\end{cases} ' title=' Q_n^K(c)= \\begin{cases} &amp; Z_0=c \\\\ &amp; Z_{n+1}=Z_n^2+K \\end{cases} ' class='latex' \/><\/p>\n\n\n\n<p>Rispetto all&#8217;insieme di Mandelbrot cambia la successione ricorsiva ed \u00e8 stata introdotta una costante complessa K.<\/p>\n\n\n\n<p>Analogamente a Mandelbrot i punti appartenenti all&#8217;insieme di Julia sono quelli per cui il modulo della successione ricorsiva non diverge.<\/p>\n\n\n<p><img src='https:\/\/s0.wp.com\/latex.php?latex=+J%3D%5Cleft%5C%7Bc%5Cin+%5Cmathbb%7BC%7D+%3A+%5Cexists+s+%5Cin+%5Cmathbb%7BR%7D%2C+%5Cforall+n+%5Cin+%5Cmathbb%7BN%7D%2C%7CQ_n%5EK%28c%29%7C+%5Cleq+s+%5Cright%5C%7D+&#038;bg=ffffff&#038;fg=000000&#038;s=0' alt=' J=\\left\\{c\\in \\mathbb{C} : \\exists s \\in \\mathbb{R}, \\forall n \\in \\mathbb{N},|Q_n^K(c)| \\leq s \\right\\} ' title=' J=\\left\\{c\\in \\mathbb{C} : \\exists s \\in \\mathbb{R}, \\forall n \\in \\mathbb{N},|Q_n^K(c)| \\leq s \\right\\} ' class='latex' \/><\/p>\n\n\n\n<p>Alcuni valori di K che si consiglia di esplorare:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>K = 0.353+0.288i<\/li>\n\n\n\n<li>K = -0.70176-0.3842i<\/li>\n\n\n\n<li>K = -0.835-0.2321i<\/li>\n\n\n\n<li>K= -0.45+0.1428i<\/li>\n<\/ul>\n\n\n\n<p>Dopo aver adeguato lo script perl, ho rappresentato questi insiemi di Julia:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/julia1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"360\" src=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/julia1.png\" alt=\"Insieme di Julia (K=0.353+0.288i)\" class=\"wp-image-438\" srcset=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/julia1.png 400w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/julia1-300x270.png 300w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/a><figcaption class=\"wp-element-caption\">Insieme di Julia (K=0.353+0.288i)<\/figcaption><\/figure>\n<\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/julia2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"360\" height=\"200\" src=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/julia2.png\" alt=\"\" class=\"wp-image-439\" srcset=\"https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/julia2.png 360w, https:\/\/www.lucaamore.com\/wp-content\/uploads\/2011\/04\/julia2-300x166.png 300w\" sizes=\"auto, (max-width: 360px) 100vw, 360px\" \/><\/a><figcaption class=\"wp-element-caption\">Insieme di Julia (K=-0.835-0.2321i)<\/figcaption><\/figure>\n<\/div>\n\n\n<p><strong>Riferimenti<\/strong><\/p>\n\n\n\n<p><span style=\"color: #000000;\"><a title=\"Mandelbrot Set Wikipedia\" href=\"http:\/\/en.wikipedia.org\/wiki\/Mandelbrot_set\">Mandelbrot Set &#8211; Wikipedia<\/a><a title=\"Mu-Ency - The Encyclopedia of the Mandelbrot Set\" href=\"http:\/\/www.mrob.com\/pub\/muency.html\"><br>Mu-Ency &#8211; The Encyclopedia of the Mandelbrot Set<br><\/a><a title=\"The Mandelbrot Set (algoritmo tracciamento)\" href=\"http:\/\/warp.povusers.org\/Mandelbrot\/\">The Mandelbrot Set (algoritmo tracciamento)<br><\/a><a title=\"Julia Set Wikipedia\" href=\"http:\/\/en.wikipedia.org\/wiki\/Julia_set\">Julia Set &#8211; Wikipedia<\/a><br><strong><br>Esplorazione<\/strong><\/span><\/p>\n\n\n\n<p><a title=\"Visual Guide To Patterns In The Mandelbrot Set\" href=\"http:\/\/web.archive.org\/web\/20151212124831\/http:\/\/www.miqel.com:80\/fractals_math_patterns\/mandelbrot_fractal_guide.html\">Visual Guide To Patterns In The Mandelbrot Set<\/a><a title=\"Mandelbrot: World Map and Popular Tourist Areas\" href=\"https:\/\/web.archive.org\/web\/20170504153539\/http:\/\/66.39.71.195:80\/Derbyshire\/manguide.html\">Mandelbrot: World Map and Popular Tourist Areas<br><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La rappresentazione dell&#8217;insieme di Mandelbrot, considerato uno dei frattali pi\u00f9 popolari, \u00e8 tra i miei algoritmi di prova preferiti quando studio un nuovo linguaggio di programmazione. L&#8217;algoritmo di base \u00e8 estremamente semplice e si presta facilmente ad esser parallelizzato. Recentemente, &hellip; <a href=\"https:\/\/www.lucaamore.com\/?p=331\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":1593,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","footnotes":""},"categories":[25,31,23,32,26,28,24,27,12,165],"tags":[84,83,86,85,71],"class_list":["post-331","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-algorithms","category-caos","category-fractals","category-freesoftware","category-gd","category-julia","category-mandelbrot","category-math","category-perl","category-top","tag-chaos","tag-fractal","tag-julia","tag-mandelbrot","tag-perl"],"_links":{"self":[{"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=\/wp\/v2\/posts\/331","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=331"}],"version-history":[{"count":119,"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=\/wp\/v2\/posts\/331\/revisions"}],"predecessor-version":[{"id":2072,"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=\/wp\/v2\/posts\/331\/revisions\/2072"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=\/wp\/v2\/media\/1593"}],"wp:attachment":[{"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=331"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=331"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lucaamore.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=331"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}