---
name: "Math::PlanePath::AnvilSpiral"
section: "3pm"
platform: "linux"
package: "libmath-planepath-perl"
version: "129-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Math::PlanePath::AnvilSpiral"
---

# Math::PlanePath::AnvilSpiral(3pm)

## 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/\>.
