ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/lsys/lib/mcworter.l
Revision: 1.1
Committed: Thu Nov 6 14:31:25 2008 UTC (15 years, 6 months ago) by root
Branch: MAIN
CVS Tags: HEAD
Log Message:
*** empty log message ***

File Contents

# Content
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