 Math::PlanePath::SquareReplicate(3) 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*b^2 + a*b + a
```

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.

## Level Methods

"(\$n_lo, \$n_hi) = \$path->level_to_n_range(\$level)"
Return "(0, 9**\$level - 1)".

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