1Math::PlanePath::TriangUlseeSrpiCroanltSrkiebwuetde(d3M)Paetrhl::DPolcaunmeePnattaht:i:oTnriangleSpiralSkewed(3)
2
3
4
6 Math::PlanePath::TriangleSpiralSkewed -- integer points drawn around a
7 skewed equilateral triangle
8
10 use Math::PlanePath::TriangleSpiralSkewed;
11 my $path = Math::PlanePath::TriangleSpiralSkewed->new;
12 my ($x, $y) = $path->n_to_xy (123);
13
15 This path makes an spiral shaped as an equilateral triangle (each side
16 the same length), but skewed to the left to fit on a square grid,
17
18 16 4
19 |\
20 17 15 3
21 | \
22 18 4 14 2
23 | |\ \
24 19 5 3 13 1
25 | | \ \
26 20 6 1--2 12 ... <- 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 -2 -1 X=0 1 2 3 4 5
34
35 The properties are the same as the spread-out "TriangleSpiral". The
36 triangle numbers fall on straight lines as they do in the
37 "TriangleSpiral" but the skew means the top corner goes up at an angle
38 to the vertical and the left and right downwards are different angles
39 plotted (but are symmetric by N count).
40
41 Skew Right
42 Option "skew => 'right'" directs the skew towards the right, giving
43
44 4 16 skew="right"
45 / |
46 3 17 15
47 / |
48 2 18 4 14
49 / / | |
50 1 ... 5 3 13
51 / | |
52 Y=0 -> 6 1--2 12
53 / |
54 -1 7--8--9-10-11
55
56 ^
57 -2 -1 X=0 1 2
58
59 This is a shear "X -> X+Y" of the default skew="left" shown above. The
60 coordinates are related by
61
62 Xright = Xleft + Yleft Xleft = Xright - Yright
63 Yright = Yleft Yleft = Yright
64
65 Skew Up
66 2 16-15-14-13-12-11 skew="up"
67 | /
68 1 17 4--3--2 10
69 | | / /
70 Y=0 -> 18 5 1 9
71 | | /
72 -1 ... 6 8
73 |/
74 -2 7
75
76 ^
77 -2 -1 X=0 1 2
78
79 This is a shear "Y -> X+Y" of the default skew="left" shown above. The
80 coordinates are related by
81
82 Xup = Xleft Xleft = Xup
83 Yup = Yleft + Xleft Yleft = Yup - Xup
84
85 Skew Down
86 2 ..-18-17-16 skew="down"
87 |
88 1 7--6--5--4 15
89 \ | |
90 Y=0 -> 8 1 3 14
91 \ \ | |
92 -1 9 2 13
93 \ |
94 -2 10 12
95 \ |
96 11
97
98 ^
99 -2 -1 X=0 1 2
100
101 This is a rotate by -90 degrees of the skew="up" above. The
102 coordinates are related
103
104 Xdown = Yup Xup = - Ydown
105 Ydown = - Xup Yup = Xdown
106
107 Or related to the default skew="left" by
108
109 Xdown = Yleft + Xleft Xleft = - Ydown
110 Ydown = - Xleft Yleft = Xdown + Ydown
111
112 N Start
113 The default is to number points starting N=1 as shown above. An
114 optional "n_start" can give a different start, with the same shape etc.
115 For example to start at 0,
116
117 15 n_start => 0
118 |\
119 16 14
120 | \
121 17 3 13 ...
122 | |\ \ \
123 18 4 2 12 31
124 | | \ \ \
125 19 5 0--1 11 30
126 | | \ \
127 20 6--7--8--9-10 29
128 | \
129 21-22-23-24-25-26-27-28
130
131 With this adjustment for example the X axis N=0,1,11,30,etc is
132 (9X-7)*X/2, the hendecagonal numbers (11-gonals). And South-East
133 N=0,8,25,etc is the hendecagonals of the second kind, (9Y-7)*Y/2 with Y
134 negative.
135
137 See "FUNCTIONS" in Math::PlanePath for behaviour common to all path
138 classes.
139
140 "$path = Math::PlanePath::TriangleSpiralSkewed->new ()"
141 "$path = Math::PlanePath::TriangleSpiralSkewed->new (skew => $str,
142 n_start => $n)"
143 Create and return a new skewed triangle spiral object. The "skew"
144 parameter can be
145
146 "left" (the default)
147 "right"
148 "up"
149 "down"
150
151 "$n = $path->xy_to_n ($x,$y)"
152 Return the point number for coordinates "$x,$y". $x and $y are
153 each rounded to the nearest integer, which has the effect of
154 treating each N in the path as centred in a square of side 1, so
155 the entire plane is covered.
156
158 Rectangle to N Range
159 Within each row there's a minimum N and the N values then increase
160 monotonically away from that minimum point. Likewise in each column.
161 This means in a rectangle the maximum N is at one of the four corners
162 of the rectangle.
163
164 |
165 x1,y2 M---|----M x2,y2 maximum N at one of
166 | | | the four corners
167 -------O--------- of the rectangle
168 | | |
169 | | |
170 x1,y1 M---|----M x1,y1
171 |
172
174 Entries in Sloane's Online Encyclopedia of Integer Sequences related to
175 this path include
176
177 <http://oeis.org/A117625> (etc)
178
179 n_start=1, skew="left" (the defaults)
180 A204439 abs(dX)
181 A204437 abs(dY)
182 A010054 turn 1=left,0=straight, extra initial 1
183
184 A117625 N on X axis
185 A064226 N on Y axis, but without initial value=1
186 A006137 N on X negative
187 A064225 N on Y negative
188 A081589 N on X=Y leading diagonal
189 A038764 N on X=Y negative South-West diagonal
190 A081267 N on X=-Y negative South-East diagonal
191 A060544 N on ESE slope dX=+2,dY=-1
192 A081272 N on SSE slope dX=+1,dY=-2
193
194 A217010 permutation N values of points in SquareSpiral order
195 A217291 inverse
196 A214230 sum of 8 surrounding N
197 A214231 sum of 4 surrounding N
198
199 n_start=0
200 A051682 N on X axis (11-gonal numbers)
201 A081268 N on X=1 vertical (next to Y axis)
202 A062708 N on Y axis
203 A062725 N on Y negative axis
204 A081275 N on X=Y+1 North-East diagonal
205 A062728 N on South-East diagonal (11-gonal second kind)
206 A081266 N on X=Y negative South-West diagonal
207 A081270 N on X=1-Y North-West diagonal, starting N=3
208 A081271 N on dX=-1,dY=2 NNW slope up from N=1 at X=1,Y=0
209
210 n_start=-1
211 A023531 turn 1=left,0=straight, being 1 at N=k*(k+3)/2
212 A023532 turn 1=straight,0=left
213
214 n_start=1, skew="right"
215 A204435 abs(dX)
216 A204437 abs(dY)
217 A217011 permutation N values of points in SquareSpiral order
218 but with 90-degree rotation
219 A217292 inverse
220 A214251 sum of 8 surrounding N
221
222 n_start=1, skew="up"
223 A204439 abs(dX)
224 A204435 abs(dY)
225 A217012 permutation N values of points in SquareSpiral order
226 but with 90-degree rotation
227 A217293 inverse
228 A214252 sum of 8 surrounding N
229
230 n_start=1, skew="down"
231 A204435 abs(dX)
232 A204439 abs(dY)
233
234 The square spiral order in A217011,A217012 and their inverses has first
235 step at 90-degrees to the first step of the triangle spiral, hence the
236 rotation by 90 degrees when relating to the "SquareSpiral" path.
237 A217010 on the other hand has no such rotation since it reckons the
238 square and triangle spirals starting in the same direction.
239
241 Math::PlanePath, Math::PlanePath::TriangleSpiral,
242 Math::PlanePath::PyramidSpiral, Math::PlanePath::SquareSpiral
243
245 <http://user42.tuxfamily.org/math-planepath/index.html>
246
248 Copyright 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
249 2020 Kevin Ryde
250
251 This file is part of Math-PlanePath.
252
253 Math-PlanePath is free software; you can redistribute it and/or modify
254 it under the terms of the GNU General Public License as published by
255 the Free Software Foundation; either version 3, or (at your option) any
256 later version.
257
258 Math-PlanePath is distributed in the hope that it will be useful, but
259 WITHOUT ANY WARRANTY; without even the implied warranty of
260 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
261 General Public License for more details.
262
263 You should have received a copy of the GNU General Public License along
264 with Math-PlanePath. If not, see <http://www.gnu.org/licenses/>.
265
266
267
268perl v5.34.0 2022-M0a1t-h2:1:PlanePath::TriangleSpiralSkewed(3)