1Math::PlanePath::PyramiUdsSeirdeCso(n3t)ributed Perl DocMuamtehn:t:aPtliaonnePath::PyramidSides(3)
2
3
4
6 Math::PlanePath::PyramidSides -- points along the sides of pyramid
7
9 use Math::PlanePath::PyramidSides;
10 my $path = Math::PlanePath::PyramidSides->new;
11 my ($x, $y) = $path->n_to_xy (123);
12
14 This path puts points in layers along the sides of a pyramid growing
15 upwards.
16
17 21 4
18 20 13 22 3
19 19 12 7 14 23 2
20 18 11 6 3 8 15 24 1
21 17 10 5 2 1 4 9 16 25 <- Y=0
22 ------------------------------------
23 ^
24 ... -4 -3 -2 -1 X=0 1 2 3 4 ...
25
26 N=1,4,9,16,etc along the positive X axis is the perfect squares.
27 N=2,6,12,20,etc in the X=-1 vertical is the pronic numbers k*(k+1) half
28 way between those successive squares.
29
30 The pattern is the same as the "Corner" path but turned and spread so
31 the single quadrant in the "Corner" becomes a half-plane here.
32
33 The pattern is similar to "PyramidRows" (with its default step=2), just
34 with the columns dropped down vertically to start at the X axis. Any
35 pattern occurring within a column is unchanged, but what was a row
36 becomes a diagonal and vice versa.
37
38 Lucky Numbers of Euler
39 An interesting sequence for this path is Euler's k^2+k+41. The low
40 values are spread around a bit, but from N=1763 (k=41) they're the
41 vertical at X=40. There's quite a few primes in this quadratic and
42 when plotting primes that vertical stands out a little denser than its
43 surrounds (at least for up to the first 2500 or so values). The line
44 shows in other step==2 paths too, but not as clearly. In the
45 "PyramidRows" for instance the beginning is up at Y=40, and in the
46 "Corner" path it's a diagonal.
47
48 N Start
49 The default is to number points starting N=1 as shown above. An
50 optional "n_start" can give a different start, in the same pyramid
51 pattern. For example to start at 0,
52
53 n_start => 0
54
55 20 4
56 19 12 21 3
57 18 11 6 13 22 2
58 17 10 5 2 7 14 23 1
59 16 9 4 1 0 3 8 15 24 <- Y=0
60 --------------------------
61 -4 -3 -2 -1 X=0 1 2 3 4
62
64 See "FUNCTIONS" in Math::PlanePath for behaviour common to all path
65 classes.
66
67 "$path = Math::PlanePath::PyramidSides->new ()"
68 "$path = Math::PlanePath::PyramidSides->new (n_start => $n)"
69 Create and return a new path object.
70
71 "($x,$y) = $path->n_to_xy ($n)"
72 Return the X,Y coordinates of point number $n on the path.
73
74 For "$n < 0.5" the return is an empty list, it being considered
75 there are no negative points in the pyramid.
76
77 "$n = $path->xy_to_n ($x,$y)"
78 Return the point number for coordinates "$x,$y". $x and $y are
79 each rounded to the nearest integer which has the effect of
80 treating points in the pyramid as a squares of side 1, so the half-
81 plane y>=-0.5 is entirely covered.
82
83 "($n_lo, $n_hi) = $path->rect_to_n_range ($x1,$y1, $x2,$y2)"
84 The returned range is exact, meaning $n_lo and $n_hi are the
85 smallest and biggest in the rectangle.
86
88 Rectangle to N Range
89 For "rect_to_n_range()", in each column N increases so the biggest N is
90 in the topmost row and and smallest N in the bottom row.
91
92 In each row N increases along the sequence X=0,-1,1,-2,2,-3,3, etc. So
93 the biggest N is at the X of biggest absolute value and preferring the
94 positive X=k over the negative X=-k.
95
96 The smallest N conversely is at the X of smallest absolute value. If
97 the X range crosses 0, ie. $x1 and $x2 have different signs, then X=0
98 is the smallest.
99
101 Entries in Sloane's Online Encyclopedia of Integer Sequences related to
102 this path include
103
104 <http://oeis.org/A196199> (etc)
105
106 n_start=1 (the default)
107 A049240 abs(dY), being 0=horizontal step at N=square
108 A002522 N on X negative axis, x^2+1
109 A033951 N on X=Y diagonal, 4d^2+3d+1
110 A004201 N for which X>=0, ie. right hand half
111 A020703 permutation N at -X,Y
112
113 n_start=0
114 A196199 X coordinate, runs -n to +n
115 A053615 abs(X), runs n to 0 to n
116 A000196 abs(X)+abs(Y), being floor(sqrt(N)),
117 k repeated 2k+1 times starting 0
118
120 Math::PlanePath, Math::PlanePath::PyramidRows, Math::PlanePath::Corner,
121 Math::PlanePath::DiamondSpiral, Math::PlanePath::SacksSpiral,
122 Math::PlanePath::MPeaks
123
125 <http://user42.tuxfamily.org/math-planepath/index.html>
126
128 Copyright 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019,
129 2020 Kevin Ryde
130
131 This file is part of Math-PlanePath.
132
133 Math-PlanePath is free software; you can redistribute it and/or modify
134 it under the terms of the GNU General Public License as published by
135 the Free Software Foundation; either version 3, or (at your option) any
136 later version.
137
138 Math-PlanePath is distributed in the hope that it will be useful, but
139 WITHOUT ANY WARRANTY; without even the implied warranty of
140 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
141 General Public License for more details.
142
143 You should have received a copy of the GNU General Public License along
144 with Math-PlanePath. If not, see <http://www.gnu.org/licenses/>.
145
146
147
148perl v5.32.1 2021-01-27 Math::PlanePath::PyramidSides(3)