Title
Author
Link http://thunked.org/p/view/pub/
Created 2012-08-12 11:06:50
Expires never
Filename mandelbrot
Language Perl
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
#!/usr/bin/perl
use strict;
use warnings;
use GD;

my $x;
my $xx;
my $y;
my $yy;
my $cx;
my $cy;
my $hx;
my $hy;
my $iteration;

my $max_iterations      = 100;
my $magnify                     = 1;
my $final_magnify       = 1;
my $total_frames        = 1;
my $height                      = 1000;
my $width                       = 1000;

for(my $frame=1; $frame<=$total_frames; $frame++){
        print "\nDrawing Frame ".$frame."...";
        my $im = new GD::Image($width,$height,1);
        my $blue = $im->colorAllocate(0,0,100);
        my $white= $im->colorAllocate(255,255,255);
        $im->setAntiAliased($blue);

        my $x_draw = 0;
        my $y_draw = 0;
        for($hy=1; $hy<=$height; $hy++){
                for($hx=1; $hx<=$width; $hx++){
                        $cx = (($hx/$width)-.5)/$magnify*3-.7;
                        $cy = (($hy/$height)-.5)/$magnify*3;
                        $x=0;
                        $y=0;
                        for($iteration=1;$iteration<$max_iterations; $iteration++){
                                $xx = $x*$x-$y*$y+$cx;
                                $y  = 2*$x*$y+$cy;
                                $x  = $xx;
                                if($x*$x+$y*$y>100){
                                        $iteration = 999999;
                                }
                        }
                        if($iteration < 999999){
                                $im->setPixel($x_draw,$y_draw,gdAntiAliased);
                        }
                        else {
                                $im->setPixel($x_draw,$y_draw,$white);
                        }
                        if($x_draw == $width-1){
                                $x_draw = 0;
                                $y_draw++;
                        }
                        else{
                                $x_draw++;
                        }
                }
        }
        #$magnify = $magnify+($final_magnify-$magnify)*($frame/$total_frames);
        open IMAGE, "+>frame-".$frame.".png";
        print IMAGE $im->png;
}