#!/usr/bin/perl -w use strict; use Tk; my $mw = MainWindow->new(-title=>"Apfelmaennchen"); my $width = $mw->screenwidth; my $height = $mw->screenheight-200; $mw->geometry($width.'x'.($height+200)); my $bt1 = $mw->Button(-text=>"Beenden", -command=>sub{exit})->pack(-side=>'bottom'); my $bt2 = $mw->Button(-text=>"Malen", -command=>\&malen)->pack(-side=>'bottom'); my $p = $mw->Photo(-width=>800, -height=>800); my $c = $mw->Canvas(-width=>800, -height=>800, -bg=>'white')->pack(-side=>'top'); my $img = $c->createImage(0,0,-image=>$p,-anchor=>'nw'); $c->CanvasBind(''=>[\&koords,Ev('x'),Ev('y')]); MainLoop; ############################################## # koords # ############################################## sub koords{ shift; print "@_\n"; } ############################################## # malen # ############################################## sub malen{ my $n = 500; my @punkt; for my $i(1..800){ my $x = $i/200-2; for my $j(1..800){ my $y = $j/200-2; ${$punkt[$i]}[$j] = &iterieren($x,$y,$n); if (${$punkt[$i]}[$j] == 0){$p->put('black', -to => $i,$j);} elsif (${$punkt[$i]}[$j] == 1){$p->put('red', -to => $i,$j);} elsif (${$punkt[$i]}[$j] == 2){$p->put('green', -to => $i,$j);} elsif (${$punkt[$i]}[$j] == 3){$p->put('yellow', -to => $i,$j);} elsif (${$punkt[$i]}[$j] == 4){$p->put('cyan', -to => $i,$j);} elsif (${$punkt[$i]}[$j] == 5){$p->put('red', -to => $i,$j);} elsif (${$punkt[$i]}[$j] == 6){$p->put('magenta', -to => $i,$j);} elsif (${$punkt[$i]}[$j] == 7){$p->put('yellow', -to => $i,$j);} elsif (${$punkt[$i]}[$j] == 8){$p->put('red', -to => $i,$j);} elsif (${$punkt[$i]}[$j] >= 9){$p->put('blue', -to => $i,$j);} } } } ############################################## # iterieren # ############################################## sub iterieren{ my $x1 = $_[0]; my $xN = 0; my $y1 = $_[1]; my $yN = 0; my $count = 0; for my $i(1..$_[2]){ my $xNplus = $xN**2 - $yN**2 + $x1; my $yNplus = 2 * $xN * $yN + $y1; my $a = sqrt($xNplus**2 + $yNplus**2); $xN = $xNplus; $yN = $yNplus; if ($a > 2){$count = $i;last;} } return $count; }