1Math::PlanePath::CellulUasreRrulCeo1n9t0r(i3b)uted PerlMDaotchu:m:ePnltaanteiPoanth::CellularRule190(3)
2
3
4
6 Math::PlanePath::CellularRule190 -- cellular automaton 190 and 246
7 points
8
10 use Math::PlanePath::CellularRule190;
11 my $path = Math::PlanePath::CellularRule190->new;
12 my ($x, $y) = $path->n_to_xy (123);
13
15 This is the pattern of Stephen Wolfram's "rule 190" cellular automaton
16
17 <http://mathworld.wolfram.com/Rule190.html>
18
19 arranged as rows,
20
21 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 9
22 53 54 55 56 57 58 59 60 61 62 63 64 65 8
23 41 42 43 44 45 46 47 48 49 50 51 52 7
24 31 32 33 34 35 36 37 38 39 40 6
25 22 23 24 25 26 27 28 29 30 5
26 15 16 17 18 19 20 21 4
27 9 10 11 12 13 14 3
28 5 6 7 8 2
29 2 3 4 1
30 1 <- Y=0
31
32 -9 -8 -7 -6 -5 -4 -3 -2 -1 X=0 1 2 3 4 5 6 7 8 9
33
34 Each row is 3 out of 4 cells. Even numbered rows have one point on its
35 own at the end. Each two-row group has a step of 6 more points than
36 the previous two-row.
37
38 The of rightmost N=1,4,8,14,21,etc are triangular plus quarter square,
39 ie.
40
41 Nright = triangular(Y+1) + quartersquare(Y+1)
42 triangular(t) = t*(t+1)/2
43 quartersquare(t) = floor(t^2/4)
44
45 The rightmost N=1,8,21,40,65,etc on even rows Y=0,2,4,6,etc are the
46 octagonal numbers k*(3k-2). The octagonal numbers of the "second kind"
47 N=5,16,33,56,85, etc, k*(3k+2) are a straight-ish line upwards to the
48 left.
49
50 Mirror
51 The "mirror => 1" option gives the mirror image pattern which is "rule
52 246". It differs only in the placement of the gaps on the even rows.
53 The point on its own is at the left instead of the right. The
54 numbering is still left to right.
55
56 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 9
57 53 54 55 56 57 58 59 60 61 62 63 64 65 8
58 41 42 43 44 45 46 47 48 49 50 51 52 7
59 31 32 33 34 35 36 37 38 39 40 6
60 22 23 24 25 26 27 28 29 30 5
61 15 16 17 18 19 20 21 4
62 9 10 11 12 13 14 3
63 5 6 7 8 2
64 2 3 4 1
65 1 <- Y=0
66
67 -9 -8 -7 -6 -5 -4 -3 -2 -1 X=0 1 2 3 4 5 6 7 8 9
68
69 Sometimes this small change to the pattern helps things line up better.
70 For example plotting the Klaner-Rado sequence gives some unplotted
71 lines up towards the right in the mirror 246 which are not visible in
72 the plain 190.
73
74 Row Ranges
75 The left end of each row, both ordinary and mirrored, is
76
77 Nleft = ((3Y+2)*Y + 4)/4 if Y even
78 ((3Y+2)*Y + 3)/4 if Y odd
79
80 The right end is
81
82 Nright = ((3Y+8)*Y + 4)/4 if Y even
83 ((3Y+8)*Y + 5)/4 if Y odd
84
85 = Nleft(Y+1) - 1 ie. 1 before next Nleft
86
87 The row width Xmax-Xmin = 2*Y but with the gaps the number of visited
88 points in a row is less than that,
89
90 rowpoints = 3*Y/2 + 1 if Y even
91 3*(Y+1)/2 if Y odd
92
93 For any Y of course the Nleft to Nright difference is the number of
94 points in the row too
95
96 rowpoints = Nright - Nleft + 1
97
98 N Start
99 The default is to number points starting N=1 as shown above. An
100 optional "n_start" can give a different start, in the same pattern.
101 For example to start at 0,
102
103 n_start => 0
104
105 21 22 23 24 25 26 27 28 29 5
106 14 15 16 17 18 19 20 4
107 8 9 10 11 12 13 3
108 4 5 6 7 2
109 1 2 3 1
110 0 <- Y=0
111
112 -5 -4 -3 -2 -1 X=0 1 2 3 4 5
113
114 The effect is to push each N rightwards by 1, and wrapping around. So
115 the N=0,1,4,8,14,etc on the left were on the right of the default
116 n_start=1. This also has the effect of removing the +1 in the Nright
117 formula given above, so
118
119 Nleft = triangular(Y) + quartersquare(Y)
120
122 See "FUNCTIONS" in Math::PlanePath for behaviour common to all path
123 classes.
124
125 "$path = Math::PlanePath::CellularRule190->new ()"
126 "$path = Math::PlanePath::CellularRule190->new (mirror => 1, n_start =>
127 $n)"
128 Create and return a new path object.
129
130 "($x,$y) = $path->n_to_xy ($n)"
131 Return the X,Y coordinates of point number $n on the path.
132
133 "$n = $path->xy_to_n ($x,$y)"
134 Return the point number for coordinates "$x,$y". $x and $y are
135 each rounded to the nearest integer, which has the effect of
136 treating each cell as a square of side 1. If "$x,$y" is outside
137 the pyramid or on a skipped cell the return is "undef".
138
139 "($n_lo, $n_hi) = $path->rect_to_n_range ($x1,$y1, $x2,$y2)"
140 The returned range is exact, meaning $n_lo and $n_hi are the
141 smallest and biggest in the rectangle.
142
144 This pattern is in Sloane's Online Encyclopedia of Integer Sequences in
145 a couple of forms,
146
147 <http://oeis.org/A037576> (etc)
148
149 A037576 whole-row used cells as bits of a bignum
150 A071039 \ 1/0 used and unused cells across rows
151 A118111 /
152 A071041 1/0 used and unused of mirrored rule 246
153
154 n_start=0
155 A006578 N at left of each row (X=-Y),
156 and at right of each row when mirrored,
157 being triangular+quartersquare
158
160 Math::PlanePath, Math::PlanePath::CellularRule,
161 Math::PlanePath::CellularRule54, Math::PlanePath::CellularRule57,
162 Math::PlanePath::PyramidRows
163
164 Cellular::Automata::Wolfram
165
166 <http://mathworld.wolfram.com/Rule190.html>
167
169 <http://user42.tuxfamily.org/math-planepath/index.html>
170
172 Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 Kevin Ryde
173
174 This file is part of Math-PlanePath.
175
176 Math-PlanePath is free software; you can redistribute it and/or modify
177 it under the terms of the GNU General Public License as published by
178 the Free Software Foundation; either version 3, or (at your option) any
179 later version.
180
181 Math-PlanePath is distributed in the hope that it will be useful, but
182 WITHOUT ANY WARRANTY; without even the implied warranty of
183 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
184 General Public License for more details.
185
186 You should have received a copy of the GNU General Public License along
187 with Math-PlanePath. If not, see <http://www.gnu.org/licenses/>.
188
189
190
191perl v5.28.1 2017-12-03Math::PlanePath::CellularRule190(3)