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

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

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

## SEE ALSO

Math::PlanePath, Math::PlanePath::SquareSpiral

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

## HOME PAGE

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

## LICENSE

Copyright 2010, 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/\>.
