NAME
Math::PlanePath::FibonacciWordFractal  turns by Fibonacci word bits
SYNOPSIS
use Math::PlanePath::FibonacciWordFractal;
my $path = Math::PlanePath::FibonacciWordFractal>new;
my ($x, $y) = $path>n_to_xy (123);
DESCRIPTION
This is an integer version of the Fibonacci word fractal by Alexis MonnerotDumaine. It makes turns controlled by by the "Fibonacci word" sequence, sometimes called the "golden string" too.
11  272829 333435 535455 596061
        
10  26 303132 36 52 565758 62
    
9  2524 3837 5150 6463
    
8  23 39 434445 49 65
      
7  2122 404142 464748 6667
  
6  20 161514 747372 68
      
5  191817 13 75 717069
  
4  1112 7677
  
3  10 78
  
2  98 8079
  
1  123 7 81 858687
      
Y=0  0 456 828384 8889...
+
X=0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
A current direction up,down,left,right is maintained, initially up. The path moves in that direction and then a possible turn according to the Fibonacci word,
Fib word

0 turn left if even index, right if odd index
1 straight ahead
In this form the Fibonacci word is reckoned as starting from index=1, so for example at N=0 draw a line upwards to N=1 and the first Fibonacci word value is 0 and index=1 odd so change direction to the right.
N Fibonacci word
 
0 0 turn right
1 1
2 0 turn right
3 0 turn left
4 1
5 0 turn left
6 1
The result is selfsimilar blocks within the first quadrant (X>=0,Y>=0). New blocks extend from N values which are Fibonacci numbers. For example at N=21 begins a new block above, then N=34 a new block across, N=55 down, N=89 across again, etc.
The new blocks are a copy of the shape starting N=0 rotated and/or transposed according to the replication level mod 6,
level mod 6 new block
 
0 transpose
1 rotate 90
2 transpose, rotate 90
3 transpose
4 rotate +90
5 transpose, rotate +90
FUNCTIONS
See "FUNCTIONS" in Math::PlanePath for behaviour common to all path classes.
$path = Math::PlanePath::FibonacciWordFractal>new ()

Create and return a new path object.
($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.Fractional positions give an X,Y position along a straight line between the integer positions.
$n = $path>xy_to_n ($x,$y)

Return the point number for coordinates
$x,$y
. If there's nothing at$x,$y
then returnundef
.The curve visits an
$x,$y
twice for various points (all the "inside" points). In the current code the smaller of the two N values is returned. Is that the best way? $n = $path>n_start()

Return 0, the first N in the path.
OEIS
The Fibonacci word sequence itself is in Sloane's OEIS as sequence A003849, and A156596 is the odd/even 0s turned into turns 1 or 2 to give the turn sequence directly
http://oeis.org/A156596
A156596  turn sequence, 0=straight, 1=right, 2=left
A003849  Fibonacci word sequence 0,1
SEE ALSO
Math::PlanePath, Math::PlanePath::DragonCurve
Alexis MonnerotDumaine "The Fibonacci Word Fractal", February 2009
http://hal.archivesouvertes.fr/hal00367972_v1/
http://hal.archivesouvertes.fr/docs/00/36/79/72/PDF/The_Fibonacci_word_fractal.pdf
HOME PAGE
http://user42.tuxfamily.org/mathplanepath/index.html
LICENSE
Copyright 2011, 2012 Kevin Ryde
This file is part of MathPlanePath.
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/>.