NAME

Math::PlanePath::QuintetCurve -- self-similar "plus" shaped curve

SYNOPSIS

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

DESCRIPTION

This path is a self-similar curve tracing out a spiralling self-similar "+" shape,

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

  ^
 X=0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 ...

The base figure is the initial N=0 to N=4.

        5
        |
        |
0---1   4      base figure
    |   |
    |   |
    2---3

It corresponds to a traversal of a "+" shape,

     .....5
     .    |
     .   <|
     .    |
0----1....4.....
. v  |    |    .
.    |>   |>   .
.    |    |    .
.....2----3.....
     . v  .
     .    .
     .    .
     ......

The "v" and ">" notches are the side the figure is directed at the higher replications. The 0, 2 and 3 parts are the right hand side of the line and are a plain repetition of the base figure. The 1 and 4 parts are to the left and are a reversal. The first such reversal is seen above as N=5 to N=10.

5---6---7
        |
        |       reversed figure
    9---8
    |
    |
   10

Arms

The optional arms => $a parameter can give 1 to 4 copies of the curve, each advancing successively. For example arms=>4 is as follows. Notice the N=4*k points are the plain curve, and N=4*k+1, N=3*k+2 and N=3*k+3 are rotated copies of it.

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

Essentially the curve is an ever expanding "+" shape with one corner at the origin so four of them back be packed as follows,

            +---+
            |   |
    +---+---    +---+
    |   |     A     |
+---+   +---+   +---+
|     B     |   |   |
+---+   +---O---+   +---+
    |   |   |     D     |
    +---+   +---+   +---+
    |     C     |   |
    +---+   +---+---+ 
        |   |
        +---+

At higher replication levels the sides become wiggly and spiralling, but they're symmetric and mesh to fill the plane.

FUNCTIONS

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

$path = Math::PlanePath::QuintetCurve->new ()
$path = Math::PlanePath::QuintetCurve->new (arms => $a)

Create and return a new path object.

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

Return the X,Y coordinates of point number $n on the path. Points begin at 0 and if $n < 0 then the return is an empty list.

Fractional positions give an X,Y position along a straight line between the integer positions.

$n = $path->n_start()

Return 0, the first N in the path.

SEE ALSO

Math::PlanePath, Math::PlanePath::QuintetCentres, Math::PlanePath::QuintetReplicate, Math::PlanePath::Flowsnake

HOME PAGE

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

LICENSE

Copyright 2011 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/>.