logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

Math::PlanePath::DiagonalsAlternating -- points in diagonal stripes of alternating directions

Description

       This path follows successive diagonals going from the Y axis down to the X axis and then back up again,

             5  |  16
                |   |\
             4  |  15  17
                |    \   \
             3  |   7  14  18
                |   |\   \   \
             2  |   6   8  13  19  ...
                |    \   \   \   \   \
             1  |   2   5   9  12  20  23
                |   |\   \   \   \   \   \
           Y=0  |   1   3-- 4  10--11  21--22
                +----------------------------
                  X=0   1   2   3   4   5   6

       The triangular numbers 1,3,6,10,etc k*(k+1)/2 are the start of each run up or down alternately on the X
       axis and Y axis.  N=1,6,15,28,etc on the Y axis (Y even) are the hexagonal numbers j*(2j-1).
       N=3,10,21,36,etc on the X axis (X odd) are the hexagonal numbers of the second kind j*(2j+1).

   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 pattern.  For example to start at 0,

           n_start => 0

             4  |  14
             3  |   6 13
             2  |   5  7 12
             1  |   1  4  8 11
           Y=0  |   0  2  3  9 10
                +-----------------
                  X=0  1  2  3  4

Formulas

RectangletoNRange
       Within  each  row increasing X is increasing N, and in each column increasing Y is increasing N.  So in a
       rectangle the lower left corner is the minimum N and the upper right is the maximum N.

           |               N max
           |     ----------+
           |    |  ^       |
           |    |  |       |
           |    |   ---->  |
           |    +----------
           |   N min
           +-------------------

Functions

       See "FUNCTIONS" in Math::PlanePath for behaviour common to all path classes.

       "$path = Math::PlanePath::DiagonalsAlternating->new ()"
       "$path = Math::PlanePath::DiagonalsAlternating->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 < 1" the return is an empty list, it being considered the path begins at 1.

Home Page

License

       Copyright 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021 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::PlanePat...nalsAlternating(3pm)

Name

       Math::PlanePath::DiagonalsAlternating -- points in diagonal stripes of alternating directions

Oeis

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

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

           n_start=1
             A131179    N on X axis (extra initial 0)
             A128918    N on Y axis (extra initial 1)
             A001844    N on X=Y diagonal
             A038722    permutation N at transpose Y,X

           n_start=0
             A319572    X coordinate
             A319573    Y coordinate
             A319571    X,Y coordinates together
             A003056    X+Y
             A004247    X*Y
             A049581    abs(X-Y)
             A048147    X^2+Y^2
             A004198    X bit-and Y
             A003986    X bit-or Y
             A003987    X bit-xor Y
             A004197    min(X,Y)
             A003984    max(X,Y)
             A101080    HammingDist(X,Y)
             A023531    dSum = dX+dY, being 1 at N=triangular+1 (and 0)
             A046092    N on X=Y diagonal
             A061579    permutation N at transpose Y,X

             A056011    permutation N at points by Diagonals,direction=up order
             A056023    permutation N at points by Diagonals,direction=down
                runs alternately up and down, both are self-inverse

       The coordinates such as A003056 X+Y are the same here as in the Diagonals  path.   "DiagonalsAlternating"
       transposes X,Y -> Y,X in every second diagonal but forms such as X+Y are unchanged by swapping to Y+X.

See Also

       Math::PlanePath, Math::PlanePath::Diagonals, Math::PlanePath::DiagonalsOctant

Synopsis

        use Math::PlanePath::DiagonalsAlternating;
        my $path = Math::PlanePath::DiagonalsAlternating->new;
        my ($x, $y) = $path->n_to_xy (123);

See Also