++ed by:
Kevin Ryde
and 1 contributors

# NAME

Math::PlanePath::GreekKeySpiral -- square spiral with Greek key motif

# SYNOPSIS

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

# DESCRIPTION

This path makes a spiral with a Greek key scroll motif,

``````    39--38--37--36  29--28--27  24--23                      5
|           |   |       |   |   |
40  43--44  35  30--31  26--25  22                      4
|   |   |   |       |           |
41--42  45  34--33--32  19--20--21  ...                 3
|               |           |
48--47--46   5---6---7  18  15--14  99  96--95          2
|           |       |   |   |   |   |   |   |
49  52--53   4---3   8  17--16  13  98--97  94          1
|   |   |       |   |           |           |
50--51  54   1---2   9--10--11--12  91--92--93     <- Y=0
|                           |
57--56--55  68--69--70  77--78--79  90  87--86         -1
|           |       |   |       |   |   |   |
58  61--62  67--66  71  76--75  80  89--88  85         -2
|   |   |       |   |       |   |           |
59--60  63--64--65  72--73--74  81--82--83--84         -3

^

-3  -2  -1  X=0  1   2   3   4   5   6   7   8 ...``````

The repeating figure is a 3x3 pattern

``````       |
*   *---*
|   |   |      right vertical
*---*   *      going upwards
|
*---*---*
|``````

The turn excursion is to the outside of the 3-wide channel and forward in the direction of the spiral. The overall spiralling is the same as the `SquareSpiral`, but composed of 3x3 sub-parts.

## Sub-Part Joining

The verticals have the "entry" to each figure on the inside edge, as for example N=90 to N=91 above. The horizontals instead have it on the outside edge, such as N=63 to N=64 along the bottom. The innermost N=1 to N=9 is a bottom horizontal going right.

``````      *---*---*
|       |        bottom horizontal
*---*   *        going rightwards
|   |
--*---*   *-->``````

On the horizontals the excursion part is still "forward on the outside", as for example N=73 through N=76, but the shape is offset. The way the entry is alternately on the inside and outside for the vertical and horizontal is necessary to make the corners join.

## Turn

An optional `turns => \$integer` parameter controls the turns within the repeating figure. The default is `turns=>2`. Or for example `turns=>4` begins

``````    turns => 4

105-104-103-102-101-100  79--78--77--76--75  62--61--60--59
|                   |   |               |   |           |
106 119-120-121-122  99  80  87--88--89  74  63  66--67  58
|   |           |   |   |   |       |   |   |   |   |   |
107 118 115-114 123  98  81  86--85  90  73  64--65  68  57
|   |   |   |   |   |   |       |   |   |           |   |
108 117-116 113 124  97  82--83--84  91  72--71--70--69  56
|           |   |   |               |                   |
109-110-111-112 125  96--95--94--93--92  51--52--53--54--55
|                       |
130-129-128-127-126  17--18--19--20--21  50  37--36--35--34
|                   |               |   |   |           |
131 144-145-146-147  16   9-- 8-- 7  22  49  38  41--42  33
|   |           |   |   |       |   |   |   |   |   |   |
132 143 140-139 148  15  10--11   6  23  48  39--40  43  32
|   |   |   |   |   |       |   |   |   |           |   |
133 142-141 138 149  14--13--12   5  24  47--46--45--44  31
|           |   |               |   |                   |
134-135-136-137 150   1-- 2-- 3-- 4  25--26--27--28--29--30
|
..-152-151``````

The count of turns is chosen to make `turns=>0` a straight line, the same as the `SquareSpiral`. `turns=>1` is a single wiggle,

``````    turns => 1

66--65--64  61--60  57--56  53--52--51
|       |   |   |   |   |   |       |
67--68  63--62  59--58  55--54  49--50
|                           |
70--69  18--17--16  13--12--11  48--47
|       |       |   |       |       |
71--72  19--20  15--14   9--10  45--46
|       |           |       |
...  22--21   2-- 3   8-- 7  44--43
|       |   |       |       |
23--24   1   4-- 5-- 6  41--42
|                   |
26--25  30--31  34--35  40--39
|       |   |   |   |       |
27--28--29  32--33  36--37--38``````

In general the repeating figure is a square of turns+1 points on each side, spiralling in and then out again.

# FUNCTIONS

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

`\$path = Math::PlanePath::GreekKeySpiral->new ()`
`\$path = Math::PlanePath::GreekKeySpiral->new (turns => \$integer)`

Create and return a new Greek key spiral object. The default `turns` is 2.

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

Jo Edkins Greek Key pages `http://gwydir.demon.co.uk/jo/greekkey/index.htm`

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