#!/usr/bin/perl -w
use
5.004;
{
my
$width
= 810;
my
$height
= 810;
my
$image
= Image::Base::GD->new (
-width
=>
$width
,
-height
=>
$height
);
$image
->rectangle (0,0,
$width
-1,
$height
-1,
'black'
);
my
$foreground
=
'white'
;
my
$recurse
;
$recurse
=
sub
{
my
(
$x
,
$y
,
$dx
,
$dy
,
$level
) =
@_
;
if
(--
$level
< 0) {
$image
->line(
$x
,
$y
,
$x
+
$dx
,
$y
+
$dy
,
$foreground
);
$x
+=
$dx
;
$y
+=
$dy
;
(
$dx
,
$dy
) = (-
$dy
,
$dx
);
$image
->line(
$x
,
$y
,
$x
+
$dx
,
$y
+
$dy
,
$foreground
);
}
else
{
$dx
/= 2;
$dy
/= 2;
$image
->line(
$x
,
$y
,
$x
+
$dx
,
$y
+
$dy
,
$foreground
);
$x
+=
$dx
;
$y
+=
$dy
;
(
$dx
,
$dy
) = (
$dy
,-
$dx
);
$recurse
->(
$x
,
$y
,
$dx
,
$dy
,
$level
);
$x
+=
$dx
;
$y
+=
$dy
;
(
$dx
,
$dy
) = (-
$dy
,
$dx
);
$x
+=
$dx
;
$y
+=
$dy
;
$recurse
->(
$x
,
$y
,
$dx
,
$dy
,
$level
);
$x
+=
$dx
;
$y
+=
$dy
;
(
$dx
,
$dy
) = (-
$dy
,
$dx
);
$x
+=
$dx
;
$y
+=
$dy
;
$recurse
->(
$x
,
$y
,
$dx
,
$dy
,
$level
);
$x
+=
$dx
;
$y
+=
$dy
;
(
$dx
,
$dy
) = (-
$dy
,
$dx
);
$x
+=
$dx
;
$y
+=
$dy
;
(
$dx
,
$dy
) = (
$dy
,-
$dx
);
$image
->line(
$x
,
$y
,
$x
+
$dx
,
$y
+
$dy
,
$foreground
);
}
};
my
$scale
= 2;
my
(
$pow
,
$exp
) = round_down_pow(
$height
/
$scale
, 2);
foreach
my
$level
(0 ..
$exp
) {
my
$len
= 2*
*$level
*
$scale
;
$recurse
->(0,
$height
-1 -
$len
,
$len
,0,
$level
);
}
$image
->save(
'/tmp/x.png'
);
system
(
'xzgv /tmp/x.png'
);
exit
0;
}