Kevin Ryde > Math-PlanePath-112 > Math::PlanePath::TriangleSpiralSkewed

Math-PlanePath-112.tar.gz

Dependencies

Annotate this POD

Website

# CPAN RT

 Open 2
View/Report Bugs
Module Version: 112   Source   Latest Release: Math-PlanePath-114

# NAME

Math::PlanePath::TriangleSpiralSkewed -- integer points drawn around a skewed equilateral triangle

# SYNOPSIS

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

# DESCRIPTION

This path makes an spiral shaped as an equilateral triangle (each side the same length), but skewed to the left to fit on a square grid,

```    16                              4
|\
17 15                           3
|   \
18  4 14                        2
|  |\  \
19  5  3 13                     1
|  |   \  \
20  6  1--2 12 ...         <- Y=0
|  |         \  \
21  7--8--9-10-11 30           -1
|                  \
22-23-24-25-26-27-28-29        -2

^
-2 -1 X=0 1  2  3  4  5```

The properties are the same as the spread-out `TriangleSpiral`. The triangle numbers fall on straight lines as the do in the `TriangleSpiral` but the skew means the top corner goes up at an angle to the vertical and the left and right downwards are different angles plotted (but are symmetric by N count).

## Skew Right

Option `skew => 'right'` directs the skew towards the right, giving

```      4                  16      skew="right"
/ |
3               17 15
/    |
2            18  4 14
/  / |  |
1        ...  5  3 13
/    |  |
Y=0 ->       6  1--2 12
/          |
-1       7--8--9-10-11

^
-2 -1 X=0 1  2```

This is a shear "X -> X+Y" of the default skew="left" shown above. The coordinates are related by

```    Xright = Xleft + Yleft         Xleft = Xright - Yright
Yright = Yleft                 Yleft = Yright          ```

## Skew Up

```      2       16-15-14-13-12-11      skew="up"
|            /
1       17  4--3--2 10
|  |   /  /
Y=0 ->    18  5  1  9
|  |   /
-1      ...  6  8
|/
-2           7

^
-2 -1 X=0 1  2```

This is a shear "Y -> X+Y" of the default skew="left" shown above. The coordinates are related by

```    Xup = Xleft                 Xleft = Xup
Yup = Yleft + Xleft         Yleft = Yup - Xup```

## Skew Down

```      2          ..-18-17-16       skew="down"
|
1        7--6--5--4 15
\       |  |
Y=0 ->        8  1  3 14
\  \ |  |
-1              9  2 13
\    |
-2                10 12
\ |
11

^
-2 -1 X=0 1  2```

This is a rotate by -90 degrees of the skew="up" above. The coordinates are related

```    Xdown = Yup          Xup = - Ydown
Ydown = - Xup        Yup = Xdown```

Or related to the default skew="left" by

```    Xdown = Yleft + Xleft        Xleft = - Ydown
Ydown = - Xleft              Yleft = Xdown + Ydown```

## 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 etc. For example to start at 0,

```    15        n_start => 0
|\
16 14
|   \
17  3 13 ...
|  |\  \  \
18  4  2 12 31
|  |   \  \  \
19  5  0--1 11 30
|  |         \  \
20  6--7--8--9-10 29
|                  \
21-22-23-24-25-26-27-28```

With this adjustment for example the X axis N=0,1,11,30,etc is (9X-7)*X/2, the hendecagonal numbers (11-gonals). And South-East N=0,8,25,etc is the hendecagonals of the second kind, (9Y-7)*Y/2 with Y negative.

# FUNCTIONS

See "FUNCTIONS" in Math::PlanePath for behaviour common to all path classes.

`\$path = Math::PlanePath::TriangleSpiralSkewed->new ()`
`\$path = Math::PlanePath::TriangleSpiralSkewed->new (skew => \$str, n_start => \$n)`

Create and return a new skewed triangle spiral object. The `skew` parameter can be

```    "left"    (the default)
"right"
"up"
"down"```
`\$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 N in the path as centred in a square of side 1, so the entire plane is covered.

# FORMULAS

## Rectangle to N Range

Within each row there's a minimum N and the N values then increase monotonically away from that minimum point. Likewise in each column. This means in a rectangle the maximum N is at one of the four corners of the rectangle.

```              |
x1,y2 M---|----M x2,y2        maximum N at one of
|   |    |              the four corners
-------O---------          of the rectangle
|   |    |
|   |    |
x1,y1 M---|----M x1,y1
|```

# OEIS

Entries in Sloane's Online Encyclopedia of Integer Sequences related to this path include

```    n_start=1, skew="left" (the defaults)
A204439     abs(dX)
A204437     abs(dY)
A010054     turn 1=left,0=straight, extra initial 1

A117625     N on X axis
A064226     N on Y axis, but without initial value=1
A006137     N on X negative
A064225     N on Y negative
A081589     N on X=Y leading diagonal
A038764     N on X=Y negative South-West diagonal
A081267     N on X=-Y negative South-East diagonal
A060544     N on ESE slope dX=+2,dY=-1
A081272     N on SSE slope dX=+1,dY=-2

A217010     permutation N values of points in SquareSpiral order
A217291      inverse
A214230     sum of 8 surrounding N
A214231     sum of 4 surrounding N

n_start=0
A051682     N on X axis (11-gonal numbers)
A081268     N on X=1 vertical (next to Y axis)
A062708     N on Y axis
A062725     N on Y negative axis
A081275     N on X=Y+1 North-East diagonal
A062728     N on South-East diagonal (11-gonal second kind)
A081266     N on X=Y negative South-West diagonal
A081270     N on X=1-Y North-West diagonal, starting N=3
A081271     N on dX=-1,dY=2 NNW slope up from N=1 at X=1,Y=0

n_start=-1
A023531     turn sequence 1=left,0=straight, being 1 at N=k*(k+3)/2

n_start=1, skew="right"
A204435     abs(dX)
A204437     abs(dY)
A217011     permutation N values of points in SquareSpiral order
but with 90-degree rotation
A217292     inverse
A214251     sum of 8 surrounding N

n_start=1, skew="up"
A204439     abs(dX)
A204435     abs(dY)
A217012     permutation N values of points in SquareSpiral order
but with 90-degree rotation
A217293     inverse
A214252     sum of 8 surrounding N

n_start=1, skew="down"
A204435     abs(dX)
A204439     abs(dY)```

The square spiral order in A217011,A217012 and their inverses has first step at 90-degrees to the first step of the triangle spiral, hence the rotation by 90 degrees when relating to the `SquareSpiral` path. A217010 on the other hand has no such rotation since it reckons the square and triangle spirals starting in the same direction.

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