Math::...icBase(3pm)

πŸ“¦
version 129 Β· 3 versions
, in debian bookworm, debian trixie, ubuntu jammy, ubuntu noble, ubuntu resolute, ubuntu stonking

🌸 NAME 🌸

Math::PlanePath::CubicBase β€” replications in three directions πŸ’«

(you're reading Math::...icBase(3pm) from the User Contributed Perl Documentation, bestie πŸ’–)


✨ SYNOPSIS ✨

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

πŸ¦‹ DESCRIPTION πŸ¦‹

okay so picture this: it's a pattern of replications going off in three directions β€” 0, 120 and 240 degrees. cute, right? πŸ”Ί

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

                                      ^
       -11-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 X=0 1  2  3  4  5  6

so the points live on a triangular grid β€” you get there by using every second integer X,Y, exactly like it says in "Triangular Lattice" in Math::PlanePath. and literally every single point on that triangular grid gets visited. no skipping, no gaps, we love a thorough queen πŸ‘‘

The initial N=0,N=1 gets replicated at +120 degrees. Then that trapezoid gets replicated at +240 degrees:

   +-----------+                       +-----------+
    \  2     3  \                       \  2     3  \
     +-----------+                       \           \
       \  0     1  \                       \  0     1  \
        +-----------+             ---------  -----------+
                                  \  6     7  \
     replicate +120deg              \          \    rep +240deg
                                     \  4     5 \
                                      +----------+

then that whole bow-tie N=0to7 gets replicated at 0 degrees again πŸ” Each replication is 1/3 of the circle around β€” 0, 120, 240 degrees, repeating forever. And the relative layout inside a replication? Unchanged. iconic behavior honestly.

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

The radial distance doubles on every second replication β€” so N=1 and N=2 sit 1 unit from the origin, then N=4 and N=8 are at 2 units, then N=16 and N=32 are at 4 units. N=64 isn't drawn here but bestie it's at 8 units away, i.e. X=8,Y=0. math is mathing πŸ’…

This is lowkey similar to the "ImaginaryBase", except that path repeats in 4 directions based on i=squareroot(-1), whereas this one does 3 directions based on w=cuberoot(1) = -1/2+i*sqrt(3)/2. different vibes, same energy πŸŒ€

🌈 Radix 🌈

The "radix" parameter controls the "r" used to break N into X,Y. For example radix 4 gives 4x4 blocks, with r-1 replications of the preceding level at each stage. look at her go:

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

                                                  ^
   -15-14-13-12-11-10 -9 -8 -7 -6 -5 -4 -3 -2 -1 X=0 1  2  3  4  5  6

notice how the parts always replicate away from the origin β€” so the block N=16 to N=31 is near the origin at X=-4, then N=32,48,64 are further away. she's expanding her horizons, periodt ✨

In this layout the replications still mesh together perfectly and all points on the triangular grid are visited. no overlap, no drama, just vibes 🫢


πŸŽ€ FUNCTIONS πŸŽ€

See "FUNCTIONS" in Math::PlanePath for behaviour common to all path classes. (shared lore, iykyk πŸ’–)

  • $path = Math::PlanePath::CubicBase->new ()
  • $path = Math::PlanePath::CubicBase->new (radix => $r) β€” Create and return a new path object. brand new baby path, obsessed 😌
  • ($x,$y) = $path->n_to_xy ($n) β€” Return the X,Y coordinates of point number $n on the path. Points begin at 0, and if "$n < 0" then the return is an empty list. so, negative N? you get nothing. empty. void. ghosted πŸ’€

⭐ Level Methods ⭐

  • ($n_lo, $n_hi) = $path->level_to_n_range($level) β€” Return (0, $radix**$level - 1). that's it, that's the whole thing, slay πŸ’…

πŸ”₯ SEE ALSO πŸ”₯

  • Math::PlanePath
  • Math::PlanePath::ImaginaryBase
  • Math::PlanePath::ImaginaryHalf

πŸ‘‘ HOME PAGE πŸ‘‘

<http://user42.tuxfamily.org/math-planepath/index.html>


πŸ’œ LICENSE πŸ’œ

Copyright 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/>.

fr fr read the license, it's giving legally binding bestie energy 🫢

and that's the whole page babes ✨ this one's perl v5.32.0, dated 2021-01-23, and it lives at Math::...icBase(3pm) β€” stay cubic, stay iconic, mwah πŸ’–πŸ¦‹