symbian-qemu-0.9.1-12/python-2.6.1/Demo/turtle/tdemo_lindenmayer_indian.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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()