Math::...eSpiral(3pm)

πŸ“¦
version 129 Β· 3 versions
, in debian bookworm, debian trixie, ubuntu jammy, ubuntu noble, ubuntu resolute, ubuntu stonking

πŸ’– Math::...eSpiral πŸ’–

okay bestie, gather round, because this is the User Contributed Perl Documentation for Math::PlanePath::TriangleSpiral and it's genuinely so good. yes the manual name got a little chopped in the header but we're folding it in right here, no worries 🫢


✨ 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);

like, three lines and you're already spiralling, we love that for you πŸ’…


✨ DESCRIPTION ✨

So the vibe here: this path makes a spiral, and the spiral is shaped like an equilateral triangle β€” meaning every side is the same length, no cap. 😌

                         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

The cells get spread horizontally so they fit on a square grid, exactly as described in "Triangular Lattice" in Math::PlanePath. The horizontal gaps are 2, so for instance n=1 sits at x=0,y=0 and then n=2 is at x=2,y=0. The diagonals go 1 across and 1 up or down, so n=3 is at x=1,y=1. And every alternate row is offset from the one above or below it. 🌈

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 out to triangular peaks. The result is a longer loop, and each successive loop is step=9 longer than the previous one β€” 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 you plot them they make three lines going vertically and angled down left and right. iconic behaviour honestly πŸ“

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. yes, the shared lore, iykyk πŸ’œ

  • "$path = Math::PlanePath::TriangleSpiral->new ()"
  • "$path = Math::PlanePath::TriangleSpiral->new (n_start => $n)" β€” Create and return a new triangle spiral object. fresh out the box, slay πŸ’…
  • "($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". πŸ’€ (yes, undef, it's giving nothing, that's the point)


✨ OEIS ✨

Entries in Sloane's Online Encyclopedia of Integer Sequences related to this path include 🌸

<http://oeis.org/A010054> (etc)

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     turn 1=left,0=straight, being 1 at N=k*(k+3)/2
  A023532     turn 1=straight,0=left

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

go read the whole family bestie, they're all so valid πŸ‘‘


✨ HOME PAGE ✨

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


✨ LICENSE ✨

Copyright 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 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/>. 🫢


and that's the whole page, no skips, no summaries, every single line accounted for ✨

okay that's the tea πŸ“ β€” this was perl v5.32.0, dated 2021-01-23, straight from the User Contributed Perl Documentation section of the manual, for Math::...eSpiral(3pm). love that for us. mwah πŸ’‹ πŸ’–