Spaces:
Runtime error
Runtime error
| #!/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 perf_counter as 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 | |
| def main(): | |
| a=clock() | |
| maketree() | |
| b=clock() | |
| return "done: %.2f sec." % (b-a) | |
| if __name__ == "__main__": | |
| msg = main() | |
| print(msg) | |
| mainloop() | |