.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.40) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "Math::PlanePath::PyramidSides 3pm" .TH Math::PlanePath::PyramidSides 3pm "2021-01-23" "perl v5.32.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Math::PlanePath::PyramidSides \-\- points along the sides of pyramid .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 3 \& use Math::PlanePath::PyramidSides; \& my $path = Math::PlanePath::PyramidSides\->new; \& my ($x, $y) = $path\->n_to_xy (123); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" This path puts points in layers along the sides of a pyramid growing upwards. .PP .Vb 8 \& 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 ... .Ve .PP 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. .IX Xref "Square numbers Pronic numbers" .PP The pattern is the same as the \f(CW\*(C`Corner\*(C'\fR path but turned and spread so the single quadrant in the \f(CW\*(C`Corner\*(C'\fR becomes a half-plane here. .PP The pattern is similar to \f(CW\*(C`PyramidRows\*(C'\fR (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. .SS "Lucky Numbers of Euler" .IX Subsection "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'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 \f(CW\*(C`PyramidRows\*(C'\fR for instance the beginning is up at Y=40, and in the \f(CW\*(C`Corner\*(C'\fR path it's a diagonal. .SS "N Start" .IX Subsection "N Start" The default is to number points starting N=1 as shown above. An optional \&\f(CW\*(C`n_start\*(C'\fR can give a different start, in the same pyramid pattern. For example to start at 0, .PP .Vb 1 \& 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 .Ve .SH "FUNCTIONS" .IX Header "FUNCTIONS" See \*(L"\s-1FUNCTIONS\*(R"\s0 in Math::PlanePath for behaviour common to all path classes. .ie n .IP """$path = Math::PlanePath::PyramidSides\->new ()""" 4 .el .IP "\f(CW$path = Math::PlanePath::PyramidSides\->new ()\fR" 4 .IX Item "$path = Math::PlanePath::PyramidSides->new ()" .PD 0 .ie n .IP """$path = Math::PlanePath::PyramidSides\->new (n_start => $n)""" 4 .el .IP "\f(CW$path = Math::PlanePath::PyramidSides\->new (n_start => $n)\fR" 4 .IX Item "$path = Math::PlanePath::PyramidSides->new (n_start => $n)" .PD Create and return a new path object. .ie n .IP """($x,$y) = $path\->n_to_xy ($n)""" 4 .el .IP "\f(CW($x,$y) = $path\->n_to_xy ($n)\fR" 4 .IX Item "($x,$y) = $path->n_to_xy ($n)" Return the X,Y coordinates of point number \f(CW$n\fR on the path. .Sp For \f(CW\*(C`$n < 0.5\*(C'\fR the return is an empty list, it being considered there are no negative points in the pyramid. .ie n .IP """$n = $path\->xy_to_n ($x,$y)""" 4 .el .IP "\f(CW$n = $path\->xy_to_n ($x,$y)\fR" 4 .IX Item "$n = $path->xy_to_n ($x,$y)" Return the point number for coordinates \f(CW\*(C`$x,$y\*(C'\fR. \f(CW$x\fR and \f(CW$y\fR 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. .ie n .IP """($n_lo, $n_hi) = $path\->rect_to_n_range ($x1,$y1, $x2,$y2)""" 4 .el .IP "\f(CW($n_lo, $n_hi) = $path\->rect_to_n_range ($x1,$y1, $x2,$y2)\fR" 4 .IX Item "($n_lo, $n_hi) = $path->rect_to_n_range ($x1,$y1, $x2,$y2)" The returned range is exact, meaning \f(CW$n_lo\fR and \f(CW$n_hi\fR are the smallest and biggest in the rectangle. .SH "FORMULAS" .IX Header "FORMULAS" .SS "Rectangle to N Range" .IX Subsection "Rectangle to N Range" For \f(CW\*(C`rect_to_n_range()\*(C'\fR, in each column N increases so the biggest N is in the topmost row and and smallest N in the bottom row. .PP 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. .PP The smallest N conversely is at the X of smallest absolute value. If the X range crosses 0, ie. \f(CW$x1\fR and \f(CW$x2\fR have different signs, then X=0 is the smallest. .SH "OEIS" .IX Header "OEIS" Entries in Sloane's Online Encyclopedia of Integer Sequences related to this path include .Sp .RS 4 (etc) .RE .PP .Vb 6 \& 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 .Ve .SH "SEE ALSO" .IX Header "SEE ALSO" Math::PlanePath, Math::PlanePath::PyramidRows, Math::PlanePath::Corner, Math::PlanePath::DiamondSpiral, Math::PlanePath::SacksSpiral, Math::PlanePath::MPeaks .SH "HOME PAGE" .IX Header "HOME PAGE" .SH "LICENSE" .IX Header "LICENSE" Copyright 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Kevin Ryde .PP This file is part of Math-PlanePath. .PP Math-PlanePath is free software; you can redistribute it and/or modify it under the terms of the \s-1GNU\s0 General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. .PP Math-PlanePath is distributed in the hope that it will be useful, but \&\s-1WITHOUT ANY WARRANTY\s0; without even the implied warranty of \s-1MERCHANTABILITY\s0 or \s-1FITNESS FOR A PARTICULAR PURPOSE.\s0 See the \s-1GNU\s0 General Public License for more details. .PP You should have received a copy of the \s-1GNU\s0 General Public License along with Math-PlanePath. If not, see .