#!C:\Perl\bin\perl.exe -w use strict; use Win32::GUI; use Math::Complex; my $Win; $Win = new Win32::GUI::Window( -left => 100, -top => 100, -width => 100, -height => 120, -name => "Window", -text => "Fractal", ); $Win->Show(); Win32::GUI::Dialog(); sub Window_Terminate { return -1; } sub Window_Resize { my $W = $Win->ScaleWidth; my $H = $Win->ScaleHeight; my $DC = $Win->GetDC; my $left; my $top; my $right; my $bottom; my $P; my $B; my $thresh=0.001; my $maxcount=51; my $icount; my $i; my $j; my $x; my $y; my $znew; my $zold; my $z2; my $z3; my $f; my $fprime; my $quot; my $diff; my $absdiff; my $imax=$W; my $jmax=$H; my $xstart=-1.0; my $ystart=1.0; my $xincrement=2.0/$imax; my $yincrement=2.0/$jmax; print "\$xincrement=$xincrement\n"; print "\$yincrement=$yincrement\n"; for ($i=1;$i<$imax;$i++){ for ( $j=1;$j<$jmax;$j++){ $icount=0; $x=$xstart+$xincrement*$i; $y=$ystart-$yincrement*$j; $znew=cplx($x,$y); $absdiff=1.0; while ($absdiff>$thresh) { $zold=$znew; $z2=$zold*$zold; $z3=$zold*$z2; $f=$z3-1.0; $fprime=3.0*$z2; $quot=1.0; if($fprime !=0.0) { $quot=$f/$fprime; } $znew=$zold-$quot; $diff=$znew-$zold; $absdiff=abs($diff); $icount=$icount+1; if ($icount>$maxcount) {last} } #end while if($icount<=$maxcount){ if($icount<=3){ $DC->SetPixel($i,$j,[128,0,0]); } elsif(($icount>3)&&($icount<=6)){ $DC->SetPixel($i,$j,[0,128,0]); } elsif(($icount>6)&&($icount<=9)){ $DC->SetPixel($i,$j,[0,0,128]); } elsif(($icount>9)&&($icount<=12)){ $DC->SetPixel($i,$j,[255,0,0]); } elsif(($icount>12)&&($icount<=15)){ $DC->SetPixel($i,$j,[0,255,0]); } elsif(($icount>15)&&($icount<=18)){ $DC->SetPixel($i,$j,[0,0,255]); } elsif(($icount>18)&&($icount<=21)){ $DC->SetPixel($i,$j,[192,0,0]); } elsif(($icount>21)&&($icount<=24)){ $DC->SetPixel($i,$j,[0,192,0]); } elsif(($icount>24)&&($icount<=27)){ $DC->SetPixel($i,$j,[0,0,192]); } elsif(($icount>27)&&($icount<=30)){ $DC->SetPixel($i,$j,[0,64,64]); } elsif(($icount>30)&&($icount<=33)){ $DC->SetPixel($i,$j,[64,0,64]); } elsif(($icount>33)&&($icount<=36)){ $DC->SetPixel($i,$j,[64,64,0]); } elsif(($icount>36)&&($icount<=39)){ $DC->SetPixel($i,$j,[192,64,0]); } elsif(($icount>39)&&($icount<=42)){ $DC->SetPixel($i,$j,[0,192,64]); } elsif(($icount>42)&&($icount<=45)){ $DC->SetPixel($i,$j,[64,0,192]); } elsif(($icount>45)&&($icount<=48)){ $DC->SetPixel($i,$j,[0,64,192]); } elsif(($icount>48)&&($icount<=50)){ $DC->SetPixel($i,$j,[0,192,64]); } else{ $DC->SetPixel($i,$j,[0,0,0]); } } #end if(icount