NAME
Math::PlanePath::DragonRounded  dragon curve with rounded corners
SYNOPSIS
use Math::PlanePath::DragonRounded;
my $path = Math::PlanePath::DragonRounded>new;
my ($x, $y) = $path>n_to_xy (123);
DESCRIPTION
This is a version of the dragon curve by Heighway, Harter, et al, done with two points per edge and skipping vertices so as to make roundedoff corners,
1716 98 6
/ \ / \
18 15 10 7 5
   
19 14 11 6 4
\ \ / \
2021 1312 54 3
\ \
22 3 2
 
23 2 1
/ /
3332 2524 . 01 Y=0
/ \ /
34 31 26 1
  
35 30 27 2
\ \ /
3637 2928 4445 3
\ / \
38 43 46 4
  
39 42 47 5
\ / /
4041 4948 6
/
50 7

...
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
151413121110 9 8 7 6 5 4 3 2 1 X=0 1 2 3 ...
The two points on an edge have one of X or Y a multiple of 3, and the other Y or X at 1 mod 3 or 2 mod 3. For example the N=19 and N=20 are on the X=9 edge (a multiple of 3), and at Y=4 and Y=5 (1 and 2 mod 3).
The "rounding" of the corners ensures that for example N=13 and N=21 don't touch as they approach X=6,Y=3. The curve never crosses itself.
Arms
The dragon curve fills a quarter of the plane and four copies mesh together rotated by 90, 180 and 270 degrees. The arms
parameter can choose 1 to 4 curve arms, successively advancing. For example arms => 4
gives
3632 59... 6
/ \ /
... 40 28 55 5
   
56 44 24 51 4
\ / \ \
5248 139 2016 4743 3
/ \ \ \
17 5 12 39 2
   
21 1 8 35 1
/ / /
2925 62 04 2731 < Y=0
/ / /
33 10 3 23 1
   
37 14 7 19 2
\ \ \ /
4145 1822 1115 5054 3
\ \ / \
49 26 46 58 4
   
53 30 42 ... 5
/ \ /
...57 3438 6
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
6 5 4 3 2 1 X=0 1 2 3 4 5 6
With 4 arms all 3x3 blocks are visited, using 4 out of 9 points in each.
FUNCTIONS
See "FUNCTIONS" in Math::PlanePath for the behaviour common to all path classes.
$path = Math::PlanePath::DragonRounded>new ()
$path = Math::PlanePath::DragonRounded>new (arms => $aa)

Create and return a new path object.
The optional
arms
parameter makes a multiarm curve. The default is 1 for just one arm. ($x,$y) = $path>n_to_xy ($n)

Return the X,Y coordinates of point number
$n
on the path. Points begin at 0 and if$n < 0
then the return is an empty list. $n = $path>n_start()

Return 0, the first N in the path.
SEE ALSO
Math::PlanePath, Math::PlanePath::DragonCurve, Math::PlanePath::DragonMidpoint
HOME PAGE
http://user42.tuxfamily.org/mathplanepath/index.html
LICENSE
Copyright 2011 Kevin Ryde
MathPlanePath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version.
MathPlanePath is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with MathPlanePath. If not, see <http://www.gnu.org/licenses/>.