NAME
Math::PlanePath::KochSquareflakes -- four-sided Koch snowflakes
SYNOPSIS
use Math::PlanePath::KochSquareflakes;my $path = Math::PlanePath::KochSquareflakes->new (inward => 0);my ($x, $y) = $path->n_to_xy (123);
DESCRIPTION
This is the Koch curve shape arranged as four-sided concentric snowflakes.
61 10/ \63-62 60-59 9| |67 64 58 55 8/ \ / \ / \69-68 66-65 57-56 54-53 7| |70 52 6/ \71 51 5\ /72 50 4| |73 15 49 3/ / \ \75-74 17-16 14-13 48-47 2| | | |76 18 12 46 1/ / 4---3 \ \77 19 . | 11 45 Y=0\ \ 1---2 / /78 20 10 44 -1| | |79-80 5--6 8--9 42-43 -2\ \ / /81 7 41 -3| |82 40 -4/ \83 39 -5\ /84 38 -6|21-22 24-25 33-34 36-37 -7\ / \ / \ /23 26 32 35 -8| |27-28 30-31 -9\ /29 -10^-9 -8 -7 -6 -5 -4 -3 -2 -1 X=0 1 2 3 4 5 6 7 8 9 10
The innermost square N=1 to N=4 is the initial figure. Its sides expand as the Koch curve pattern in subsequent rings. The initial figure is on X=+/-0.5,Y=+/-0.5 fractions. The points after that are integer X,Y.
Inward
The "inward=>1" option can direct the sides inward. The shape and lengths etc are the same. The angles and sizes mean there's no overlaps.
69-68 66-65 57-56 54-53 7| \ / \ / \ / |70 67 64 58 55 52 6\ | | /71 63-62 60-59 51 5/ \ / \72 61 50 4| |73 49 3\ /74-75 17-16 14-13 47-48 2| | \ / | |76 18 15 12 46 1\ \ 4--3 / /77 19 |11 45 <- Y=0/ / 1--2 \ \78 20 7 10 44 -1| / \ | |80-79 5--6 8--9 43-42 -2/ \81 41 -3| |82 29 40 -4\ / \ /83 27-28 30-31 39 -5/ | | \84 23 26 32 35 38 -6/ \ / \ / \ |21-22 24-25 33-34 36-37 -7^-7 -6 -5 -4 -3 -2 -1 X=0 1 2 3 4 5 6 7
Level Ranges
Counting the innermost N=1 to N=4 square as level 0, a given level has
looplen = 4*4^level
many points. The start of a level is N=1 plus the preceding loop lengths so
Nstart = 1 + 4*[ 1 + 4 + 4^2 + ... + 4^(level-1) ]= 1 + 4*(4^level - 1)/3= (4^(level+1) - 1)/3
and the end of a level similarly the total loop lengths, or simply one less than the next Nstart,
Nend = 4 * [ 1 + ... + 4^level ]= (4^(level+2) - 4) / 3= Nstart(level+1) - 1
For example,
level Nstart Nend (A002450,A080674)0 1 41 5 202 21 843 85 340
The Xstart,Ystart position of the Nstart corner is a Lucas sequence,
Xstart(0) = -0.5Xstart(1) = -2Xstart(2) = 4*Xstart(1) - 2*Xstart(0) = -7Xstart(3) = 4*Xstart(2) - 2*Xstart(1) = -24...Xstart(level+1) = 4*Xstart(level) - 2*Xstart(level-1)0.5, 2, 7, 24, 82, 280, 956, 3264, ... (A003480)
This recurrence occurs because the replications are 4 wide when horizontal but 3 wide when diagonal.
FUNCTIONS
See "FUNCTIONS" in Math::PlanePath for behaviour common to all path classes.
- "$path = Math::PlanePath::KochSquareflakes->new ()"
- "$path = Math::PlanePath::KochSquareflakes->new (inward => $bool)"
-
Create and return a new path object.
Level Methods
- "($n_lo, $n_hi) = $path->level_to_n_range($level)"
-
Return per "Level Ranges" above,
( (4**$level - 1)/3,4*(4**$level - 1)/3 )
OEIS
Entries in Sloane's Online Encyclopedia of Integer Sequences related to this path include
<http://oeis.org/A003480> (etc)
A003480 -X and -Y coordinate first point of each ringlikewise A020727A007052 X,Y coordinate of axis crossing,and also maximum height of a sideA072261 N on Y negative axis (half way along first side)A206374 N on South-East diagonal (end of first side)Also:A332204 X coordinate across one sideA332205 Y coordinate across one side
SEE ALSO
Math::PlanePath, Math::PlanePath::KochSnowflakes
HOME PAGE
<http://user42.tuxfamily.org/math-planepath/index.html>
LICENSE
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Kevin Ryde
Math-PlanePath 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.
Math-PlanePath 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 Math-PlanePath. If not, see <http://www.gnu.org/licenses/>.