1 |
ruleset ( // William McWorter |
2 |
|
3 |
Alien(n) => attr (delta, 360/11) X, n; |
4 |
X => [ attr (distance, distance*02^0.5) attr (distance, distance/02) -F X]f[ attr (distance, distance*02^0.5) attr (distance, distance/02) ---F X]; |
5 |
F => ; |
6 |
) |
7 |
|
8 |
ruleset ( |
9 |
// by Philippe Hurbain |
10 |
// Same as AmmanPolyColor, showing only the |
11 |
// pentagon/hexagon tiling |
12 |
|
13 |
Ammann_poly(n) => attr (delta, 360/10) X, n; |
14 |
X => attr (distance, distance*0.618034) +(36) [ -(9) attr (distance, distance*0.66) F]f[ +(196.5) attr (distance, distance*0.363) F][ +(180) Y] -(72) f[ +(180) X]; |
15 |
X => [ -(144) attr (distance, distance*0.618034) f attr (distance, distance/0.618034) X] -(108) [ -(36) attr (distance, distance*0.509) F attr (distance, distance*01.18) -(30) F][X]f[ -(153) attr (distance, distance*0.66) F] -(72) [Y]f; |
16 |
Y => attr (distance, distance*0.618034) +(72) [X][ -(36) attr (distance, distance*0.509) F]f -(144) [ -(9) attr (distance, distance*0.66) F]f[ +(180) Y][ +(196.5) attr (distance, distance*0.363) F]; |
17 |
Y => -(36) [Y]f -(144) f[ +(180) X]; |
18 |
F => f; |
19 |
) |
20 |
|
21 |
ruleset ( // William McWorter |
22 |
|
23 |
Border(n) => attr (delta, 360/4) XYXYXYX+XYXYXYX+XYXYXYX+XYXYXYX, n; |
24 |
F => ; |
25 |
X => FX+FX+FXFY-FY-; |
26 |
Y => +FX+FXFY-FY-FY; |
27 |
) |
28 |
|
29 |
ruleset ( // William McWorter |
30 |
// Dekking's boundary of the Twindragon |
31 |
|
32 |
Boundary(n) => attr (delta, 360/4) O TU Z, n; |
33 |
F => ; |
34 |
O => F O+F-T; |
35 |
P => ++F--U+F-X; |
36 |
Q => -F+V++F--Q; |
37 |
R => -F+Z FS; |
38 |
S => F W; |
39 |
T => ++F--U; |
40 |
U => ++F--Y; |
41 |
V => F S; |
42 |
W => F O+F-P; |
43 |
X => ++F--Y+F-X; |
44 |
Y => -F+R++F--Q; |
45 |
Z => -F+Z FW; |
46 |
) |
47 |
|
48 |
ruleset ( // Adrian Mariano |
49 |
|
50 |
Bush(n) => attr (delta, 360/16) ++++F, n; |
51 |
F => FF-[-F+F+F]+[+F-F-F]; |
52 |
) |
53 |
|
54 |
ruleset ( // William McWorter |
55 |
|
56 |
Cross(n) => attr (delta, 360/4) FX, n; |
57 |
F => ; |
58 |
X => FX+FX+FXFY-FY-; |
59 |
Y => +FX+FXFY-FY-FY; |
60 |
) |
61 |
|
62 |
ruleset ( // Dekking's Church |
63 |
// Advances in Math, Vol. 44, 1982, pp.78-104 |
64 |
|
65 |
Dekking(n) => attr (delta, 360/4) WZYX, n; |
66 |
F => ; |
67 |
W => FW+F-XFW-F+Z; |
68 |
X => ++F--Y-F+Z++F--Y-F+Z; |
69 |
Y => ++F--Y+F-X; |
70 |
Z => FW+F-X; |
71 |
) |
72 |
|
73 |
ruleset ( |
74 |
|
75 |
Dekking1(n) => attr (delta, 360/3) X+X+X, n; |
76 |
X => F Y+f X-F Y; |
77 |
Y => f X+F Y-f X; |
78 |
F => ; |
79 |
f => ; |
80 |
) |
81 |
|
82 |
ruleset ( // William McWorter |
83 |
|
84 |
Doublecrossmed(n) => attr (delta, 360/8) +X, n; |
85 |
X => X-F-Y-F-X+F+Y+F+X+F+Y-F-X-F-Y; |
86 |
Y => X+F+Y+F+X-F-Y-F-X-F-Y+F+X+F+Y; |
87 |
) |
88 |
|
89 |
ruleset ( // Adrian Mariano |
90 |
|
91 |
Doily(n) => attr (delta, 360/12) F--F--F--F--F--F, n; |
92 |
F => -F[--F--F]++F--F+; |
93 |
) |
94 |
|
95 |
|
96 |
ruleset ( |
97 |
|
98 |
Doily_c(n) => attr (delta, 360/12) F--F--F--F--F--F, n; // from Default.map |
99 |
F => -F[--F--F]++F--F+; |
100 |
) |
101 |
|
102 |
ruleset ( |
103 |
|
104 |
Doily1(n) => attr (delta, 360/12) F--F--F--F--F--F, n; |
105 |
F => -F[--F--F]++F[++F--F]--F+; |
106 |
) |
107 |
|
108 |
ruleset ( // Adrian Mariano |
109 |
// from The Fractal Geometry of Nature by Mandelbrot |
110 |
|
111 |
Dragon(n) => attr (delta, 360/8) FX, n; |
112 |
F => ; |
113 |
Y => +FX--FY+; |
114 |
X => -FX++FY-; |
115 |
) |
116 |
|
117 |
ruleset ( // William McWorter |
118 |
|
119 |
Dragon_wm(n) => attr (delta, 360/4) X, n; |
120 |
F => ; |
121 |
X => FX+FY; // Do first half, turn left 90 degrees, do second half |
122 |
Y => FX-FY; // Trace first half (X) backwards; Y backwards is X, |
123 |
// left turn becomes right turn, and X backwards is Y |
124 |
) |
125 |
|
126 |
ruleset ( // William McWorter |
127 |
|
128 |
Dragon1(n) => attr (delta, 360/8) X, n; |
129 |
F => ; |
130 |
X => FX+ attr (distance, distance*0.500) FZ attr (distance, distance*02.00) +FY; |
131 |
Y => FX- attr (distance, distance*0.500) FZ attr (distance, distance*02.00) -FY; |
132 |
Z => FZ; |
133 |
) |
134 |
|
135 |
ruleset ( // William McWorter |
136 |
|
137 |
Dragon_alt(n) => attr (delta, 360/8) -X+[+++ attr (distance, distance*0.5) f W--- attr (distance, distance*02^0.5) F Z]+Y, n; |
138 |
F => ; |
139 |
f => ; |
140 |
X => F X+[+++ attr (distance, distance*0.5) f W--- attr (distance, distance*02^0.5) F Z]+F Y; |
141 |
Y => F X-[--- attr (distance, distance*0.5) f W+++ attr (distance, distance*02^0.5) F Z]-F Y; |
142 |
Z => F Z; |
143 |
W => f W; |
144 |
) |
145 |
|
146 |
ruleset ( // William McWorter |
147 |
|
148 |
Dragon_alt1(n) => attr (delta, 360/8) X, n; |
149 |
F => ; |
150 |
X => FX+ attr (distance, distance*0.500) FZ attr (distance, distance*02.00) +FY; |
151 |
Y => FX- attr (distance, distance*0.500) FZ attr (distance, distance*02.00) -FY; |
152 |
Z => FZ; |
153 |
) |
154 |
|
155 |
ruleset ( // William McWorter |
156 |
|
157 |
Dragon_curd(n) => attr (delta, 360/4) S U, n; |
158 |
F => ; |
159 |
f => ; |
160 |
S => F S+f-X; |
161 |
T => ++F--U+f-X; |
162 |
U => ++F--U-f+Z; |
163 |
V => F S-f+Z; |
164 |
W => f W+F-T; |
165 |
X => ++f--Y+F-T; |
166 |
Y => ++f--Y-F+V; |
167 |
Z => f W-F+V; |
168 |
) |
169 |
|
170 |
ruleset ( // William McWorter |
171 |
|
172 |
Dragonrnd(n) => attr (delta, 360/8) X, n; |
173 |
F => ; |
174 |
X => FX+ attr (distance, distance*0.500) FZ attr (distance, distance*02.00) +FY; |
175 |
Y => FX- attr (distance, distance*0.500) FZ attr (distance, distance*02.00) -FY; |
176 |
Z => FZ; |
177 |
) |
178 |
|
179 |
ruleset ( // William McWorter |
180 |
|
181 |
Dragon_med(n) => attr (delta, 360/8) -X+[+++ attr (distance, distance*0.5) f W--- attr (distance, distance*02^0.5) F Z]+Y, n; |
182 |
F => ; |
183 |
f => ; |
184 |
X => F X+[+++ attr (distance, distance*0.5) f W--- attr (distance, distance*02^0.5) F Z]+F Y; |
185 |
Y => F X-[--- attr (distance, distance*0.5) f W+++ attr (distance, distance*02^0.5) F Z]-F Y; |
186 |
Z => F Z; |
187 |
W => f W; |
188 |
) |
189 |
|
190 |
ruleset ( // Adrian Mariano, from the Algorithmic Beauty of Plants |
191 |
// FASS curve (3x3 tiles form macrotile), Figure 1.16a p.17 |
192 |
Fass(n) => attr (delta, 360/8) -L, n; |
193 |
|
194 |
L => LF+RFR+FL-F-LFLFL-FRFR+; |
195 |
R => -LFLF+RFRFR+F+RF-LFL-FR; |
196 |
) |
197 |
|
198 |
ruleset ( // Adrian Mariano, from the Algorithmic Beauty of Plants |
199 |
// FASS curve (4x4 tiles form macrotile), Figure 1.16b p.17 |
200 |
|
201 |
Fass1(n) => attr (delta, 360/4) -L, n; |
202 |
L => LFLF+RFR+FLFL-FRF-LFL-FR+F+RF-LFL-FRFRFR+; |
203 |
R => -LFLFLF+RFR+FL-F-LF+RFR+FLF+RFRF-LFL-FRFR; |
204 |
) |
205 |
|
206 |
ruleset ( // William McWorter |
207 |
|
208 |
Frac_rhombus_tile(n) => attr (delta, 360/12) F, n; |
209 |
F => [-F++f-]+F--f+; |
210 |
f => [-F++f-]+F--f+; |
211 |
) |
212 |
|
213 |
ruleset ( // William McWorter |
214 |
// made from Moore's spacefilling curve |
215 |
|
216 |
Frame(n) => attr (delta, 360/4) YXY-YXY-YXY-YXY, n; |
217 |
F => ; |
218 |
X => FX+FX+FXFYFX+FXFY-FY-FY-; |
219 |
Y => +FX+FX+FXFY-FYFXFY-FY-FY; |
220 |
) |
221 |
|
222 |
ruleset ( |
223 |
// Allow turns of 90=360/4 degrees |
224 |
Grid(n) => attr (delta, 360/4) F, n; // Birth string is the symbol f (see text below) |
225 |
F => F[+F][-F]F; // Replacement string for f (see text below) |
226 |
) |
227 |
|
228 |
ruleset ( // William McWorter |
229 |
|
230 |
Grid1(n) => attr (delta, 360/4) X, n; |
231 |
X => Y; |
232 |
Y => F; |
233 |
F => F[+F][-F]F; |
234 |
) |
235 |
|
236 |
ruleset ( // William McWorter |
237 |
|
238 |
Grid_median(n) => attr (delta, 360/4) Z, n; |
239 |
Z => X; |
240 |
X => -[ attr (distance, distance/02) f+F+ attr (distance, distance*02) F+F+F+ attr (distance, distance/02) F]Y FW+[ attr (distance, distance/02) f+F+ attr (distance, distance*02) F+F+F+ attr (distance, distance/02) F]X FW; |
241 |
X => [ attr (distance, distance/02) f+F+ attr (distance, distance*02) F+F+F+ attr (distance, distance/02) F]X+F W[ attr (distance, distance/02) f+F+ attr (distance, distance*02) F+F+F+ attr (distance, distance/02) F]Y-; |
242 |
Y => +[ attr (distance, distance/02) f+F+ attr (distance, distance*02) F+F+F+ attr (distance, distance/02) F]X FW-[ attr (distance, distance/02) f+F+ attr (distance, distance*02) F+F+F+ attr (distance, distance/02) F]Y FW; |
243 |
Y => [ attr (distance, distance/02) f+F+ attr (distance, distance*02) F+F+F+ attr (distance, distance/02) F]Y-F W[ attr (distance, distance/02) f+F+ attr (distance, distance*02) F+F+F+ attr (distance, distance/02) F]X+; |
244 |
W => F W; |
245 |
F => ; |
246 |
f => ; |
247 |
) |
248 |
|
249 |
ruleset ( |
250 |
// Turns are 60=360/6 degrees |
251 |
Hex(n) => attr (delta, 360/6) F, n; // Birth string is f |
252 |
F => -F+F+f[+F+F]-; // Replacement string for f |
253 |
f => f f; // Replacement string for g (see text below) |
254 |
) |
255 |
|
256 |
ruleset ( |
257 |
|
258 |
Hex1(n) => attr (delta, 360/6) F, n; |
259 |
F => -F+F+F[+F+F+F]-; |
260 |
) |
261 |
|
262 |
ruleset ( // Ken Philip, from The Science of Fractal Images |
263 |
Hilbert(n) => attr (delta, 360/6) X, n; |
264 |
X => -YF+XFX+FY-; // cup interior on left during trace |
265 |
Y => +XF-YFY-FX+; // cup interior on right during trace |
266 |
|
267 |
) |
268 |
|
269 |
ruleset ( |
270 |
Hilbert1(n) => attr (delta, 360/4) Z, n; |
271 |
Z => -Y F+X F X+F Y-; |
272 |
X => -YF+XFX+FY-; |
273 |
Y => +XF-YFY-FX+; |
274 |
|
275 |
) |
276 |
|
277 |
ruleset ( |
278 |
|
279 |
Hiway(n) => attr (delta, 360/4) F X, n; |
280 |
X => F X+F Y; |
281 |
Y => F X-F Y; |
282 |
F => ; |
283 |
) |
284 |
|
285 |
ruleset ( |
286 |
|
287 |
Hiway1(n) => attr (delta, 360/8) U, n; |
288 |
F => ; |
289 |
f => ; |
290 |
U => V; |
291 |
V => FX+[+++ attr (distance, distance*0.5) f W--- attr (distance, distance*02^0.5) F Z]+F Y; |
292 |
X => F X+[+++ attr (distance, distance*0.5) f W--- attr (distance, distance*02^0.5) F Z]+F Y; |
293 |
Y => F X-[--- attr (distance, distance*0.5) f W+++ attr (distance, distance*02^0.5) F Z]-F Y; |
294 |
Z => F Z; |
295 |
W => f W; |
296 |
) |
297 |
|
298 |
ruleset ( // William McWorter |
299 |
|
300 |
Hiwayint(n) => attr (delta, 360/4) S, n; |
301 |
F => ; |
302 |
S => X+F-T; |
303 |
T => ++F--U+F-T; |
304 |
U => Z-F+V; |
305 |
V => F S-F+V; |
306 |
W => F SW; |
307 |
X => X Y; |
308 |
Y => ++F--U Y; |
309 |
Z => Z W; |
310 |
) |
311 |
|
312 |
ruleset ( |
313 |
// Smallest turn is 45=360/8 degrees |
314 |
Hiwaymed(n) => attr (delta, 360/8) -X, n; // Turn whole thing 45 degrees so that all lines of X are horizontal or vertical |
315 |
X => X+F+Y; // Do X, turn left, forward, turn left, do Y |
316 |
Y => X-F-Y; // Do X backwards |
317 |
) |
318 |
|
319 |
ruleset ( // William McWorter |
320 |
|
321 |
Hiwaymed_x(n) => attr (delta, 360/4) S, n; |
322 |
F => ; |
323 |
S => F S+F-T; |
324 |
T => +F-U+F-T; |
325 |
U => ++F--V++F--W; |
326 |
V => ++F--V-F+X; |
327 |
W => -F+Y++F--W; |
328 |
X => -F+Y-F+X; |
329 |
Y => F SF Z; |
330 |
Z => +F-UF Z; |
331 |
) |
332 |
|
333 |
ruleset ( // William McWorter |
334 |
|
335 |
Isocepent(n) => attr (delta, 360/10) W, n; |
336 |
W => ++[- attr (distance, distance*01.618033989) F attr (distance, distance/01.618033989) ++++F]F X--[++ attr (distance, distance*01.618033989) F----F]F W--; |
337 |
W => [-- attr (distance, distance*01.618033989) F++++F]F Y++; |
338 |
X => -[+ attr (distance, distance*01.618033989) F attr (distance, distance/01.618033989) ----F]F Z++[-- attr (distance, distance*01.618033989) F++++F]F Y-; |
339 |
Y => --[+ attr (distance, distance*01.618033989) F attr (distance, distance/01.6180339898) ----F]F Z++[-- attr (distance, distance*01.618033989) F++++F]F Y++; |
340 |
Y => [++ attr (distance, distance*01.618033989) F----F]F W--; |
341 |
Z => +[- attr (distance, distance*01.618033989) F attr (distance, distance/01.618033989) ++++F]F X--[++ attr (distance, distance*01.618033989) F----F]F W+; |
342 |
F => ; |
343 |
) |
344 |
|
345 |
ruleset ( // William McWorter |
346 |
|
347 |
Isocepent1(n) => attr (delta, 360/10) S, n; |
348 |
S => W; |
349 |
W => ++[- attr (distance, distance*01.618033989) F attr (distance, distance/01.618033989) ++++F]F X--[++ attr (distance, distance*01.618033989) F----F]F W--; |
350 |
W => [-- attr (distance, distance*01.618033989) F++++F]F Y++; |
351 |
X => -[+ attr (distance, distance*01.618033989) F attr (distance, distance/01.618033989) ----F]F Z++[-- attr (distance, distance*01.618033989) F++++F]F Y-; |
352 |
Y => --[+ attr (distance, distance*01.618033989) F attr (distance, distance/01.6180339898) ----F]F Z++[-- attr (distance, distance*01.618033989) F++++F]F Y++; |
353 |
Y => [++ attr (distance, distance*01.618033989) F----F]F W--; |
354 |
Z => +[- attr (distance, distance*01.618033989) F attr (distance, distance/01.618033989) ++++F]F X--[++ attr (distance, distance*01.618033989) F----F]F W+; |
355 |
F => ; |
356 |
) |
357 |
|
358 |
ruleset ( // William McWorter |
359 |
|
360 |
Isocepent2(n) => attr (delta, 360/10) S, n; |
361 |
S => Z; |
362 |
W => ++[- attr (distance, distance*01.618033989) F attr (distance, distance/01.618033989) ++++F]F X--[++ attr (distance, distance*01.618033989) F----F]F W--; |
363 |
W => [-- attr (distance, distance*01.618033989) F++++F]F Y++; |
364 |
X => -[+ attr (distance, distance*01.618033989) F attr (distance, distance/01.618033989) ----F]F Z++[-- attr (distance, distance*01.618033989) F++++F]F Y-; |
365 |
Y => --[+ attr (distance, distance*01.618033989) F attr (distance, distance/01.6180339898) ----F]F Z++[-- attr (distance, distance*01.618033989) F++++F]F Y++; |
366 |
Y => [++ attr (distance, distance*01.618033989) F----F]F W--; |
367 |
Z => +[- attr (distance, distance*01.618033989) F attr (distance, distance/01.618033989) ++++F]F X--[++ attr (distance, distance*01.618033989) F----F]F W+; |
368 |
F => ; |
369 |
) |
370 |
|
371 |
ruleset ( |
372 |
|
373 |
isocright(n) => attr (delta, 360/8) X, n; |
374 |
X => +Y-F-Y+; |
375 |
Y => -X+F+X-; |
376 |
) |
377 |
|
378 |
ruleset ( // Adrian Mariano |
379 |
|
380 |
Koch_curve(n) => attr (delta, 360/6) F, n; |
381 |
F => F+F--F+F; |
382 |
) |
383 |
|
384 |
ruleset ( // William McWorter |
385 |
// A 30-60-90 triangle dissects into three |
386 |
// congruent 30-60-90 triangles |
387 |
// This script traverses the centers of the congruent triangles |
388 |
|
389 |
Lace(n) => attr (delta, 360/12) W, n; |
390 |
W => +++X--F--ZF X+; |
391 |
X => ---W++F++YF W-; |
392 |
Y => +ZF X--F--Z+++; |
393 |
Z => -YF W++F++Y---; |
394 |
) |
395 |
|
396 |
ruleset ( // Adrian Mariano, from the Algorithmic Beauty of Plants |
397 |
// Compound leaf with alternating branches, Figure 5.12a p.130 |
398 |
|
399 |
Leaf(n) => attr (delta, 360/8) A, n; |
400 |
A => F[+X]F B; |
401 |
B => F[-Y]F A; |
402 |
X => A; |
403 |
Y => B; |
404 |
F => attr (distance, distance*01.36) F attr (distance, distance/01.36); |
405 |
) |
406 |
|
407 |
ruleset ( |
408 |
|
409 |
Leafy(n) => attr (delta, 360/50) +++++++++++++X, n; |
410 |
X => F[ attr (distance, distance*0.5) +++++++++X attr (distance, distance*0.5) F+++++++F--F|++++F------F]; |
411 |
X => -F[ attr (distance, distance*0.4) -----------!X attr (distance, distance*0.5) F+++++++F--F|++++F------F]; |
412 |
X => attr (distance, distance*0.6) X; |
413 |
) |
414 |
|
415 |
ruleset ( |
416 |
|
417 |
Lawn_in_spring(n) => attr (delta, 360/16) X, n; |
418 |
X => [+++++F-F-F Z]f X++++f Y; |
419 |
Y => [+++++F-F-F Z]f X----f Y; |
420 |
Z => W; |
421 |
W => U; |
422 |
U => [ attr (distance, distance*0.3) [+++F]f++[+++F]f++[+++F]f++[+++F]f++[+++F]f++[+++F]f++[+++F]f++[+++F]f]Z; |
423 |
F => ; |
424 |
f => ; |
425 |
) |
426 |
|
427 |
ruleset ( |
428 |
|
429 |
Maze(n) => attr (delta, 360/3) F+F+F, n; |
430 |
F => F+F F-F; |
431 |
) |
432 |
|
433 |
ruleset ( |
434 |
|
435 |
Maze_fractal(n) => attr (delta, 360/3) X, n; |
436 |
X => F Y+F YF Y-F Y; |
437 |
Y => F X-F XF X+F X; |
438 |
F => ; |
439 |
) |
440 |
|
441 |
ruleset ( // William McWorter |
442 |
|
443 |
Moore(n) => attr (delta, 360/4) X, n; |
444 |
F => ; |
445 |
X => FX+FX+FXFYFX+FXFY-FY-FY-; |
446 |
Y => +FX+FX+FXFY-FYFXFY-FY-FY; |
447 |
) |
448 |
|
449 |
ruleset ( // Adrian Mariano |
450 |
// from The Fractal Geometry of Nature by Mandelbrot |
451 |
|
452 |
Peano(n) => attr (delta, 360/4) F, n; |
453 |
F => F-F+F+F+F-F-F-F+F; |
454 |
) |
455 |
|
456 |
ruleset ( // William McWorter |
457 |
|
458 |
Peanomed(n) => attr (delta, 360/8) -X, n; |
459 |
X => X+F+X-F-X-F-X-F-X+F+X+F+X+F+X-F-X; |
460 |
) |
461 |
|
462 |
ruleset ( // William McWorter |
463 |
|
464 |
Pentant(n) => attr (delta, 360/5) X-X-X-X-X, n; |
465 |
F => ; |
466 |
X => F X-F X-F X+F Y+F Y+F X-F X; |
467 |
Y => F Y+F Y-F X-F X-F Y+F Y+F Y; |
468 |
) |
469 |
|
470 |
ruleset ( |
471 |
// Manual construction by Roger Penrose as a prelude to his development of |
472 |
// the famous Penrose tiles (the kites and darts) that tile the plane |
473 |
// only non-periodically. |
474 |
// Translated first to a "dragon curve" and finally to an L-system |
475 |
// by Joe Saverino. |
476 |
|
477 |
Penta_plexity(n) => attr (delta, 360/10) F++F++F++F++F, n; |
478 |
F => F++F++F|F-F++F; |
479 |
) |
480 |
|
481 |
ruleset ( // William McWorter |
482 |
|
483 |
Pentigree(n) => attr (delta, 360/5) F-F-F-F-F, n; |
484 |
F => F-F++F+F-F-F; |
485 |
) |
486 |
|
487 |
ruleset ( |
488 |
|
489 |
Pentive(n) => attr (delta, 360/10) W, n; |
490 |
F => ; |
491 |
W => ++FX--FW--FY++; |
492 |
X => -FZ++FY-; |
493 |
Y => --FZ++FY++FW--; |
494 |
Z => +FX--FW+; |
495 |
) |
496 |
|
497 |
ruleset ( |
498 |
|
499 |
Pentive1(n) => attr (delta, 360/10) X, n; |
500 |
F => ; |
501 |
f => ; |
502 |
X => ++F Z----F Y++F X; |
503 |
Y => +F W--f Z+; |
504 |
Z => --F X++++F W--F Z; |
505 |
W => -F Y++f X-; |
506 |
) |
507 |
|
508 |
ruleset ( |
509 |
|
510 |
Pentive2(n) => attr (delta, 360/10) X, n; |
511 |
F => ; |
512 |
X => F Y++F Z----F W++; |
513 |
Y => +F W--F U+; |
514 |
Z => ++F V----F X++F Y; |
515 |
W => F U--F V++++F X--; |
516 |
U => -F X++F Y-; |
517 |
V => --F Z++++F W--F U; |
518 |
) |
519 |
|
520 |
ruleset ( |
521 |
|
522 |
Pentive3(n) => attr (delta, 360/10) Q, n; |
523 |
F => ; |
524 |
P => --F R++++F S--F U; |
525 |
Q => F T++F R----F S++; |
526 |
R => ++F P----F Q++F T; |
527 |
S => F U--F P++++F Q--; |
528 |
T => +F U--F P+; |
529 |
U => -F Q++F T-; |
530 |
) |
531 |
|
532 |
ruleset ( // William McWorter * |
533 |
|
534 |
Penty(n) => attr (delta, 360/10) W, n; |
535 |
F => ; |
536 |
W => ++FX--FW--FY++; |
537 |
X => -FZ++FY-; |
538 |
Y => --FZ++FY++FW--; |
539 |
Z => +FX--FW+; |
540 |
) |
541 |
|
542 |
ruleset ( // William McWorter |
543 |
|
544 |
Pentl(n) => attr (delta, 360/5) F-F-F-F-F, n; |
545 |
F => F-F-F++F+F-F; |
546 |
) |
547 |
|
548 |
ruleset ( // Adrian Mariano, from the Algorithmic Beauty of Plants |
549 |
// Plant-like structure, figure 1.24d p.25 |
550 |
|
551 |
Plant(n) => attr (delta, 360/18) X, n; |
552 |
X => F[+X]F[-X]+X; |
553 |
F => FF; |
554 |
) |
555 |
|
556 |
ruleset ( |
557 |
|
558 |
Pre_lace(n) => attr (delta, 360/12) +++F W----F ZF W+, n; |
559 |
F => ; |
560 |
Y => +++F W----F ZF W+; |
561 |
X => +F ZF W----F Z+++; |
562 |
W => ---F Y++++F XF Y-; |
563 |
Z => -F XF Y++++F X---; |
564 |
) |
565 |
|
566 |
ruleset ( |
567 |
|
568 |
Rhombus_tile(n) => attr (delta, 360/12) F, n; |
569 |
F => [-F++F-]+F--F+; |
570 |
) |
571 |
|
572 |
ruleset ( // William McWorter |
573 |
// Isoceles right triangle dissects into two congruent |
574 |
// isoceles right triangles |
575 |
|
576 |
Sierpinsk(n) => attr (delta, 360/8) L, n; |
577 |
L => +R-F-R+; |
578 |
R => -L+F+L-; |
579 |
) |
580 |
|
581 |
ruleset ( // William McWorter |
582 |
|
583 |
Sierpinski(n) => attr (delta, 360/8) L--F--L--F, n; |
584 |
L => +R-F-R+; |
585 |
R => -L+F+L-; |
586 |
) |
587 |
|
588 |
ruleset ( |
589 |
|
590 |
Sierpinski1(n) => attr (delta, 360/8) Z, n; |
591 |
Z => X; |
592 |
X => +[- attr (distance, distance*0.5) f++ attr (distance, distance*02.414) f| attr (distance, distance*02^0.5) F--F--- attr (distance, distance*02^0.5) F]Y-F W-; |
593 |
X => [- attr (distance, distance*0.5) f++ attr (distance, distance*02.414) f| attr (distance, distance*02^0.5) F--F--- attr (distance, distance*02^0.5) F]Y+; |
594 |
Y => -[+ attr (distance, distance*0.5) f-- attr (distance, distance*02.414) f| attr (distance, distance*02^0.5) F++F+++ attr (distance, distance*02^0.5) F]X+F W+; |
595 |
Y => [+ attr (distance, distance*0.5) f-- attr (distance, distance*02.414) f| attr (distance, distance*02^0.5) F++F+++ attr (distance, distance*02^0.5) F]X-; |
596 |
W => F W; |
597 |
F => ; |
598 |
f => ; |
599 |
) |
600 |
|
601 |
ruleset ( |
602 |
|
603 |
Sierpinski_carpet(n) => attr (delta, 360/4) F, n; |
604 |
F => F+F-F-F-f+F+F+F-F; |
605 |
f => f ff; |
606 |
) |
607 |
|
608 |
ruleset ( |
609 |
// All turns are multiples of 60=360/6 degrees |
610 |
Snowflake(n) => attr (delta, 360/6) F--F--F, n; // Draw clockwise a ring of three Snowflakes |
611 |
F => F+F--F+F; // Forward, turn left, forward, turn left, turn left, ... , forward |
612 |
) |
613 |
|
614 |
ruleset ( // by Herb Savage |
615 |
// based on Martin Gardner's "Penrose Tiles to Trapdoor Ciphers" |
616 |
// This is an example of a "reptile" |
617 |
|
618 |
Sphinx(n) => attr (delta, 360/6) X, n; |
619 |
X => +FF-YFF+FF--FFF|X|F--YFFFYFFF|; |
620 |
Y => -FF+XFF-FF++FFF|Y|F++XFFFXFFF|; |
621 |
F => ff; |
622 |
f => ff; |
623 |
) |
624 |
|
625 |
ruleset ( // Adrian Mariano |
626 |
|
627 |
Square_gasket(n) => attr (delta, 360/4) X, n; |
628 |
X => +F XF+F XF+F XF+F XF; |
629 |
F => F F; |
630 |
) |
631 |
|
632 |
ruleset ( |
633 |
// by Philippe Hurbain |
634 |
// Penrose's stars and pentagons, generated from |
635 |
// decomposition rules |
636 |
// u is the star, v is the boat, w is the thin rhombus |
637 |
// x, y and z are the pentagons |
638 |
|
639 |
Stars_pentas(n) => attr (delta, 360/10) U, n; |
640 |
U => attr (distance, distance*0.381966) [V]F[|Y][-U]++F|+[V]F[|Y]++F|+[V]F[|Y]++F|+; |
641 |
U => [V]F[|Y]++F|+[V]F[|Y]++F; |
642 |
V => attr (distance, distance*0.381966) [V]F[|Y]++F|+[V]F[|Y]-[U]F-F|+[V]F[|Y]++F; |
643 |
W => attr (distance, distance*0.381966) f++[U]F|+F-F|+[V]F[|Y]; |
644 |
Y => attr (distance, distance*0.381966) [X][Y][W]F[|!Y]++F++[Y][W]F[|!Y]++F++[Z]F; |
645 |
X => attr (distance, distance*0.381966) f++f++[!X][!Z]F--[!Z]F--[!Z]F--[!Z]F--[!Z]F; |
646 |
Z => attr (distance, distance*0.381966) [Z][X]F++[Z]F++[W][Y]F[|!Y]++F++[Z]F; |
647 |
F => f; |
648 |
) |
649 |
|
650 |
ruleset ( // William McWorter |
651 |
// Strikethrough S |
652 |
|
653 |
Strike_s(n) => attr (delta, 360/4) UW, n; |
654 |
F => ; |
655 |
U => FU+F-V; |
656 |
V => ++F--W++F--Z; |
657 |
W => ++F--W-F+X; |
658 |
X => FUFY; |
659 |
Y => +F-VFY; |
660 |
Z => -F+X--F++Z; |
661 |
) |
662 |
|
663 |
ruleset ( // William McWorter |
664 |
// from Davis and Knuth. Journal of |
665 |
// Rec. Math. vol. 3, 1970, pages 61-81 |
666 |
|
667 |
Terdragon(n) => attr (delta, 360/3) F, n; |
668 |
F => F+F-F; |
669 |
) |
670 |
|
671 |
ruleset ( // William McWorter |
672 |
// from Davis and Knuth. Journal of |
673 |
// Rec. Math. vol. 3, 1970, pages 61-81 |
674 |
|
675 |
Terdragon_c(n) => attr (delta, 360/3) F+F-F, n; |
676 |
F => F+F-F; |
677 |
) |
678 |
|
679 |
ruleset ( |
680 |
|
681 |
Terdragon1(n) => attr (delta, 360/3) X, n; |
682 |
X => Y; |
683 |
Y => F+F-F; |
684 |
F => F+F-F; |
685 |
) |
686 |
|
687 |
ruleset ( // William McWorter |
688 |
// median terdragon |
689 |
|
690 |
Terdragn_m(n) => attr (delta, 360/6) X, n; |
691 |
X => X+F+X-F-X; |
692 |
) |
693 |
|
694 |
ruleset ( |
695 |
|
696 |
Three_tile(n) => attr (delta, 360/12) [U] attr (distance, distance*03^0.5) %, n; |
697 |
% => U; |
698 |
U => [+++ attr (distance, distance/03^0.5) F---- attr (distance, distance*02) F]F X; |
699 |
X => +++[--- attr (distance, distance/03^0.5) F++++ attr (distance, distance*02) F]F Y----[- attr (distance, distance*02) attr (distance, distance/03^0.5) F++++ attr (distance, distance/02) F]F Z[--- attr (distance, distance/03^0.5) F++++ attr (distance, distance*02) F]F Y+; |
700 |
Y => ---[+++ attr (distance, distance/03^0.5) F---- attr (distance, distance*02) F]F X++++[+ attr (distance, distance*02) attr (distance, distance/03^0.5) F---- attr (distance, distance/02) F]F W[+++ attr (distance, distance/03^0.5) F---- attr (distance, distance*02) F]F X-; |
701 |
Z => -[+ attr (distance, distance*02) attr (distance, distance/03^0.5) F---- attr (distance, distance/02) F]F W[+++ attr (distance, distance/03^0.5) F---- attr (distance, distance*02) F]F X++++[+ attr (distance, distance*02) attr (distance, distance/03^0.5) F---- attr (distance, distance/02) F]F W---; |
702 |
W => +[- attr (distance, distance*02) attr (distance, distance/03^0.5) F++++ attr (distance, distance/02) F]F Z[--- attr (distance, distance/03^0.5) F++++ attr (distance, distance*02) F]F Y----[- attr (distance, distance*02) attr (distance, distance/03^0.5) F++++ attr (distance, distance/02) F]F Z+++; |
703 |
F => ; |
704 |
) |
705 |
|
706 |
ruleset ( |
707 |
|
708 |
Three_tile_med(n) => attr (delta, 360/12) U, n; |
709 |
U => [++++f+++++ attr (distance, distance*01.366) F+++ attr (distance, distance*03^0.5) F+++++ attr (distance, distance*02) attr (distance, distance/03^0.5) F]X; |
710 |
X => +++[----f----- attr (distance, distance*01.366) F--- attr (distance, distance*03^0.5) F----- attr (distance, distance*02) attr (distance, distance/03^0.5) F]Y--F P--; |
711 |
X => [--f+++++ attr (distance, distance*01.366) F+++ attr (distance, distance*03^0.5) F+++++ attr (distance, distance*02) attr (distance, distance/03^0.5) F]Z FP; |
712 |
X => [----f----- attr (distance, distance*01.366) F--- attr (distance, distance*03^0.5) F----- attr (distance, distance*02) attr (distance, distance/03^0.5) F]Y+; |
713 |
Y => ---[++++f+++++ attr (distance, distance*01.366) F+++ attr (distance, distance*03^0.5) F+++++ attr (distance, distance*02) attr (distance, distance/03^0.5) F]X++F P++; |
714 |
Y => [++f----- attr (distance, distance*01.366) F--- attr (distance, distance*03^0.5) F----- attr (distance, distance*02) attr (distance, distance/03^0.5) F]W FP; |
715 |
Y => [++++f+++++ attr (distance, distance*01.366) F+++ attr (distance, distance*03^0.5) F+++++ attr (distance, distance*02) attr (distance, distance/03^0.5) F]X-; |
716 |
Z => -[++f----- attr (distance, distance*01.366) F--- attr (distance, distance*03^0.5) F----- attr (distance, distance*02) attr (distance, distance/03^0.5) F]W FP; |
717 |
Z => [++++f+++++ attr (distance, distance*01.366) F+++ attr (distance, distance*03^0.5) F+++++ attr (distance, distance*02) attr (distance, distance/03^0.5) F]X++F P++; |
718 |
Z => [++f----- attr (distance, distance*01.366) F--- attr (distance, distance*03^0.5) F----- attr (distance, distance*02) attr (distance, distance/03^0.5) F]W---; |
719 |
W => +[--f+++++ attr (distance, distance*01.366) F+++ attr (distance, distance*03^0.5) F+++++ attr (distance, distance*02) attr (distance, distance/03^0.5) F]Z FP; |
720 |
W => [----f----- attr (distance, distance*01.366) F--- attr (distance, distance*03^0.5) F----- attr (distance, distance*02) attr (distance, distance/03^0.5) F]Y--F P--; |
721 |
W => [--f+++++ attr (distance, distance*01.366) F+++ attr (distance, distance*03^0.5) F+++++ attr (distance, distance*02) attr (distance, distance/03^0.5) F]Z+++; |
722 |
P => F P; |
723 |
F => ; |
724 |
f => ; |
725 |
) |
726 |
|
727 |
ruleset ( |
728 |
|
729 |
Three_tile_med1(n) => attr (delta, 360/12) U---F P---V---F P, n; |
730 |
V => [++f----- attr (distance, distance*01.366) F--- attr (distance, distance*03^0.5) F----- attr (distance, distance*02) attr (distance, distance/03^0.5) F]W; |
731 |
U => [++++f+++++ attr (distance, distance*01.366) F+++ attr (distance, distance*03^0.5) F+++++ attr (distance, distance*02) attr (distance, distance/03^0.5) F]X; |
732 |
X => +++[----f----- attr (distance, distance*01.366) F--- attr (distance, distance*03^0.5) F----- attr (distance, distance*02) attr (distance, distance/03^0.5) F]Y--F P--; |
733 |
X => [--f+++++ attr (distance, distance*01.366) F+++ attr (distance, distance*03^0.5) F+++++ attr (distance, distance*02) attr (distance, distance/03^0.5) F]Z FP; |
734 |
X => [----f----- attr (distance, distance*01.366) F--- attr (distance, distance*03^0.5) F----- attr (distance, distance*02) attr (distance, distance/03^0.5) F]Y+; |
735 |
Y => ---[++++f+++++ attr (distance, distance*01.366) F+++ attr (distance, distance*03^0.5) F+++++ attr (distance, distance*02) attr (distance, distance/03^0.5) F]X++F P++; |
736 |
Y => [++f----- attr (distance, distance*01.366) F--- attr (distance, distance*03^0.5) F----- attr (distance, distance*02) attr (distance, distance/03^0.5) F]W FP; |
737 |
Y => [++++f+++++ attr (distance, distance*01.366) F+++ attr (distance, distance*03^0.5) F+++++ attr (distance, distance*02) attr (distance, distance/03^0.5) F]X-; |
738 |
Z => -[++f----- attr (distance, distance*01.366) F--- attr (distance, distance*03^0.5) F----- attr (distance, distance*02) attr (distance, distance/03^0.5) F]W FP; |
739 |
Z => [++++f+++++ attr (distance, distance*01.366) F+++ attr (distance, distance*03^0.5) F+++++ attr (distance, distance*02) attr (distance, distance/03^0.5) F]X++F P++; |
740 |
Z => [++f----- attr (distance, distance*01.366) F--- attr (distance, distance*03^0.5) F----- attr (distance, distance*02) attr (distance, distance/03^0.5) F]W---; |
741 |
W => +[--f+++++ attr (distance, distance*01.366) F+++ attr (distance, distance*03^0.5) F+++++ attr (distance, distance*02) attr (distance, distance/03^0.5) F]Z FP; |
742 |
W => [----f----- attr (distance, distance*01.366) F--- attr (distance, distance*03^0.5) F----- attr (distance, distance*02) attr (distance, distance/03^0.5) F]Y--F P--; |
743 |
W => [--f+++++ attr (distance, distance*01.366) F+++ attr (distance, distance*03^0.5) F+++++ attr (distance, distance*02) attr (distance, distance/03^0.5) F]Z+++; |
744 |
P => F P; |
745 |
F => ; |
746 |
f => ; |
747 |
) |
748 |
|
749 |
ruleset ( |
750 |
|
751 |
Tiling(n) => attr (delta, 360/6) X, n; |
752 |
X => F-F-F+F+F X++F-F-F+F+F X--F-F-F+F+F X; |
753 |
F => ; |
754 |
) |
755 |
|
756 |
ruleset ( |
757 |
|
758 |
Trigrid(n) => attr (delta, 360/3) F, n; |
759 |
F => F+F-F-F F+F+F-F; |
760 |
) |
761 |
|
762 |
ruleset ( |
763 |
|
764 |
Trigrid1(n) => attr (delta, 360/6) X, n; |
765 |
X => F Y[+F Y][--F Y]F Y; |
766 |
Y => F X[++F X][-F X]F X; |
767 |
F => ; |
768 |
) |
769 |
|
770 |
ruleset ( // William McWorter |
771 |
|
772 |
Tripeanomed(n) => attr (delta, 360/6) X, n; |
773 |
X => X+F+X-F-X-F-X+F+X+F+X-F-X; |
774 |
) |
775 |
|
776 |
ruleset ( // William McWorter |
777 |
|
778 |
Tri_peano(n) => attr (delta, 360/3) F, n; |
779 |
F => F+F-F-F+F+F-F; |
780 |
) |
781 |
|
782 |
ruleset ( |
783 |
|
784 |
Twin_dragon_curd(n) => attr (delta, 360/4) F X+F X, n; |
785 |
X => F X+f Y; |
786 |
Y => F X-f Y; |
787 |
F => ; |
788 |
f => ; |
789 |
) |
790 |
|
791 |
ruleset ( |
792 |
|
793 |
Twin_dragon_curd1(n) => attr (delta, 360/4) F X+F X, n; |
794 |
X => F X+f Y; |
795 |
Y => f X-F Y; |
796 |
F => ; |
797 |
f => ; |
798 |
) |
799 |
|
800 |
ruleset ( |
801 |
|
802 |
Two_tile(n) => attr (delta, 360/8) [Z] attr (distance, distance*02^0.5) A, n; |
803 |
A => Z; |
804 |
Z => [+ attr (distance, distance*02^0.5) attr (distance, distance/02) F--F]F X; |
805 |
X => +[- attr (distance, distance*02^0.5) attr (distance, distance/02) F++F]F Y--[- attr (distance, distance*02^0.5) attr (distance, distance/02) F++F]F Y+; |
806 |
Y => -[+ attr (distance, distance*02^0.5) attr (distance, distance/02) F--F]F X++[+ attr (distance, distance*02^0.5) attr (distance, distance/02) F--F]F X-; |
807 |
F => ; |
808 |
) |
809 |
|
810 |
ruleset ( // William McWorter |
811 |
|
812 |
Untitled(n) => attr (delta, 360/4) X, n; |
813 |
F => ; |
814 |
X => F X-F Y-F X+F Y+F X+F Y-F X-F Y+; |
815 |
Y => -F X+F Y+F X-F Y-F X-F Y+F X+F Y; |
816 |
) |
817 |
|
818 |
ruleset ( // William McWorter |
819 |
|
820 |
Untitledmed(n) => attr (delta, 360/8) +X, n; |
821 |
X => X-F-Y-F-X+F+Y+F+X+F+Y-F-X-F-Y; |
822 |
Y => X+F+Y+F+X-F-Y-F-X-F-Y+F+X+F+Y; |
823 |
) |
824 |
|
825 |
ruleset ( |
826 |
|
827 |
Weed(n) => attr (delta, 360/50) +++++++++++++X, n; |
828 |
X => F[ attr (distance, distance*0.5) +++++++++X]-F[ attr (distance, distance*0.4) -----------!X]X; |
829 |
) |
830 |
|
831 |
ruleset ( |
832 |
|
833 |
Weed1(n) => attr (delta, 360/50) +++++++++++++X, n; |
834 |
X => F[ attr (distance, distance*0.5) +++++++++X]-F[ attr (distance, distance*0.4) -----------!X] attr (distance, distance*0.6) X; |
835 |
) |
836 |
|
837 |
ruleset ( // by Morgan Savage |
838 |
// Try order 13 and color cycle in both 256 and 16 color modes |
839 |
|
840 |
Vertigo(n) => attr (delta, 360/46) X, n; |
841 |
X => XF+ attr (distance, distance*0.9997) X; |
842 |
) |
843 |
|
844 |
ruleset ( // by Herb Savage |
845 |
// based on Martin Gardner's "Penrose Tiles to Trapdoor Ciphers", |
846 |
// A spiral tiling by Heinz Voderberg |
847 |
|
848 |
Voderberg_tile(n) => attr (delta, 360/30) -(84.1) A -(96) attr (distance, distance*04.783386117) f attr (distance, distance/04.783386117) +(96) A, n; |
849 |
A => X -(12) X -(12) X -(12) X -(12) X -(12) X -(12) X -(12) X -(12) X -(12) X -(12) X -(12) X -(12) X -(12) X -(12) X -(12) Z; |
850 |
X => [F -(78) F -(46.37236) attr (distance, distance*03.393427) F attr (distance, distance/03.393427) +(46.37236) F -(114) [ -(168) X -(24) Y]F -(78) F -(46.37236) attr (distance, distance*03.393427) F attr (distance, distance/03.393427) +(46.37236) F +(78) F]; |
851 |
Y => [F -(78) F -(46.37236) attr (distance, distance*03.393427) F attr (distance, distance/03.393427) +(46.37236) F +(78) F -(168) [ -(192) Y]F -(78) F -(46.37236) attr (distance, distance*03.393427) F attr (distance, distance/03.393427) +(46.37236) F]; |
852 |
Z => [F -(78) F -(46.37236) attr (distance, distance*03.393427) F attr (distance, distance/03.393427) +(46.37236) F -(114) F -(78) F -(46.37236) attr (distance, distance*03.393427) F attr (distance, distance/03.393427) +(46.37236) F +(78) F]; |
853 |
) |
854 |
|
855 |
ruleset ( // William McWorter |
856 |
|
857 |
Xmastree(n) => attr (delta, 360/10) P, n; |
858 |
F => ; |
859 |
P => --F R++++F S--F U; |
860 |
Q => F T++F R----F S++; |
861 |
R => ++F P----F Q++F T; |
862 |
S => F U--F P++++F Q--; |
863 |
T => +F U--F P+; |
864 |
U => -F Q++F T-; |
865 |
) |
866 |
|
867 |
|
868 |
ruleset ( // William McWorter |
869 |
|
870 |
Xmastree1(n) => attr (delta, 360/10) W, n; |
871 |
F => ; |
872 |
W => ++FX--FW--FY++; |
873 |
X => -FZ++FY-; |
874 |
Y => --FZ++FY++FW--; |
875 |
Z => +FX--FW+; |
876 |
) |
877 |
|
878 |
|