.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28) .\" .\" 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 turned on, 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 .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Math::PlanePath::CellularRule 3pm" .TH Math::PlanePath::CellularRule 3pm "2014-08-30" "perl v5.20.1" "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::CellularRule \-\- cellular automaton points of binary rule .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 3 \& use Math::PlanePath::CellularRule; \& my $path = Math::PlanePath::CellularRule\->new (rule => 30); \& my ($x, $y) = $path\->n_to_xy (123); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" This is the patterns of Stephen Wolfram's bit-rule based cellular automatons .IX Xref "Wolfram, Stephen" .Sp .RS 4 .RE .PP Points are numbered left to right in rows so for example .PP .Vb 1 \& rule => 30 \& \& 51 52 53 54 55 56 57 58 59 60 61 62 9 \& 44 45 46 47 48 49 50 8 \& 32 33 34 35 36 37 38 39 40 41 42 43 7 \& 27 28 29 30 31 6 \& 18 19 20 21 22 23 24 25 26 5 \& 14 15 16 17 4 \& 8 9 10 11 12 13 3 \& 5 6 7 2 \& 2 3 4 1 \& 1 <\- Y=0 \& \& \-9 \-8 \-7 \-6 \-5 \-4 \-3 \-2 \-1 X=0 1 2 3 4 5 6 7 8 9 .Ve .PP The automaton starts from a single point N=1 at the origin and grows into the rows above. The \f(CW\*(C`rule\*(C'\fR parameter controls how the 3 cells below and diagonally below produce a new cell, .PP .Vb 9 \& +\-\-\-\-\-+ \& | new | next row, Y+1 \& +\-\-\-\-\-+ \& ^ ^ ^ \& / | \e \& / | \e \& +\-\-\-\-\-+ +\-\-\-\-\-+ +\-\-\-\-\-+ \& | A | | B | | C | row Y \& +\-\-\-\-\-+ +\-\-\-\-\-+ +\-\-\-\-\-+ .Ve .PP There's 8 possible combinations of \s-1ABC\s0 being each 0 or 1. Each such combination can become 0 or 1 in the \*(L"new\*(R" cell. Those 0 or 1 for \*(L"new\*(R" is encoded as 8 bits to make a rule number 0 to 255, .PP .Vb 1 \& ABC cells below new cell bit from rule \& \& 1,1,1 \-> bit7 \& 1,1,0 \-> bit6 \& 1,0,1 \-> bit5 \& ... \& 0,0,1 \-> bit1 \& 0,0,0 \-> bit0 .Ve .PP When cells 0,0,0 become 1, ie. \f(CW\*(C`rule\*(C'\fR bit0 is 1 (an odd number), the \*(L"off\*(R" cells either side of the initial N=1 become all \*(L"on\*(R" infinitely to the sides. Or if rule bit7 for 1,1,1 is a 0 (ie. rule\ <\ 128) then they turn on and off alternately in odd and even rows. In both cases only the pyramid portion part \-Y<=X<=Y is considered for the N points but the infinite cells to the sides are included in the calculation. .PP The full set of patterns can be seen at the Math World page above, or can be printed with the \fIexamples/cellular\-rules.pl\fR program in the Math-PlanePath sources. The patterns range from simple to complex. For some the N=1 cell doesn't grow at all such as rule 0 or rule 8. Some grow to mere straight lines such as rule 2 or rule 5. Others make columns or patterns with \&\*(L"quadratic\*(R" style stepping of 1 or 2 rows, or self-similar replications such as the Sierpinski triangle of rule 18 and 60. Some rules have complicated non-repeating patterns when there's feedback across from one half to the other, such as rule 30. .PP For some rules there's specific PlanePath code which this class dispatches to, such as \f(CW\*(C`CellularRule54\*(C'\fR, \f(CW\*(C`CellularRule57\*(C'\fR, \f(CW\*(C`CellularRule190\*(C'\fR or \&\f(CW\*(C`SierpinskiTriangle\*(C'\fR (with \f(CW\*(C`n_start=1\*(C'\fR). .PP For rules without specific code the current implementation is not particularly efficient as it builds and holds onto the bit pattern for all rows through to the highest N or X,Y used. There's no doubt better ways to iterate an automaton, but this module offers the patterns in PlanePath style. .SS "N Start" .IX Subsection "N Start" The default is to number points starting N=1 as shown above. An optional \&\f(CW\*(C`n_start\*(C'\fR can give a different start, in the same pattern. For example to start at 0, .PP .Vb 1 \& n_start => 0, rule => 62 \& \& 18 19 20 21 22 23 24 25 5 \& 13 14 15 16 17 4 \& 7 8 9 10 11 12 3 \& 4 5 6 2 \& 1 2 3 1 \& 0 <\- Y=0 \& \& \-5 \-4 \-3 \-2 \-1 X=0 1 2 3 4 5 .Ve .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::CellularRule\->new (rule => 123)""" 4 .el .IP "\f(CW$path = Math::PlanePath::CellularRule\->new (rule => 123)\fR" 4 .IX Item "$path = Math::PlanePath::CellularRule->new (rule => 123)" .PD 0 .ie n .IP """$path = Math::PlanePath::CellularRule\->new (rule => 123, n_start => $n)""" 4 .el .IP "\f(CW$path = Math::PlanePath::CellularRule\->new (rule => 123, n_start => $n)\fR" 4 .IX Item "$path = Math::PlanePath::CellularRule->new (rule => 123, n_start => $n)" .PD Create and return a new path object. \f(CW\*(C`rule\*(C'\fR should be an integer 0 to 255. A \f(CW\*(C`rule\*(C'\fR should be given always. There is a default, but it's secret and likely to change. .Sp If there's specific PlanePath code implementing the pattern then the returned object is from that class and generally is not \&\f(CW\*(C`isa(\*(AqMath::PlanePath::CellularRule\*(Aq)\*(C'\fR. .ie n .IP """$n = $path\->xy_to_n ($x,$y)""" 4 .el .IP "\f(CW$n = $path\->xy_to_n ($x,$y)\fR" 4 .IX Item "$n = $path->xy_to_n ($x,$y)" Return the point number for coordinates \f(CW\*(C`$x,$y\*(C'\fR. \f(CW$x\fR and \f(CW$y\fR are each rounded to the nearest integer, which has the effect of treating each cell as a square of side 1. If \f(CW\*(C`$x,$y\*(C'\fR is outside the pyramid or on a skipped cell the return is \f(CW\*(C`undef\*(C'\fR. .SH "OEIS" .IX Header "OEIS" Entries in Sloane's Online Encyclopedia of Integer Sequences related to this path can be found in the \s-1OEIS\s0 index .Sp .RS 4 .RE .PP and in addition the following .Sp .RS 4 (etc) .RE .PP .Vb 3 \& rule=50,58,114,122,178,186,242,250, 179 \& (solid every second cell) \& A061579 permutation N at \-X,Y (mirror horizontal) .Ve .SH "SEE ALSO" .IX Header "SEE ALSO" Math::PlanePath, Math::PlanePath::CellularRule54, Math::PlanePath::CellularRule57, Math::PlanePath::CellularRule190, Math::PlanePath::SierpinskiTriangle, Math::PlanePath::PyramidRows .PP Cellular::Automata::Wolfram .PP .SH "HOME PAGE" .IX Header "HOME PAGE" .SH "LICENSE" .IX Header "LICENSE" Copyright 2011, 2012, 2013, 2014 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 .