PageRenderTime 203ms CodeModel.GetById 110ms app.highlight 5ms RepoModel.GetById 86ms app.codeStats 0ms

/Demo/turtle/tdemo_tree.py

http://unladen-swallow.googlecode.com/
Python | 63 lines | 58 code | 0 blank | 5 comment | 0 complexity | 00466d412667e8b4c7f2a15bd08041f6 MD5 | raw file
 1#!/usr/bin/python
 2"""      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()