Math::PlanePath::QuintetCurve -- self-similar "plus" shaped curve
use Math::PlanePath::QuintetCurve; my $path = Math::PlanePath::QuintetCurve->new; my ($x, $y) = $path->n_to_xy (123);
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
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.
arms => $a
arms=>4
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.
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.
$n
$n < 0
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.
Math::PlanePath, Math::PlanePath::QuintetCentres, Math::PlanePath::QuintetReplicate, Math::PlanePath::Flowsnake
http://user42.tuxfamily.org/math-planepath/index.html
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/>.
To install Math::PlanePath, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Math::PlanePath
CPAN shell
perl -MCPAN -e shell install Math::PlanePath
For more information on module installation, please visit the detailed CPAN module installation guide.