Provided by: libmath-planepath-perl_113-1_all bug

NAME

       Math::PlanePath::SquareReplicate -- replicating squares

SYNOPSIS

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

DESCRIPTION

       This path is a self-similar replicating square,

           40--39--38  31--30--29  22--21--20         4
            |       |   |       |   |       |
           41  36--37  32  27--28  23  18--19         3
            |           |           |
           42--43--44  33--34--35  24--25--26         2

           49--48--47   4-- 3-- 2  13--12--11         1
            |       |   |       |   |       |
           50  45--46   5   0-- 1  14   9--10     <- Y=0
            |           |           |
           51--52--53   6-- 7-- 8  15--16--17        -1

           58--57--56  67--66--65  76--75--74        -2
            |       |   |       |   |       |
           59  54--55  68  63--64  77  72--73        -3
            |           |           |
           60--61--62  69--70--71  78--79--80        -4

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

       The base shape is the initial N=0 to N=8 section,

          4  3  2
          5  0  1
          6  7  8

       It then repeats with 3x3 blocks arranged in the same pattern, then 9x9 blocks, etc.

           36 --- 27 --- 18
            |             |
            |             |
           45      0 ---  9
            |
            |
           54 --- 63 --- 72

       The replication means that the values on the X axis are those using only digits 0,1,5 in
       base 9.  Those to the right have a high 1 digit and those to the left a high 5 digit.
       These digits are the values in the initial N=0 to N=8 figure which fall on the X axis.

       Similarly on the Y axis digits 0,3,7 in base 9, or the leading diagonal X=Y 0,2,6 and
       opposite diagonal 0,4,8.  The opposite diagonal digits 0,4,8 are 00,11,22 in base 3, so is
       all the values in base 3 with doubled digits aabbccdd, etc.

   Level Ranges
       A given replication extends to

           Nlevel = 9^level - 1
           - (3^level - 1) <= X <= (3^level - 1)
           - (3^level - 1) <= Y <= (3^level - 1)

   Complex Base
       This pattern corresponds to expressing a complex integer X+i*Y in base b=3,

           X+Yi = a[n]*b^n + ... + a[2]*b^2 + a[1]*b + a[0]

       using complex digits a[i] encoded in N in integer base 9,

           a[i] digit     N digit
           ----------     -------
                 0           0
                 1           1
               i+1           2
               i             3
               i-1           4
                -1           5
              -i-1           6
              -i             7
              -i+1           8

FUNCTIONS

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

       "$path = Math::PlanePath::SquareReplicate->new ()"
           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.  Points begin at 0 and if
           "$n < 0" then the return is an empty list.

SEE ALSO

       Math::PlanePath, Math::PlanePath::CornerReplicate, Math::PlanePath::LTiling,
       Math::PlanePath::GosperReplicate, Math::PlanePath::QuintetReplicate

HOME PAGE

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

LICENSE

       Copyright 2011, 2012, 2013 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/>.