Math::PlanePath::PyramidSides -- points along the sides of pyramid
Contents
Description
This path puts points in layers along the sides of a pyramid growing upwards.
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 ...
N=1,4,9,16,etc along the positive X axis is the perfect squares. N=2,6,12,20,etc in the X=-1 vertical is
the pronic numbers k*(k+1) half way between those successive squares.
The pattern is the same as the "Corner" path but turned and spread so the single quadrant in the "Corner"
becomes a half-plane here.
The pattern is similar to "PyramidRows" (with its default step=2), just with the columns dropped down
vertically to start at the X axis. Any pattern occurring within a column is unchanged, but what was a
row becomes a diagonal and vice versa.
LuckyNumbersofEuler
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's quite a few primes in this quadratic and when
plotting primes that vertical stands out a little denser than its surrounds (at least for up to the first
2500 or so values). The line shows 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.
NStart
The default is to number points starting N=1 as shown above. An optional "n_start" can give a different
start, in the same pyramid pattern. For example to start at 0,
n_start => 0
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
Formulas
RectangletoNRange
For "rect_to_n_range()", in each column N increases so the biggest N is in the topmost row and and
smallest N 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 of
biggest absolute value and preferring the positive X=k over the negative X=-k.
The smallest N conversely is at the X of smallest absolute value. If the X range crosses 0, ie. $x1 and
$x2 have different signs, then X=0 is the smallest.
Functions
See "FUNCTIONS" in Math::PlanePath for behaviour common to all path classes.
"$path = Math::PlanePath::PyramidSides->new ()"
"$path = Math::PlanePath::PyramidSides->new (n_start => $n)"
Create and return a new path object.
"($x,$y) = $path->n_to_xy ($n)"
Return the X,Y coordinates of point number $n on the path.
For "$n < 0.5" the return is an empty list, it being considered there are no negative points in the
pyramid.
"$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 points in the pyramid as a squares of side 1, so the half-plane
y>=-0.5 is entirely covered.
"($n_lo, $n_hi) = $path->rect_to_n_range ($x1,$y1, $x2,$y2)"
The returned range is exact, meaning $n_lo and $n_hi are the smallest and biggest in the rectangle.
Home Page
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/>.
perl v5.32.0 2021-01-23 Math::PlanePath::PyramidSides(3pm)
Name
Math::PlanePath::PyramidSides -- points along the sides of pyramid
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
See Also
Math::PlanePath, Math::PlanePath::PyramidRows, Math::PlanePath::Corner, Math::PlanePath::DiamondSpiral,
Math::PlanePath::SacksSpiral, Math::PlanePath::MPeaks
Synopsis
use Math::PlanePath::PyramidSides;
my $path = Math::PlanePath::PyramidSides->new;
my ($x, $y) = $path->n_to_xy (123);
