Math::PlanePath::AnvilSpiral -- integer points around an "anvil" shape
use Math::PlanePath::AnvilSpiral; my $path = Math::PlanePath::AnvilSpiral->new; my ($x, $y) = $path->n_to_xy (123);
This path makes a spiral around an anvil style shape,
...-78-77-76-75-74 4 / 49-48-47-46-45-44-43-42-41-40-39-38 73 3 \ / / 50 21-20-19-18-17-16-15-14 37 72 2 \ \ / / / 51 22 5--4--3--2 13 36 71 1 \ \ \ / / / / 52 23 6 1 12 35 70 <- Y=0 / / / \ \ \ 53 24 7--8--9-10-11 34 69 -1 / / \ \ 54 25-26-27-28-29-30-31-32-33 68 -2 / \ 55-56-57-58-59-60-61-62-63-64-65-66-67 -3 ^ -6 -5 -4 -3 -2 -1 X=0 1 2 3 4 5 6 7
The pentagonal numbers 1,5,12,22,etc, P(k) = (3k-1)*k/2 fall alternately on the X axis X>0, and on the Y=1 horizontal X<0.
Those pentagonals are always composites, from the factorization shown, and as noted in "Step 3 Pentagonals" in Math::PlanePath::PyramidRows, the immediately preceding P(k)-1 and P(k)-2 are also composites. So plotting the primes on the spiral has a 3-high horizontal blank line at Y=0,-1,-2 for positive X, and Y=1,2,3 for negative X (after the first few values).
Each loop around the spiral is 12 longer than the preceding. This is 4* more than the step=3 PyramidRows
so straight lines on a PyramidRows
like these pentagonals are also straight lines here, but split into two parts.
The outward diagonal excursions are similar to the OctagramSpiral
, but there's just 4 of them here where the OctagramSpiral
has 8. This is reflected in the loop step. The basic SquareSpiral
is step 8, but by taking 4 excursions here increases that to 12, and in the OctagramSpiral
8 excursions adds 8 to make step 16.
An optional wider
parameter makes the path wider by starting with a horizontal section of given width. For example
$path = Math::PlanePath::SquareSpiral->new (wider => 3);
gives
33-32-31-30-29-28-27-26-25-24-23 ... 2 \ / / 34 11-10--9--8--7--6--5 22 51 1 \ \ / / / 35 12 1--2--3--4 21 50 <- Y=0 / / \ \ 36 13-14-15-16-17-18-19-20 49 -1 / \ 37-38-39-40-41-42-43-44-45-46-47-48 -2 ^ -6 -5 -4 -3 -2 -1 X=0 1 2 3 4 5
The starting point 1 is shifted to the left by ceil(wider/2) places to keep the spiral centred on the origin X=0,Y=0. This is the same starting offset as the SquareSpiral
wider
.
Widening doesn't change the nature of the straight lines which arise, it just rotates them around. Each loop is still 12 longer than the previous, since the widening is essentially a constant amount in each loop.
The default is to number points starting N=1 as shown above. An optional n_start
can give a different start with the same shape. For example to start at 0,
n_start => 0 20-19-18-17-16-15-14-13 ... \ / / 21 4--3--2--1 12 35 \ \ / / / 22 5 0 11 34 / / \ \ 23 6--7--8--9-10 33 / \ 24-25-26-27-28-29-30-31-32
The only effect is to push the N values around by a constant amount. It might help match coordinates with something else zero-based.
See "FUNCTIONS" in Math::PlanePath for behaviour common to all path classes.
$path = Math::PlanePath::AnvilSpiral->new ()
$path = Math::PlanePath::AnvilSpiral->new (wider => $integer, n_start => $n)
Create and return a new anvil spiral object. An optional wider
parameter widens the spiral path, it defaults to 0 which is no widening.
Entries in Sloane's Online Encyclopedia of Integer Sequences related to this path include
http://oeis.org/A033581 (etc)
default wider=0, n_start=1 A033570 N on X axis, alternate pentagonals (2n+1)*(3n+1) A126587 N on Y axis A136392 N on Y negative (n=-Y+1) A033568 N on X=Y diagonal, alternate second pents (2*n-1)*(3*n-1) A085473 N on south-east diagonal wider=0, n_start=0 A211014 N on X axis, 14-gonal numbers of the second kind A139267 N on Y axis, 2*octagonal A049452 N on X negative, alternate pentagonals A033580 N on Y negative, 4*pentagonals A051866 N on X=Y diagonal, 14-gonal numbers A094159 N on north-west diagonal, 3*hexagonals A049453 N on south-west diagonal, alternate second pentagonal A195319 N on south-east diagonal, 3*second hexagonals wider=1, n_start=0 A051866 N on X axis, 14-gonal numbers A049453 N on Y negative, alternate second pentagonal A033569 N on north-west diagonal A085473 N on south-west diagonal A080859 N on Y negative A033570 N on south-east diagonal alternate pentagonals (2n+1)*(3n+1) wider=2, n_start=1 A033581 N on Y axis (6*n^2) except for initial N=2
Math::PlanePath, Math::PlanePath::SquareSpiral, Math::PlanePath::OctagramSpiral, Math::PlanePath::HexSpiral
http://user42.tuxfamily.org/math-planepath/index.html
Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 Kevin Ryde
This file is part of Math-PlanePath.
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/>.