summaryrefslogtreecommitdiff
path: root/Demo/turtle/tdemo_tree.py
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2008-06-04 06:29:55 +0000
committerMartin v. Löwis <martin@v.loewis.de>2008-06-04 06:29:55 +0000
commit8718459f0f7f42f9fedf1f7525c52bd7ac16b51b (patch)
tree99aa2c451de1149763fee3b11906524d87a0ef5e /Demo/turtle/tdemo_tree.py
parent4ed3ed13c5c82f4b46d633cb7f61d6218d6ed320 (diff)
downloadcpython-git-8718459f0f7f42f9fedf1f7525c52bd7ac16b51b.tar.gz
Patch #1513695: New turtle module, with demos.
Diffstat (limited to 'Demo/turtle/tdemo_tree.py')
-rw-r--r--Demo/turtle/tdemo_tree.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/Demo/turtle/tdemo_tree.py b/Demo/turtle/tdemo_tree.py
new file mode 100644
index 0000000000..3c7178cdef
--- /dev/null
+++ b/Demo/turtle/tdemo_tree.py
@@ -0,0 +1,63 @@
+#!/usr/bin/python
+""" turtle-example-suite:
+
+ tdemo_tree.py
+
+Displays a 'breadth-first-tree' - in contrast
+to the classical Logo tree drawing programs,
+which use a depth-first-algorithm.
+
+Uses:
+(1) a tree-generator, where the drawing is
+quasi the side-effect, whereas the generator
+always yields None.
+(2) Turtle-cloning: At each branching point the
+current pen is cloned. So in the end there
+are 1024 turtles.
+"""
+from turtle import Turtle, mainloop
+from time import clock
+
+def tree(plist, l, a, f):
+ """ plist is list of pens
+ l is length of branch
+ a is half of the angle between 2 branches
+ f is factor by which branch is shortened
+ from level to level."""
+ if l > 3:
+ lst = []
+ for p in plist:
+ p.forward(l)
+ q = p.clone()
+ p.left(a)
+ q.right(a)
+ lst.append(p)
+ lst.append(q)
+ for x in tree(lst, l*f, a, f):
+ yield None
+
+def maketree():
+ p = Turtle()
+ p.setundobuffer(None)
+ p.hideturtle()
+ p.speed(0)
+ p.tracer(30,0)
+ p.left(90)
+ p.penup()
+ p.forward(-210)
+ p.pendown()
+ t = tree([p], 200, 65, 0.6375)
+ for x in t:
+ pass
+ print len(p.getscreen().turtles())
+
+def main():
+ a=clock()
+ maketree()
+ b=clock()
+ return "done: %.2f sec." % (b-a)
+
+if __name__ == "__main__":
+ msg = main()
+ print msg
+ mainloop()