#!/usr/bin/perl

use Tk;                       # inicjalizacja modulu Tk

use constant WIELKOSC => 100;
use constant LEWO => -2;
use constant PRAWO => 1;
use constant GORA => 1;
use constant DOL => -1;
use constant ITERACJE => 20;

my $gora = new MainWindow;
$gora->title('Zbior Mandelbrota');
my $obszar = $gora->Frame();
$obszar->pack(-side => 'top', -fill => 'both');
my $plaszczyzna = $drawarea->Canvas(-relief => 'ridge', -width => WIELKOSC,
        -height => WIELKOSC, -borderwidth => 4);
$plaszczyzna ->pack(-side => 'left');

use Math::Complex;

# Obliczenie polozenia i koloru kazdego piksela.
for ($y = 0; $y < WIELKOSC; $y++) {
    for ($x = 0; $x < WIELKOSC; $x++) {

        $z = Math::Complex->make(0, 0);
        $c = Math::Complex->make(LEWO + $x * (PRAWO - LEWO) / WIELKOSC,
                                 GORA  + $y * (DOL - GORA) / WIELKOSC);
        $norm = (abs $z) ** 2;

        for ($licznik = 0;
             $norm <= 4.0 && $licznik < ITERACJE;
             $licznik++) {
            $z = Math::Complex->make($z->Re * $z->Re -
                                     $z->Im * $z->Im + $c->Re,
                                     $z->Im * $z->Re * 2 + $c->Im);
            $norm = (abs $z) ** 2;
        }
        if ($norm <= .05) {
            $plaszczyzna->create('text', $x, $y, -fill => 'black', -text => '.');
        } elsif ($norm <= .10) {
            $plaszczyzna ->create('text', $x, $y, -fill => 'green', -text => '.');
        } elsif ($norm <= .15) {
            $plaszczyzna ->create('text', $x, $y, -fill => 'blue', -text => '.');
        } elsif ($norm <= .20) {
            $plaszczyzna ->create('text', $x, $y, -fill => 'red', -text => '.');
        } elsif ($norm <= .25) {
            $plaszczyzna ->create('text', $x, $y, -fill => 'yellow', -text => '.');
        } elsif ($norm <= .3) {
            $plaszczyzna ->create('text', $x, $y, -fill => 'gray', -text => '.');
        }
    }
}

MainLoop;

