blob: 6fc87359af10cf6e512ad8932ec7f05edc6a8d2b [file] [log] [blame]
Benjamin Peterson9cf41d02010-03-11 22:33:25 +00001#!/usr/bin/env python
Martin v. Löwis87184592008-06-04 06:29:55 +00002""" turtle-example-suite:
3
4 tdemo_tree.py
5
6Displays a 'breadth-first-tree' - in contrast
7to the classical Logo tree drawing programs,
8which use a depth-first-algorithm.
9
10Uses:
11(1) a tree-generator, where the drawing is
12quasi the side-effect, whereas the generator
13always yields None.
14(2) Turtle-cloning: At each branching point the
15current pen is cloned. So in the end there
16are 1024 turtles.
17"""
18from turtle import Turtle, mainloop
19from time import clock
20
21def tree(plist, l, a, f):
22 """ plist is list of pens
23 l is length of branch
24 a is half of the angle between 2 branches
25 f is factor by which branch is shortened
26 from level to level."""
27 if l > 3:
28 lst = []
29 for p in plist:
30 p.forward(l)
31 q = p.clone()
32 p.left(a)
33 q.right(a)
34 lst.append(p)
35 lst.append(q)
36 for x in tree(lst, l*f, a, f):
37 yield None
38
39def maketree():
40 p = Turtle()
41 p.setundobuffer(None)
42 p.hideturtle()
43 p.speed(0)
44 p.tracer(30,0)
45 p.left(90)
46 p.penup()
47 p.forward(-210)
48 p.pendown()
49 t = tree([p], 200, 65, 0.6375)
50 for x in t:
51 pass
52 print len(p.getscreen().turtles())
53
54def main():
55 a=clock()
56 maketree()
57 b=clock()
58 return "done: %.2f sec." % (b-a)
59
60if __name__ == "__main__":
61 msg = main()
62 print msg
63 mainloop()