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