Advertisement
fmasanori

Indian Designs

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