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::OctagramSpiral -- integer points drawn around an octagram

Description

       This path makes a spiral around an octagram (8-pointed star),

                 29          25                 4
                  | \       / |
                 30 28    26 24    ...56-55     3
                  |   \  /    |         /
           33-32-31  7 27  5 23-22-21 54        2
             \       |\  / |      /  /
              34  9- 8  6  4- 3 20 53           1
                \  \        /  /  /
                 35 10  1--2 19 52          <- Y=0
                /  /           \  \
              36 11-12 14 16-17-18 51          -1
             /       |/  \ |         \
           37-38-39 13 43 15 47-48-49-50       -2
                  |   /  \    |
                 40 42    44 46                -3
                  |/        \ |
                 41          45                -4

                        ^
           -4 -3 -2 -1 X=0 1  2  3  4  5 ...

       Each loop is 16 longer than the previous.  The 18-gonal numbers 18,51,100,etc fall on the horizontal at
       Y=-1.

       The inner corners like 23, 31, 39, 47 are similar to the "SquareSpiral" path, but instead of going
       directly between them the octagram takes a detour out to make the points of the star.  Those excursions
       make each loops 8 longer (1 per excursion), hence a step of 16 here as compared to 8 for the
       "SquareSpiral".

   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

                 28          24
                 29 27    25 23   ... 55 54
           32 31 30  6 26  4 22 21 20 53
              33  8  7  5  3  2 19 52
                 34  9  0  1 18 51
              35 10 11 13 15 16 17 50
           36 37 38 12 42 14 46 47 48 49
                 39 41    43 45
                 40          44

Formulas

X,YtoN
       The symmetry of the octagram can be used by rotating a given X,Y back to the first star excursion such as
       N=19 to N=23.  If Y is negative then rotate back by 180 degrees, then if X is negative rotate back by 90,
       and if Y>=X then by a further 45 degrees.  Each such rotation, if needed, is counted as a multiple of the
       side-length  to  be  added  to  the  final N.  For example at N=19 the side length is 2.  Rotating by 180
       degrees is 8 side lengths, by 90 degrees 4 sides, and by 45 degrees is 2 sides.

Functions

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

       "$path = Math::PlanePath::OctagramSpiral->new ()"
           Create and return a new octagram spiral 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 starts at 1.

       "$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 each N in the path as centred in a square of side 1, so  the  entire
           plane is covered.

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::OctagramSpiral(3pm)

Name

       Math::PlanePath::OctagramSpiral -- integer points drawn around an octagram

Oeis

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

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

           n_start=1 (the default)
             A125201    N on X axis, from X=1 onwards, 18-gonals + 1
             A194268    N on diagonal South-East

           n_start=0
             A051870    N on X axis, 18-gonal numbers
             A139273    N on Y axis
             A139275    N on X negative axis
             A139277    N on Y negative axis
             A139272    N on diagonal X=Y
             A139274    N on diagonal North-West
             A139276    N on diagonal South-West
             A139278    N on diagonal South-East, second 18-gonals

See Also

       Math::PlanePath, Math::PlanePath::SquareSpiral, Math::PlanePath::PyramidSpiral

Synopsis

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

See Also