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

# User Rev Content
1 root 1.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