++ed by:
Kevin Ryde
and 1 contributors

# NAME

Math::PlanePath::PentSpiralSkewed -- integer points in a pentagonal shape

# SYNOPSIS

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

# DESCRIPTION

This path makes a pentagonal (five-sided) spiral with points skewed so as to fit a square grid and fully cover the plane.

``````          10 ...             2
/  \  \
11  3  9 20           1
/  /  \  \  \
12  4  1--2  8 19    <- y=0
\  \       |  |
13  5--6--7 18       -1
\          |
14-15-16-17       -2

^  ^  ^  ^  ^  ^
-2 -1 x=0 1  2  3 ...``````

The pattern is similar to the SquareSpiral but cuts three corners which makes each cycle is faster. Each cycle is just 5 steps longer than the previous (where it's 8 for a SquareSpiral).

# FUNCTIONS

`\$path = Math::PlanePath::PentSpiral->new ()`

Create and return a new PentSpiral spiral object.

`(\$x,\$y) = \$path->n_to_xy (\$n)`

Return the x,y coordinates of point number `\$n` on the path.

For `\$n < 1` the return is an empty list, it being considered the path starts at 1.

`\$n = \$path->xy_to_n (\$x,\$y)`

Return the point number for coordinates `\$x,\$y`. `\$x` and `\$y` are each rounded to the nearest integer, which has the effect of treating each point in the path as a square of side 1.