.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.40) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" ======================================================================== .\" .IX Title "Math::PlanePath::SquareReplicate 3pm" .TH Math::PlanePath::SquareReplicate 3pm "2021-01-23" "perl v5.32.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Math::PlanePath::SquareReplicate \-\- replicating squares .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 3 \& use Math::PlanePath::SquareReplicate; \& my $path = Math::PlanePath::SquareReplicate\->new; \& my ($x, $y) = $path\->n_to_xy (123); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" This path is a self-similar replicating square, .PP .Vb 5 \& 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 .Ve .PP The base shape is the initial N=0 to N=8 section, .PP .Vb 3 \& 4 3 2 \& 5 0 1 \& 6 7 8 .Ve .PP It then repeats with 3x3 blocks arranged in the same pattern, then 9x9 blocks, etc. .PP .Vb 7 \& 36 \-\-\- 27 \-\-\- 18 \& | | \& | | \& 45 0 \-\-\- 9 \& | \& | \& 54 \-\-\- 63 \-\-\- 72 .Ve .PP 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. .PP 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. .SS "Level Ranges" .IX Subsection "Level Ranges" A given replication extends to .PP .Vb 3 \& Nlevel = 9^level \- 1 \& \- (3^level \- 1) <= X <= (3^level \- 1) \& \- (3^level \- 1) <= Y <= (3^level \- 1) .Ve .SS "Complex Base" .IX Subsection "Complex Base" This pattern corresponds to expressing a complex integer X+i*Y with axis powers of base b=3, .PP .Vb 1 \& X+Yi = a[n]*b^n + ... + a[2]*b^2 + a[1]*b + a[0] .Ve .PP using complex digits a[i] encoded in N in integer base 9, .PP .Vb 11 \& 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 .Ve .SS "Numbering Rotate\-4" .IX Subsection "Numbering Rotate-4" Parameter \f(CW\*(C`numbering_type => \*(Aqrotate\-4\*(Aq\*(C'\fR applies a rotation to 4 directions E,N,W,S for each sub-part according to its position around the preceding level. .PP .Vb 11 \& ^ ^ \& | | \& +\-\-\-+\-\-\-+\-\-\-+ \& | 4 3 | 2 |\-\-> \& +\-\-\-+\-\-\-+ + \& <\-\-| 5 | 0>| 1 |\-\-> \& + +\-\-\-+\-\-\-+ \& <\-\-| 6 | 7 8 | \& +\-\-\-+\-\-\-+\-\-\-+ \& | | \& v v .Ve .PP The effect can be illustrated by writing N in base\-9. .PP .Vb 5 \& 42\-\-41 48 32\-\-31 38 24\-\-23\-\-22 \& | | | | | | | | \& 43 40 47 33 30 37 25 20\-\-21 numbering_type => \*(Aqrotate\-4\*(Aq \& | | | | | N shown in base\-9 \& 44\-\-45\-\-46 34\-\-35\-\-36 26\-\-27\-\-28 \& \& 58\-\-57\-\-56 4\-\-\-3\-\-\-2 14\-\-13\-\-12 \& | | | | | \& 51\-\-50 55 5 0\-\-\-1 15 10\-\-11 \& | | | | \& 52\-\-53\-\-54 6\-\-\-7\-\-\-8 16\-\-17\-\-18 \& \& 68\-\-67\-\-66 76\-\-75\-\-74 86\-\-85\-\-84 \& | | | | | \& 61\-\-60 65 77 70 73 87 80 83 \& | | | | | | | | \& 62\-\-63\-\-64 78 71\-\-72 88 81\-\-82 .Ve .PP Parts 10\-18 and 20\-28 are the same as the middle 0\-8. Parts 30\-38 and 40\-48 have a rotation by +90 degrees. Parts 50\-58 and 60\-68 rotation by +180 degrees, and so on. .PP Notice this means in each part the base\-9 points 11, 21, 31, points are directed away from the middle in the same way, relative to the sub-part locations. This gives a reasonably simple way to characterize points on the boundary of a given expansion level. .PP Working through the directions and boundary sides gives a state machine for which unit squares are on the boundary. For level >= 1 a given unit square has one of both of two sides on the boundary. .PP .Vb 6 \& B \& +\-\-\-\-\-+ \& | | unit square with expansion direction, \& | |\-> A one or both of sides A,B on the boundary \& | | \& +\-\-\-\-\-+ .Ve .PP A further low base\-9 digit expands the square to a block of 9, with squares then boundary or not. The result is 4 states, which can be expressed by pairs of digits .PP .Vb 7 \& write N in base\-9 using level many digits, \& delete all 2s in 2nd or later digit \& non\-boundary = \& 0 anywhere \& 5 or 6 or 7 in 2nd or later digit \& pair 13,33,53,73, 14,34,54,74 anywhere \& pair 43,44, 81,88 at 2nd or later digit .Ve .PP Pairs 53,73,54,74 can be checked just at the start of the digits, since 5 or 7 anywhere later are non-boundary alone irrespective of what (if any) pair they might make. .SS "Numbering Rotate 8" .IX Subsection "Numbering Rotate 8" Parameter \f(CW\*(C`numbering_type => \*(Aqrotate\-8\*(Aq\*(C'\fR applies a rotation to 8 directions for each sub-part according to its position around the preceding level. .PP .Vb 11 \& ^ ^ ^ \& \e | / \& +\-\-\-+\-\-\-+\-\-\-+ \& | 4 | 3 | 2 | \& +\-\-\-+\-\-\-+\-\-\-+ \& <\-\-| 5 | 0>| 1 |\-\-> \& +\-\-\-+\-\-\-+\-\-\-+ \& | 6 | 7 | 8 | \& +\-\-\-+\-\-\-+\-\-\-+ \& / | \e \& v v v .Ve .PP The effect can be illustrated again by N in base\-9. .PP .Vb 5 \& 41 48\-47 32\-31 38 23\-22\-21 \& |\e | | | | | / \& 42 40 46 33 30 37 24 20 28 numbering_type => \*(Aqrotate\*(Aq \& | | | | | | N shown in base\-9 \& 43\-44\-45 34\-35\-36 25\-26\-27 \& \& 58\-57\-56 4\-\-3\-\-2 14\-13\-12 \& | | | | | \& 51\-50 55 5 0\-\-1 15 10\-11 \& | | | | \& 52\-53\-54 6\-\-7\-\-8 16\-17\-18 \& \& 67\-66\-65 76\-75\-74 85\-84\-83 \& | | | | | | \& 68 60 64 77 70 73 86 80 82 \& / | | | | | \e | \& 61\-62\-63 78 71\-72 87\-88 81 .Ve .PP Notice this means in each part the 11, 21, 31, etc, points are directed away from the middle in the same way, relative to the sub-part locations. .SH "FUNCTIONS" .IX Header "FUNCTIONS" See \*(L"\s-1FUNCTIONS\*(R"\s0 in Math::PlanePath for behaviour common to all path classes. .ie n .IP """$path = Math::PlanePath::SquareReplicate\->new ()""" 4 .el .IP "\f(CW$path = Math::PlanePath::SquareReplicate\->new ()\fR" 4 .IX Item "$path = Math::PlanePath::SquareReplicate->new ()" Create and return a new path object. .ie n .IP """($x,$y) = $path\->n_to_xy ($n)""" 4 .el .IP "\f(CW($x,$y) = $path\->n_to_xy ($n)\fR" 4 .IX Item "($x,$y) = $path->n_to_xy ($n)" Return the X,Y coordinates of point number \f(CW$n\fR on the path. Points begin at 0 and if \f(CW\*(C`$n < 0\*(C'\fR then the return is an empty list. .SS "Level Methods" .IX Subsection "Level Methods" .ie n .IP """($n_lo, $n_hi) = $path\->level_to_n_range($level)""" 4 .el .IP "\f(CW($n_lo, $n_hi) = $path\->level_to_n_range($level)\fR" 4 .IX Item "($n_lo, $n_hi) = $path->level_to_n_range($level)" Return \f(CW\*(C`(0, 9**$level \- 1)\*(C'\fR. .SH "SEE ALSO" .IX Header "SEE ALSO" Math::PlanePath, Math::PlanePath::CornerReplicate, Math::PlanePath::LTiling, Math::PlanePath::GosperReplicate, Math::PlanePath::QuintetReplicate .SH "HOME PAGE" .IX Header "HOME PAGE" .SH "LICENSE" .IX Header "LICENSE" Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Kevin Ryde .PP This file is part of Math-PlanePath. .PP Math-PlanePath is free software; you can redistribute it and/or modify it under the terms of the \s-1GNU\s0 General Public License as published by the Free Software Foundation; either version 3, or (at your option) any later version. .PP Math-PlanePath is distributed in the hope that it will be useful, but \&\s-1WITHOUT ANY WARRANTY\s0; without even the implied warranty of \s-1MERCHANTABILITY\s0 or \s-1FITNESS FOR A PARTICULAR PURPOSE.\s0 See the \s-1GNU\s0 General Public License for more details. .PP You should have received a copy of the \s-1GNU\s0 General Public License along with Math-PlanePath. If not, see .