NAME
Math::PlanePath::GosperSide  one side of the Gosper island
SYNOPSIS
use Math::PlanePath::GosperSide;
my $path = Math::PlanePath::GosperSide>new;
my ($x, $y) = $path>n_to_xy (123);
DESCRIPTION
This path is a single side of the Gosper island, in integers ("Triangular Lattice" in Math::PlanePath).
20... 14
/
1819 13
/
17 12
\
16 11
/
15 10
\
1413 9
\
12 8
/
11 7
\
10 6
/
8 9 5
/
6 7 4
/
5 3
\
4 2
/
2 3 1
/
0 1 < Y=0
^
X=0 1 2 3 4 5 6 7 8 9 10 11 12 13 ...
The path slowly spirals around counter clockwise, with a lot of wiggling in between. The N=3^level point is at
N = 3^level
angle = level * atan(sqrt(3)/5)
= level * 19.106 degrees
radius = sqrt(7) ^ level
A full revolution for example takes roughly level=19 which is about N=1,162,000,000.
Both ends of such levels are in fact subspirals, like an "S" shape.
The path is both the sides and the radial spokes of the GosperIslands
path, as described in "Side and Radial Lines" in Math::PlanePath::GosperIslands. Each N=3^level point is the start of a GosperIslands
ring.
The path is the same as the TerdragonCurve
except the turns here are by 60 degrees each, whereas TerdragonCurve
is by 120 degrees. See Math::PlanePath::TerdragonCurve for the turn sequence and total direction formulas etc.
FUNCTIONS
See "FUNCTIONS" in Math::PlanePath for behaviour common to all path classes.
$path = Math::PlanePath::GosperSide>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
$n
gives a point on the straight line between integer N.
Level Methods
FORMULAS
Level Endpoint
The endpoint of each level N=3^k is at
X + Y*i*sqrt(3) = b^k
where b = 2 + w = 5/2 + sqrt(3)/2*i
where w=1/2 + sqrt(3)/2*i sixth root of unity
X(k) = ( 5*X(k1)  3*Y(k1) )/2 for k>=1
Y(k) = ( X(k1) + 5*Y(k1) )/2
starting X(0)=2 Y(0)=0
X(k) = 5*X(k1)  7*X(k2) for k>=2
starting X(0)=2 X(1)=5
= 2, 5, 11, 20, 23, 25, 286, 1255, 4273, 12580, 32989,..
Y(k) = 5*Y(k1)  Y*X(k2) for k>=2
starting Y(0)=0 Y(1)=1
= 0, 1, 5, 18, 55, 149, 360, 757, 1265, 1026, 3725, ...
(A099450)
The curve base figure is XY(k)=XY(k1)+rot60(XY(k1))+XY(k1) giving XY(k) = (2+w)^k = b^k where w is the sixth root of unity giving the rotation by +60 degrees.
The mutual recurrences are similar with the rotation done by (X3Y)/2, (Y+X)/2 per "Triangular Lattice" in Math::PlanePath. The separate recurrences are found by using the first to get Y(k1) = 2/3*X(k) + 5/3*X(k1) and substitute into the other to get X(k+1). Similar the other way around for Y(k+1).
OEIS
Entries in Sloane's Online Encyclopedia of Integer Sequences related to this path include
http://oeis.org/A099450 (etc)
A229215 direction 1,2,3,1,2,3 (clockwise)
A099450 Y at N=3^k (for k>=1)
Also the turn sequence is the same as the terdragon curve, see "OEIS" in Math::PlanePath::TerdragonCurve for the several turn forms, N positions of turns, etc.
SEE ALSO
Math::PlanePath, Math::PlanePath::GosperIslands, Math::PlanePath::TerdragonCurve, Math::PlanePath::KochCurve
HOME PAGE
http://user42.tuxfamily.org/mathplanepath/index.html
LICENSE
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 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/>.