in reply to Fractal Curves: Short & Fast Codes?
Now each calculation done once:sub minkowski { my ($d, $level) = @_ ; if ($level==0) {fd($d); return 1;} minkowski($d/4,$level-1); rt(-90); minkowski($d/4,$level-1); rt( 90); minkowski($d/4,$level-1); rt( 90); minkowski($d/4,$level-1); minkowski($d/4,$level-1); rt(-90); minkowski($d/4,$level-1); rt(-90); minkowski($d/4,$level-1); rt( 90); minkowski($d/4,$level-1); }
That didn't buy much here because the function name is so long. Then, notice how you often have rt($foo); minkowski(@bar); ? You could shorten that by making the angle an optional parameter to the second function.sub minkowski { my ($d, $level) = @_ ; fd($d), return unless $level--; $d /= 4; minkowski($d,$level); rt(-90); minkowski($d,$level); rt( 90); minkowski($d,$level); rt( 90); minkowski($d,$level); minkowski($d,$level); rt(-90); minkowski($d,$level); rt(-90); minkowski($d,$level); rt( 90); minkowski($d,$level); }
Hmm. We're calling the same function eight times in a row, with only one different parameter. Looks like an unrolled loop, no?sub minkowski { my ($d, $level, $rt) = @_ ; rt($rt) if $rt; fd($d), return unless $level--; $d /= 4; minkowski($d,$level); minkowski($d,$level, -90); minkowski($d,$level, 90); minkowski($d,$level, 90); minkowski($d,$level); minkowski($d,$level, -90); minkowski($d,$level, -90); minkowski($d,$level, 90); }
sub minkowski { my ($d, $level, $rt) = @_; rt($rt) if $rt; fd($d), return unless $level--; $d /= 4; minkowski($d, $level, $_) for 0, -90, 90, 90, 0, -90, -90, 90; }
Makeshifts last the longest.
|
|---|