Provided by: libmath-planepath-perl_125-1_all
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 4 1 5 20 2 21 84 3 85 340 The Xstart,Ystart position of the Nstart corner is a Lucas sequence, Xstart(0) = -0.5 Xstart(1) = -2 Xstart(2) = 4*Xstart(1) - 2*Xstart(0) = -7 Xstart(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 ring likewise A020727 A007052 X,Y coordinate of axis crossing, and also maximum height of a side A072261 N on Y negative axis (half way along first side) A206374 N on South-East diagonal (end of first 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 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/>.