~pythonregexp2.7/python/issue2636-12

« back to all changes in this revision

Viewing changes to Demo/turtle/tdemo_lindenmayer_indian.py

  • Committer: Jeffrey C. "The TimeHorse" Jacobs
  • Date: 2008-06-09 14:52:42 UTC
  • mfrom: (39033.1.3 Regexp-2.6)
  • Revision ID: darklord@timehorse.com-20080609145242-9m268zc6u87rp1vp
Merged in changes from the core Regexp branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/python
 
2
"""       turtle-example-suite:
 
3
 
 
4
        xtx_lindenmayer_indian.py
 
5
 
 
6
Each morning women in Tamil Nadu, in southern
 
7
India, place designs, created by using rice
 
8
flour and known as kolam on the thresholds of
 
9
their homes.
 
10
 
 
11
These can be described by Lindenmayer systems,
 
12
which can easily be implemented with turtle
 
13
graphics and Python.
 
14
 
 
15
Two examples are shown here:
 
16
(1) the snake kolam
 
17
(2) anklets of Krishna
 
18
 
 
19
Taken from Marcia Ascher: Mathematics
 
20
Elsewhere, An Exploration of Ideas Across
 
21
Cultures
 
22
 
 
23
"""
 
24
################################
 
25
# Mini Lindenmayer tool
 
26
###############################
 
27
 
 
28
from turtle import *
 
29
 
 
30
def replace( seq, replacementRules, n ):
 
31
    for i in range(n):
 
32
        newseq = ""
 
33
        for element in seq:
 
34
            newseq = newseq + replacementRules.get(element,element)
 
35
        seq = newseq
 
36
    return seq
 
37
 
 
38
def draw( commands, rules ):
 
39
    for b in commands:
 
40
        try:
 
41
            rules[b]()
 
42
        except TypeError:
 
43
            try:
 
44
                draw(rules[b], rules)
 
45
            except:
 
46
                pass
 
47
 
 
48
 
 
49
def main():
 
50
    ################################
 
51
    # Example 1: Snake kolam
 
52
    ################################
 
53
 
 
54
 
 
55
    def r():
 
56
        right(45)
 
57
 
 
58
    def l():
 
59
        left(45)
 
60
 
 
61
    def f():
 
62
        forward(7.5)
 
63
 
 
64
    snake_rules = {"-":r, "+":l, "f":f, "b":"f+f+f--f--f+f+f"}
 
65
    snake_replacementRules = {"b": "b+f+b--f--b+f+b"}
 
66
    snake_start = "b--f--b--f"
 
67
 
 
68
    drawing = replace(snake_start, snake_replacementRules, 3)
 
69
 
 
70
    reset()
 
71
    speed(3)
 
72
    tracer(1,0)
 
73
    ht()
 
74
    up()
 
75
    backward(195)
 
76
    down()
 
77
    draw(drawing, snake_rules)
 
78
 
 
79
    from time import sleep
 
80
    sleep(3)
 
81
 
 
82
    ################################
 
83
    # Example 2: Anklets of Krishna
 
84
    ################################
 
85
 
 
86
    def A():
 
87
        color("red")
 
88
        circle(10,90)
 
89
 
 
90
    def B():
 
91
        from math import sqrt
 
92
        color("black")
 
93
        l = 5/sqrt(2)
 
94
        forward(l)
 
95
        circle(l, 270)
 
96
        forward(l)
 
97
 
 
98
    def F():
 
99
        color("green")
 
100
        forward(10)
 
101
 
 
102
    krishna_rules = {"a":A, "b":B, "f":F}
 
103
    krishna_replacementRules = {"a" : "afbfa", "b" : "afbfbfbfa" }
 
104
    krishna_start = "fbfbfbfb"
 
105
 
 
106
    reset()
 
107
    speed(0)
 
108
    tracer(3,0)
 
109
    ht()
 
110
    left(45)
 
111
    drawing = replace(krishna_start, krishna_replacementRules, 3)
 
112
    draw(drawing, krishna_rules)
 
113
    tracer(1)
 
114
    return "Done!"
 
115
 
 
116
if __name__=='__main__':
 
117
    msg = main()
 
118
    print msg
 
119
    mainloop()