1Math::PlanePath::TriangUlseeSrpiCroanlt(r3i)buted Perl DMoactuhm:e:nPtlaatnieoPnath::TriangleSpiral(3)
2
3
4

NAME

6       Math::PlanePath::TriangleSpiral -- integer points drawn around an
7       equilateral triangle
8

SYNOPSIS

10        use Math::PlanePath::TriangleSpiral;
11        my $path = Math::PlanePath::TriangleSpiral->new;
12        my ($x, $y) = $path->n_to_xy (123);
13

DESCRIPTION

15       This path makes a spiral shaped as an equilateral triangle (each side
16       the same length).
17
18                             16                                 4
19                            /  \
20                          17    15                              3
21                         /        \
22                       18     4    14    ...                    2
23                      /     /  \     \     \
24                    19     5     3    13    32                  1
25                   /     /        \     \     \
26                 20     6     1-----2    12    31          <- Y=0
27                /     /                    \     \
28              21     7-----8-----9----10----11    30           -1
29             /                                      \
30           22----23----24----25----26----27----28----29        -2
31
32                              ^
33           -6 -5 -4 -3 -2 -1 X=0 1  2  3  4  5  6  7  8
34
35       Cells are spread horizontally to fit on a square grid as per
36       "Triangular Lattice" in Math::PlanePath.  The horizontal gaps are 2, so
37       for instance n=1 is at x=0,y=0 then n=2 is at x=2,y=0.  The diagonals
38       are 1 across and 1 up or down, so n=3 is at x=1,y=1.  Each alternate
39       row is offset from the one above or below.
40
41       This grid is the same as the "HexSpiral" and the path is like that
42       spiral except instead of a flat top and SE,SW sides it extends to
43       triangular peaks.  The result is a longer loop and each successive loop
44       is step=9 longer than the previous (whereas the "HexSpiral" is step=6
45       more).
46
47       The triangular numbers 1, 3, 6, 10, 15, 21, 28, 36 etc, k*(k+1)/2, fall
48       one before the successive corners of the triangle, so when plotted make
49       three lines going vertically and angled down left and right.
50
51       The 11-gonal "hendecagonal" numbers 11, 30, 58, etc, k*(9k-7)/2 fall on
52       a straight line horizontally to the right.  (As per the general rule
53       that a step "s" lines up the (s+2)-gonal numbers.)
54
55   N Start
56       The default is to number points starting N=1 as shown above.  An
57       optional "n_start" can give a different start with the same shape etc.
58       For example to start at 0,
59
60           n_start => 0      15
61                            /  \
62                          16    14
63                         /        \
64                       17     3    13
65                      /     /  \     \
66                    18     4     2    12   ...
67                   /     /        \     \     \
68                 19     5     0-----1    11    30
69                /     /                    \     \
70              20     6-----7-----8-----9----10    29
71             /                                      \
72           21----22----23----24----25----26----27----28
73
74       With this adjustment the X axis N=0,1,11,30,etc is the hendecagonal
75       numbers (9k-7)*k/2.  And N=0,8,25,etc diagonally South-East is the
76       hendecagonals of the second kind which is (9k-7)*k/2 for k negative.
77

FUNCTIONS

79       See "FUNCTIONS" in Math::PlanePath for behaviour common to all path
80       classes.
81
82       "$path = Math::PlanePath::TriangleSpiral->new ()"
83       "$path = Math::PlanePath::TriangleSpiral->new (n_start => $n)"
84           Create and return a new triangle spiral object.
85
86       "($x,$y) = $path->n_to_xy ($n)"
87           Return the X,Y coordinates of point number $n on the path.
88
89           For "$n < 1" the return is an empty list, it being considered the
90           path starts at 1.
91
92       "$n = $path->xy_to_n ($x,$y)"
93           Return the point number for coordinates "$x,$y".  $x and $y are
94           each rounded to the nearest integer, which has the effect of
95           treating each $n in the path as a square of side 1.
96
97           Only every second square in the plane has an N.  If "$x,$y" is a
98           position without an N then the return is "undef".
99

OEIS

101       Entries in Sloane's Online Encyclopedia of Integer Sequences related to
102       this path include
103
104           <http://oeis.org/A010054> (etc)
105
106           n_start=1 (default)
107             A010054     turn 1=left,0=straight, extra initial 1
108
109             A117625     N on X axis
110             A081272     N on Y axis
111             A006137     N on X negative axis
112             A064226     N on X=Y leading diagonal, but without initial value=1
113             A064225     N on X=Y negative South-West diagonal
114             A081267     N on X=-Y negative South-East diagonal
115             A081589     N on ENE slope dX=3,dY=1
116             A038764     N on WSW slope dX=-3,dY=-1
117             A060544     N on ESE slope dX=3,dY=-1 diagonal
118
119             A063177     total sum previous row or diagonal
120
121           n_start=0
122             A051682     N on X axis (11-gonal numbers)
123             A062741     N on Y axis
124             A062708     N on X=Y leading diagonal
125             A081268     N on X=Y+2 diagonal (right of leading diagonal)
126             A062728     N on South-East diagonal (11-gonal second kind)
127             A062725     N on South-West diagonal
128             A081275     N on ENE slope from X=2,Y=0 then dX=+3,dY=+1
129             A081266     N on WSW slope dX=-3,dY=-1
130             A081271     N on X=2 vertical
131
132           n_start=-1
133             A023531     turn 1=left,0=straight, being 1 at N=k*(k+3)/2
134             A023532     turn 1=straight,0=left
135
136       A023531 is "n_start=-1" to match its "offset=0" for the first turn,
137       being the second point of the path.  A010054 which is 1 at triangular
138       numbers k*(k+1)/2 is the same except for an extra initial 1.
139

SEE ALSO

141       Math::PlanePath, Math::PlanePath::TriangleSpiralSkewed,
142       Math::PlanePath::HexSpiral
143

HOME PAGE

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

LICENSE

148       Copyright 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
149       2020 Kevin Ryde
150
151       This file is part of Math-PlanePath.
152
153       Math-PlanePath is free software; you can redistribute it and/or modify
154       it under the terms of the GNU General Public License as published by
155       the Free Software Foundation; either version 3, or (at your option) any
156       later version.
157
158       Math-PlanePath is distributed in the hope that it will be useful, but
159       WITHOUT ANY WARRANTY; without even the implied warranty of
160       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
161       General Public License for more details.
162
163       You should have received a copy of the GNU General Public License along
164       with Math-PlanePath.  If not, see <http://www.gnu.org/licenses/>.
165
166
167
168perl v5.36.0                      2023-01-20Math::PlanePath::TriangleSpiral(3)
Impressum