1Math::PlanePath::TriangUlseeSrpiCroanlt(r3i)buted Perl DMoactuhm:e:nPtlaatnieoPnath::TriangleSpiral(3)
2
3
4
6 Math::PlanePath::TriangleSpiral -- integer points drawn around an
7 equilateral triangle
8
10 use Math::PlanePath::TriangleSpiral;
11 my $path = Math::PlanePath::TriangleSpiral->new;
12 my ($x, $y) = $path->n_to_xy (123);
13
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
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
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
141 Math::PlanePath, Math::PlanePath::TriangleSpiralSkewed,
142 Math::PlanePath::HexSpiral
143
145 <http://user42.tuxfamily.org/math-planepath/index.html>
146
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)