1$|=1; 2use PDL; 3use PDL::Graphics::TriD; 4use Time::HiRes qw(sleep); 5# use PDL::Dbg; 6 7# PDL::Core::set_debugging(1); 8 9$size = 100; 10 11$a = zeroes(float,$size,$size); 12$res = $a->copy; 13$resc0 = $res->clump(2); 14$resc = $resc0; 15$resi = xvals $resc; 16$inds0 = $resi; 17 18$re00 = 2*(xvals $a)->clump(2)/$size-1.5; 19$im00 = 2*(yvals $a)->clump(2)/$size-0.5; 20 21$re0 = $re00; 22$im0 = $im00; 23 24$im = $im0; $re = $re0; 25$im2 = $im; $re2 = $re; 26 27for(1..60) { 28 $rp = ($resc == 0) * ($im2 ** 2 + $re2 ** 2 > 2) * $_; 29 $resc += $rp; 30 if(1) { 31 $inds = ($resc == 0)->which->long->sever; 32 $inds1 = $inds0->index($inds)->sever; 33 $inds0 = $inds1; 34 $re0 = $re00->index($inds1)->sever; 35 $im0 = $im00->index($inds1)->sever; 36 $re = $re->index($inds)->sever; 37 $im = $im->index($inds)->sever; 38 $resi = $resi->index($inds)->sever; 39 # Use inds1 here so that resc propagates back only one step. 40 $resc = $resc0->index($inds1); 41 } 42 $re2 = $re ** 2 - $im ** 2; 43 $im2 = 2 * $re * $im; 44 $re2 += $re0; 45 $im2 += $im0; 46 $re = $re2; $im = $im2; 47 nokeeptwiddling3d(); 48 my $r = $res/max($res); 49 imagrgb [$r,1-$r,$r] if $_ % 2 == 0; 50 sleep 0.05; 51} 52 53