summaryrefslogtreecommitdiffstats
path: root/Lib/turtledemo/tree.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/turtledemo/tree.py')
-rw-r--r--Lib/turtledemo/tree.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/Lib/turtledemo/tree.py b/Lib/turtledemo/tree.py
new file mode 100644
index 0000000..9c0b1f7
--- /dev/null
+++ b/Lib/turtledemo/tree.py
@@ -0,0 +1,63 @@
+#!/usr/bin/env python3
+""" 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.getscreen().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()