#!/usr/bin/perl use warnings; use strict; use Tk; my $c_size = 100; my $scale = 1; my $mw = MainWindow -> new; my $canvas = $mw -> Scrolled('Canvas', -height=>$c_size, -width=>$c_size, -scrollregion => [0,0,$c_size,$c_size] )-> pack(-expand=>1 ,-fill=>'both'); $canvas -> Tk::bind('all', '' => \&MakeMan); &MakeMan(); MainLoop; sub MakeMan(){ my ($e, $canv_x, $canv_y)=(0,$c_size/2,$c_size/2); if($scale > 1){ $e = $canvas -> XEvent; $canv_x = $e->x; $canv_y = $e->y; } my $icount = 1; $c_size *= $scale; #problem here... my $i = -2/$scale + (($canv_y-($c_size/2)) / ($c_size/$scale));# + $lasti; my $rgb; while($icount <= $c_size){ #... and here... my $r = -2/$scale + (($canv_x-($c_size/2)) / ($c_size/$scale));# + $lastr; my $rcount = 1; while($rcount <= $c_size){ my $tr = $r; my $ti = $i; $rgb = '#000000'; for my $n(1..15){ ($tr, $ti) = (($tr ** 2) - ($ti ** 2) + ($r), (2 * $tr * $ti) + ($i)); if((($tr * $tr) + ($ti * $ti)) > 4){ $rgb = '#ffffff'; last; } } $canvas -> createLine($rcount, $icount, $rcount+1, $icount, -fill => $rgb, -width => 1); $rcount ++; $r += (4/$scale)/$c_size; } $icount ++; $i += (4/$scale)/$c_size; } $scale = $scale * 1.2; $canvas->configure(-scrollregion=>[0,0,$c_size,$c_size]); $canvas->update; }