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