Issue #10199: Fixing r86095 - svn did not like combining rename and change of directory.
This commit is contained in:
parent
4f2eaceb83
commit
77d4dc0c1b
|
@ -0,0 +1,119 @@
|
||||||
|
#!/usr/bin/env python3
|
||||||
|
""" turtle-example-suite:
|
||||||
|
|
||||||
|
xtx_lindenmayer_indian.py
|
||||||
|
|
||||||
|
Each morning women in Tamil Nadu, in southern
|
||||||
|
India, place designs, created by using rice
|
||||||
|
flour and known as kolam on the thresholds of
|
||||||
|
their homes.
|
||||||
|
|
||||||
|
These can be described by Lindenmayer systems,
|
||||||
|
which can easily be implemented with turtle
|
||||||
|
graphics and Python.
|
||||||
|
|
||||||
|
Two examples are shown here:
|
||||||
|
(1) the snake kolam
|
||||||
|
(2) anklets of Krishna
|
||||||
|
|
||||||
|
Taken from Marcia Ascher: Mathematics
|
||||||
|
Elsewhere, An Exploration of Ideas Across
|
||||||
|
Cultures
|
||||||
|
|
||||||
|
"""
|
||||||
|
################################
|
||||||
|
# Mini Lindenmayer tool
|
||||||
|
###############################
|
||||||
|
|
||||||
|
from turtle import *
|
||||||
|
|
||||||
|
def replace( seq, replacementRules, n ):
|
||||||
|
for i in range(n):
|
||||||
|
newseq = ""
|
||||||
|
for element in seq:
|
||||||
|
newseq = newseq + replacementRules.get(element,element)
|
||||||
|
seq = newseq
|
||||||
|
return seq
|
||||||
|
|
||||||
|
def draw( commands, rules ):
|
||||||
|
for b in commands:
|
||||||
|
try:
|
||||||
|
rules[b]()
|
||||||
|
except TypeError:
|
||||||
|
try:
|
||||||
|
draw(rules[b], rules)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
################################
|
||||||
|
# Example 1: Snake kolam
|
||||||
|
################################
|
||||||
|
|
||||||
|
|
||||||
|
def r():
|
||||||
|
right(45)
|
||||||
|
|
||||||
|
def l():
|
||||||
|
left(45)
|
||||||
|
|
||||||
|
def f():
|
||||||
|
forward(7.5)
|
||||||
|
|
||||||
|
snake_rules = {"-":r, "+":l, "f":f, "b":"f+f+f--f--f+f+f"}
|
||||||
|
snake_replacementRules = {"b": "b+f+b--f--b+f+b"}
|
||||||
|
snake_start = "b--f--b--f"
|
||||||
|
|
||||||
|
drawing = replace(snake_start, snake_replacementRules, 3)
|
||||||
|
|
||||||
|
reset()
|
||||||
|
speed(3)
|
||||||
|
tracer(1,0)
|
||||||
|
ht()
|
||||||
|
up()
|
||||||
|
backward(195)
|
||||||
|
down()
|
||||||
|
draw(drawing, snake_rules)
|
||||||
|
|
||||||
|
from time import sleep
|
||||||
|
sleep(3)
|
||||||
|
|
||||||
|
################################
|
||||||
|
# Example 2: Anklets of Krishna
|
||||||
|
################################
|
||||||
|
|
||||||
|
def A():
|
||||||
|
color("red")
|
||||||
|
circle(10,90)
|
||||||
|
|
||||||
|
def B():
|
||||||
|
from math import sqrt
|
||||||
|
color("black")
|
||||||
|
l = 5/sqrt(2)
|
||||||
|
forward(l)
|
||||||
|
circle(l, 270)
|
||||||
|
forward(l)
|
||||||
|
|
||||||
|
def F():
|
||||||
|
color("green")
|
||||||
|
forward(10)
|
||||||
|
|
||||||
|
krishna_rules = {"a":A, "b":B, "f":F}
|
||||||
|
krishna_replacementRules = {"a" : "afbfa", "b" : "afbfbfbfa" }
|
||||||
|
krishna_start = "fbfbfbfb"
|
||||||
|
|
||||||
|
reset()
|
||||||
|
speed(0)
|
||||||
|
tracer(3,0)
|
||||||
|
ht()
|
||||||
|
left(45)
|
||||||
|
drawing = replace(krishna_start, krishna_replacementRules, 3)
|
||||||
|
draw(drawing, krishna_rules)
|
||||||
|
tracer(1)
|
||||||
|
return "Done!"
|
||||||
|
|
||||||
|
if __name__=='__main__':
|
||||||
|
msg = main()
|
||||||
|
print(msg)
|
||||||
|
mainloop()
|
Loading…
Reference in New Issue