I wrote a Mandelbrot set generator. It works on Windows ActivePerl 5.20.2 x64, but I haven't tried it on *nix. It outputs a smoothed, anti-aliased fractal image to 24-bit .bmp file. For optimizations, it takes advantage of symmetry; it skips the cardoid, the main bulb, and the line across y=0; and it checks for cycles when the iteration count gets high. On my computer (2.40GHz i5-2430M), it takes about 10 minutes to generate a 1500x1000 image.

+ ( + $w, $a) +=@ARGV ;$w- +=$w%12 ;op +en($f, ' +>', $a );binmod +e$f;$|=1;$z= 16384;@g=(" Do +ne!\n","Gene". "r" ."ating fractal + with dimensions " . $w." by ".2/3*$w +."...\n","\nSavin". "g fractal to ".$a +."...");print$f 'BM' .pack('VVVVvvvv',$w +*$w*2+26,$n,26,12,$w,$w *2/3,1,24);sub a{($ +r,$i,$x,$y,$j,@s)=@_; ;; return $z if(($r+1)**2+$i*$ +i<1/16||(($r-1/4)**2+ $i*$i)*((($r -1/4)**2+$i*$i)+($r-1 +/4))<1/4*$i*$i or!$i&& abs($r+1)<1);do{ return $j-log(log($x*$ +x+$y*$y)*0.5/log(2))/ log(2)if((push@s,($x,$y))&&$x*$x+$y*$y>3 +6);$t=1;($x,$y)=($r+ $x* $x-$y*$y,$i+2*$x*$y);if($j%int($z/11)==0& +&$j){for(@s){return $z if($s[$j-$t++]eq$s[$j])}}}while($j++<$z);return$z}$u.=' 'while($o++ +<51);print$g[1]. $u. "]\r[";do{if(($k-1)/($w*($w/3+1))<$n&&$k/ +($w*($w/3+1))>=$n){ $n+=0.02;print'='}$h=4;$v[$k]+=a(3.7*($k +%$w+int($h/3)/3)/$w- 2.6,3.7*(int($k/ $w)+($h--%3-0)/3)/$w)/ +9 while($h>-5)}while( $k++<$w*($w/ 3+1));print$g[2];prin +t$f pack('ccc',(($z-$p )/ $z-2** -($p-2.8))*64*(sin(1 +.1+log($p)*4)-sin(log ($p)*8+1.1)/3+5/3), +(($z-$p)/$z-2**-($p- 2.8))*64*(sin(log( +$p)*4-1.1)+sin(log($p) *8-1.1)/3+5/3),2* +(($z-$p)/$z-2**-($p - 2.8))*63.5*(sin( +log($p)*4-1.25)+1) )while(($p=$v[ +abs($w/3-int($l/$w ))*$w+$l++%$w] ++2.8)-2.8);;;; ;;; ;; close$f; +;#MANDELBROT # +SET #K. +STREHL 06/1 +4/2015 ;;p +rint$g + [0 + ]

The code's designed to look like the set, of course. It takes user input to determine the size of the image and the outfile, i.e.:

C:\Users\Kevin>mandelgen.pl 1200 mandel.bmp Generating fractal with dimensions 1200 by 800... [==================================================] Saving fractal to mandel.bmp... Done!

If the given pixel width isn't divisible by 12, the program subtracts until it is.

for$b(-25..25){for$a(-50..29){$x=$a/21;$y=$b/15;print$b?chr:chr^chr ord(substr'<6C}'.1x29 .'[FDEq2?@E96Cqa6C=q924',$a)-49;$_=30;($y,$x) =(2*$x*$y+$b/15,$x*$x-$y*$y+$a/21)while$x*$x+$y*$y<9&$_++<95}$_=10}

In reply to Optimized Mandelbrot set generator by thisisdada

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.