.\" 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::CellularRule190 3pm" .TH Math::PlanePath::CellularRule190 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::CellularRule190 \-\- cellular automaton 190 and 246 points .SH "SYNOPSIS" .IX Header "SYNOPSIS" .Vb 3 \& use Math::PlanePath::CellularRule190; \& my $path = Math::PlanePath::CellularRule190\->new; \& my ($x, $y) = $path\->n_to_xy (123); .Ve .SH "DESCRIPTION" .IX Header "DESCRIPTION" This is the pattern of Stephen Wolfram's \*(L"rule 190\*(R" cellular automaton .IX Xref "Wolfram, Stephen" .Sp .RS 4 .RE .PP arranged as rows, .PP .Vb 10 \& 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 9 \& 53 54 55 56 57 58 59 60 61 62 63 64 65 8 \& 41 42 43 44 45 46 47 48 49 50 51 52 7 \& 31 32 33 34 35 36 37 38 39 40 6 \& 22 23 24 25 26 27 28 29 30 5 \& 15 16 17 18 19 20 21 4 \& 9 10 11 12 13 14 3 \& 5 6 7 8 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 Each row is 3 out of 4 cells. Even numbered rows have one point on its own at the end. Each two-row group has a step of 6 more points than the previous two-row. .PP The of rightmost N=1,4,8,14,21,etc are triangular plus quarter square, ie. .PP .Vb 3 \& Nright = triangular(Y+1) + quartersquare(Y+1) \& triangular(t) = t*(t+1)/2 \& quartersquare(t) = floor(t^2/4) .Ve .PP The rightmost N=1,8,21,40,65,etc on even rows Y=0,2,4,6,etc are the octagonal numbers k*(3k\-2). The octagonal numbers of the \*(L"second kind\*(R" N=5,16,33,56,85, etc, k*(3k+2) are a straight-ish line upwards to the left. .SS "Mirror" .IX Subsection "Mirror" The \f(CW\*(C`mirror => 1\*(C'\fR option gives the mirror image pattern which is \*(L"rule 246\*(R". It differs only in the placement of the gaps on the even rows. The point on its own is at the left instead of the right. The numbering is still left to right. .PP .Vb 10 \& 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 9 \& 53 54 55 56 57 58 59 60 61 62 63 64 65 8 \& 41 42 43 44 45 46 47 48 49 50 51 52 7 \& 31 32 33 34 35 36 37 38 39 40 6 \& 22 23 24 25 26 27 28 29 30 5 \& 15 16 17 18 19 20 21 4 \& 9 10 11 12 13 14 3 \& 5 6 7 8 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 Sometimes this small change to the pattern helps things line up better. For example plotting the Klaner-Rado sequence gives some unplotted lines up towards the right in the mirror 246 which are not visible in the plain 190. .SS "Row Ranges" .IX Subsection "Row Ranges" The left end of each row, both ordinary and mirrored, is .PP .Vb 2 \& Nleft = ((3Y+2)*Y + 4)/4 if Y even \& ((3Y+2)*Y + 3)/4 if Y odd .Ve .PP The right end is .PP .Vb 2 \& Nright = ((3Y+8)*Y + 4)/4 if Y even \& ((3Y+8)*Y + 5)/4 if Y odd \& \& = Nleft(Y+1) \- 1 ie. 1 before next Nleft .Ve .PP The row width Xmax-Xmin = 2*Y but with the gaps the number of visited points in a row is less than that, .PP .Vb 2 \& rowpoints = 3*Y/2 + 1 if Y even \& 3*(Y+1)/2 if Y odd .Ve .PP For any Y of course the Nleft to Nright difference is the number of points in the row too .PP .Vb 1 \& rowpoints = Nright \- Nleft + 1 .Ve .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 \& \& 21 22 23 24 25 26 27 28 29 5 \& 14 15 16 17 18 19 20 4 \& 8 9 10 11 12 13 3 \& 4 5 6 7 2 \& 1 2 3 1 \& 0 <\- Y=0 \& \& \-5 \-4 \-3 \-2 \-1 X=0 1 2 3 4 5 .Ve .PP The effect is to push each N rightwards by 1, and wrapping around. So the N=0,1,4,8,14,etc on the left were on the right of the default n_start=1. This also has the effect of removing the +1 in the Nright formula given above, so .PP .Vb 1 \& Nleft = triangular(Y) + quartersquare(Y) .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::CellularRule190\->new ()""" 4 .el .IP "\f(CW$path = Math::PlanePath::CellularRule190\->new ()\fR" 4 .IX Item "$path = Math::PlanePath::CellularRule190->new ()" .PD 0 .ie n .IP """$path = Math::PlanePath::CellularRule190\->new (mirror => 1, n_start => $n)""" 4 .el .IP "\f(CW$path = Math::PlanePath::CellularRule190\->new (mirror => 1, n_start => $n)\fR" 4 .IX Item "$path = Math::PlanePath::CellularRule190->new (mirror => 1, n_start => $n)" .PD 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. .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. .ie n .IP """($n_lo, $n_hi) = $path\->rect_to_n_range ($x1,$y1, $x2,$y2)""" 4 .el .IP "\f(CW($n_lo, $n_hi) = $path\->rect_to_n_range ($x1,$y1, $x2,$y2)\fR" 4 .IX Item "($n_lo, $n_hi) = $path->rect_to_n_range ($x1,$y1, $x2,$y2)" The returned range is exact, meaning \f(CW$n_lo\fR and \f(CW$n_hi\fR are the smallest and biggest in the rectangle. .SH "OEIS" .IX Header "OEIS" This pattern is in Sloane's Online Encyclopedia of Integer Sequences in a couple of forms, .Sp .RS 4 (etc) .RE .PP .Vb 5 \& A037576 whole\-row used cells as bits of a bignum \& A265688 and in binary \& A071039 1/0 used and unused cells across rows \& A118111 same \& A071041 1/0 used and unused of mirrored rule 246 \& \& n_start=0 \& A006578 N at left of each row (X=\-Y), \& and at right of each row when mirrored, \& being triangular+quartersquare .Ve .SH "SEE ALSO" .IX Header "SEE ALSO" Math::PlanePath, Math::PlanePath::CellularRule, Math::PlanePath::CellularRule54, Math::PlanePath::CellularRule57, 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, 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 .