Math::...idSides(3pm)
๐ Math::...idSides โ aka Math::PlanePath::PyramidSides ๐
okay bestie so this is a page from the User Contributed Perl Documentation manual, and it's about a lil module called Math::PlanePath::PyramidSides โ a plane path that walks points up along the sides of a pyramid. it's giving geometry class but make it cute. let's get into it ๐ซถ
โจ NAME โจ
Math::PlanePath::PyramidSides โ points along the sides of pyramid. yes that's the whole name, she's lowkey understated like that ๐
๐ธ SYNOPSIS ๐ธ
use Math::PlanePath::PyramidSides;
my $path = Math::PlanePath::PyramidSides->new;
my ($x, $y) = $path->n_to_xy (123);
literally that's it. three lines and you're living your best life ๐ฆ
๐ DESCRIPTION ๐
okay so this path lays points down in layers along the sides of a pyramid, and the pyramid grows upward. main character energy tbh:
21 4
20 13 22 3
19 12 7 14 23 2
18 11 6 3 8 15 24 1
17 10 5 2 1 4 9 16 25 <- Y=0
------------------------------------
^
... -4 -3 -2 -1 X=0 1 2 3 4 ...
so like, N=1,4,9,16,etc along the positive X axis? those are the perfect squares, no cap. and N=2,6,12,20,etc sitting in the X=-1 vertical are the pronic numbers k*(k+1) โ the halfway point between two successive squares. cute lil midpoint moment ๐
the pattern is the same as the "Corner" path, but turned and spread out so that the single quadrant in "Corner" becomes a half-plane here. glow up fr.
and it's similar to "PyramidRows" (with its default step=2), except the columns get dropped down vertically to start at the X axis. any pattern inside a column stays exactly the same, but what used to be a row becomes a diagonal, and vice versa. slay ๐ฅ
๐ Lucky Numbers of Euler ๐
an interesting sequence for this path is Euler's k^2+k+41. the low values are spread around a bit, but from N=1763 (k=41) they're the vertical at X=40. there are quite a few primes in this quadratic, and when you plot primes, that vertical stands out a little denser than its surroundings (at least for up to the first 2500 or so values, iykyk). the line shows up in other step==2 paths too, but not as clearly โ in the "PyramidRows" for instance the beginning is up at Y=40, and in the "Corner" path it's a diagonal.
๐ง N Start ๐ง
default is to number points starting N=1, like in the pic above. but you can pass an optional "n_start" to give it a different start, in the same pyramid pattern. for example, to start at 0:
n_start => 0
and then it looks like:
20 4
19 12 21 3
18 11 6 13 22 2
17 10 5 2 7 14 23 1
16 9 4 1 0 3 8 15 24 <- Y=0
--------------------------
-4 -3 -2 -1 X=0 1 2 3 4
๐ FUNCTIONS ๐
check "FUNCTIONS" in Math::PlanePath for the behaviour that's common to all the path classes, bestie.
$path = Math::PlanePath::PyramidSides->new ()$path = Math::PlanePath::PyramidSides->new (n_start => $n)โ create and return a new path object. brand new path, who dis ๐($x,$y) = $path->n_to_xy ($n)โ return the X,Y coordinates of point number $n on the path. and heads up: for"$n < 0.5"the return is an empty list, because the vibe is that there are no negative points in the pyramid. sorry babe ๐$n = $path->xy_to_n ($x,$y)โ return the point number for coordinates"$x,$y".$xand$yeach get rounded to the nearest integer, which has the effect of treating points in the pyramid as squares of side 1, so the half-planey>=-0.5is entirely covered. full coverage, periodt โจ($n_lo, $n_hi) = $path->rect_to_n_range ($x1,$y1, $x2,$y2)โ the returned range is exact, meaning$n_loand$n_hiare literally the smallest and biggest in the rectangle. no guesswork, no crumbs.
๐ FORMULAS ๐
๐ Rectangle to N Range ๐
for "rect_to_n_range()", in each column N increases, so the biggest N lives in the topmost row and the smallest N lives in the bottom row.
in each row N increases along the sequence X=0,-1,1,-2,2,-3,3, etc. so the biggest N is at the X with the biggest absolute value, and it prefers the positive X=k over the negative X=-k. biased much? ๐ญ
the smallest N, conversely, is at the X with the smallest absolute value. and if the X range crosses 0 โ ie. $x1 and $x2 have different signs โ then X=0 is the smallest. crossing zero is kind of a moment โจ
๐ฅ OEIS ๐ฅ
entries in Sloane's Online Encyclopedia of Integer Sequences related to this path include:
<http://oeis.org/A196199> (etc)
n_start=1 (the default)
A049240 abs(dY), being 0=horizontal step at N=square
A002522 N on X negative axis, x^2+1
A033951 N on X=Y diagonal, 4d^2+3d+1
A004201 N for which X>=0, ie. right hand half
A020703 permutation N at -X,Y
n_start=0
A196199 X coordinate, runs -n to +n
A053615 abs(X), runs n to 0 to n
A000196 abs(X)+abs(Y), being floor(sqrt(N)),
k repeated 2k+1 times starting 0
number nerds stay winning ๐งฎ๐
๐ฆ SEE ALSO ๐ฆ
go check out her friends, they're all iconic:
Math::PlanePathMath::PlanePath::PyramidRowsMath::PlanePath::CornerMath::PlanePath::DiamondSpiralMath::PlanePath::SacksSpiralMath::PlanePath::MPeaks
๐ธ 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/>.
okay real talk for one sec: that "without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE" bit is ALL CAPS FOR A REASON. it means if it breaks, that's on you, not on Kevin. dramatic but accurate ๐
and that's the whole page, bestie! ๐ this lil beauty shipped as part of the User Contributed Perl Documentation, perl v5.32.0, dated 2021-01-23. go forth and plot pyramids โจ๐๐
๐ฆ where this page comes from
- debian bookworm: libmath-planepath-perl 129-1 ยท GPL-3.0-or-later
- debian trixie: libmath-planepath-perl 129-1 ยท GPL-3.0-or-later
- ubuntu jammy: libmath-planepath-perl 129-1 ยท GPL-3.0-or-later
- ubuntu noble: libmath-planepath-perl 129-1 ยท GPL-3.0-or-later
- ubuntu resolute: libmath-planepath-perl 129-1 ยท GPL-3.0-or-later
- ubuntu stonking: libmath-planepath-perl 129-1 ยท GPL-3.0-or-later
- ๐ girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms