#!/usr/local/bin/perl -w
# Perl
# (C) 2001 by M. Thole

use strict;

# This function calculates the mandelbrot iteration for a given
# complex point of the z plane (re, im)
sub iterate {
  my ($re, $im, $itmax, $rad) = @_;
  my $i = 0;
  my $x = 0.0;
  my $y = 0.0;

  while (($i < $itmax) && ($x*$x + $y*$y < $rad)) {
    my $xnew = $x*$x - $y*$y + $re;
    my $ynew = 2.0 * $x*$y + $im;
    $x = $xnew;
    $y = $ynew;
    $i++;
  }
  return $i;
}

#
# Main starts here
#

my $itmax = 10;			# max iterations
my $rad = 4.0;			# test radius
my $resolution = 500;		# number of points per line
my $xmin = -2.25;		# min x value
my $xmax = 0.75;		# max x value
my $ymin = -1.5;		# min y value
my $ymax = 1.5;			# max y value
my $x;
my $y;

for ($y = $ymin; $y <= $ymax; $y = $y + ($ymax-$ymin)/$resolution) {
  for ($x = $xmin; $x <= $xmax; $x = $x + ($xmax-$xmin)/$resolution) {
    my $result = iterate($x, $y, $itmax, $rad);
    print ($result % 2 ? " " : "\#");
  }
  print "\n";
}

# exit cleanly
exit 0;
