NAME¶
Math::PlanePath::TriangleSpiral -- integer points drawn around an equilateral
triangle
SYNOPSIS¶
use Math::PlanePath::TriangleSpiral;
my $path = Math::PlanePath::TriangleSpiral->new;
my ($x, $y) = $path->n_to_xy (123);
DESCRIPTION¶
This path makes a spiral shaped as an equilateral triangle (each side the same
length).
16 4
/ \
17 15 3
/ \
18 4 14 ... 2
/ / \ \ \
19 5 3 13 32 1
/ / \ \ \
20 6 1-----2 12 31 <- Y=0
/ / \ \
21 7-----8-----9----10----11 30 -1
/ \
22----23----24----25----26----27----28----29 -2
^
-6 -5 -4 -3 -2 -1 X=0 1 2 3 4 5 6 7 8
Cells are spread horizontally to fit on a square grid as per "Triangular
Lattice" in Math::PlanePath. The horizontal gaps are 2, so for instance
n=1 is at x=0,y=0 then n=2 is at x=2,y=0. The diagonals are 1 across and 1 up
or down, so n=3 is at x=1,y=1. Each alternate row is offset from the one above
or below.
This grid is the same as the "HexSpiral" and the path is like that
spiral except instead of a flat top and SE,SW sides it extends to triangular
peaks. The result is a longer loop and each successive loop is step=9 longer
than the previous (whereas the "HexSpiral" is step=6 more).
The triangular numbers 1, 3, 6, 10, 15, 21, 28, 36 etc, k*(k+1)/2, fall one
before the successive corners of the triangle, so when plotted make three
lines going vertically and angled down left and right.
The 11-gonal "hendecagonal" numbers 11, 30, 58, etc, k*(9k-7)/2 fall
on a straight line horizontally to the right. (As per the general rule that a
step "s" lines up the (s+2)-gonal numbers.)
N Start¶
The default is to number points starting N=1 as shown above. An optional
"n_start" can give a different start with the same shape etc. For
example to start at 0,
n_start => 0 15
/ \
16 14
/ \
17 3 13
/ / \ \
18 4 2 12 ...
/ / \ \ \
19 5 0-----1 11 30
/ / \ \
20 6-----7-----8-----9----10 29
/ \
21----22----23----24----25----26----27----28
With this adjustment the X axis N=0,1,11,30,etc is the hendecagonal numbers
(9k-7)*k/2. And N=0,8,25,etc diagonally South-East is the hendecagonals of the
second kind which is (9k-7)*k/2 for k negative.
FUNCTIONS¶
See "FUNCTIONS" in Math::PlanePath for behaviour common to all path
classes.
- "$path = Math::PlanePath::TriangleSpiral->new ()"
- "$path = Math::PlanePath::TriangleSpiral->new (n_start =>
$n)"
- Create and return a new triangle spiral object.
- "($x,$y) = $path->n_to_xy ($n)"
- Return the X,Y coordinates of point number $n on the path.
For "$n < 1" the return is an empty list, it being considered
the path starts at 1.
- "$n = $path->xy_to_n ($x,$y)"
- Return the point number for coordinates "$x,$y". $x and $y are
each rounded to the nearest integer, which has the effect of treating each
$n in the path as a square of side 1.
Only every second square in the plane has an N. If "$x,$y" is a
position without an N then the return is "undef".
OEIS¶
Entries in Sloane's Online Encyclopedia of Integer Sequences related to this
path include
n_start=1 (default)
A010054 turn 1=left,0=straight, extra initial 1
A117625 N on X axis
A081272 N on Y axis
A006137 N on X negative axis
A064226 N on X=Y leading diagonal, but without initial value=1
A064225 N on X=Y negative South-West diagonal
A081267 N on X=-Y negative South-East diagonal
A081589 N on ENE slope dX=3,dY=1
A038764 N on WSW slope dX=-3,dY=-1
A060544 N on ESE slope dX=3,dY=-1 diagonal
A063177 total sum previous row or diagonal
n_start=0
A051682 N on X axis (11-gonal numbers)
A062741 N on Y axis
A062708 N on X=Y leading diagonal
A081268 N on X=Y+2 diagonal (right of leading diagonal)
A062728 N on South-East diagonal (11-gonal second kind)
A062725 N on South-West diagonal
A081275 N on ENE slope from X=2,Y=0 then dX=+3,dY=+1
A081266 N on WSW slope dX=-3,dY=-1
A081271 N on X=2 vertical
n_start=-1
A023531 N position of turns (to the left)
1 at N=k*(k+3)/2
A023531 is "n_start=-1" to match its "offset=0" for the
first turn, being the second point of the path. A010054 which is 1 at
triangular numbers k*(k+1)/2 is the same except for an extra initial 1.
SEE ALSO¶
Math::PlanePath, Math::PlanePath::TriangleSpiralSkewed,
Math::PlanePath::HexSpiral
HOME PAGE¶
<
http://user42.tuxfamily.org/math-planepath/index.html>
LICENSE¶
Copyright 2010, 2011, 2012, 2013, 2014 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/>.