Provided by: libmath-planepath-perl_129-1_all bug

NAME

       Math::PlanePath::AnvilSpiral -- integer points around an "anvil" shape

SYNOPSIS

        use Math::PlanePath::AnvilSpiral;
        my $path = Math::PlanePath::AnvilSpiral->new;
        my ($x, $y) = $path->n_to_xy (123);

DESCRIPTION

       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.

   Wider
       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.

   N Start
       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.

FUNCTIONS

       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.

OEIS

       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

SEE ALSO

       Math::PlanePath, Math::PlanePath::SquareSpiral, Math::PlanePath::OctagramSpiral,
       Math::PlanePath::HexSpiral

HOME PAGE

       <http://user42.tuxfamily.org/math-planepath/index.html>

LICENSE

       Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 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/>.