Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/lib/python3.8/turtledemo/tree.py @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 69:33d812a61356 |
---|---|
1 #!/usr/bin/env python3 | |
2 """ turtle-example-suite: | |
3 | |
4 tdemo_tree.py | |
5 | |
6 Displays a 'breadth-first-tree' - in contrast | |
7 to the classical Logo tree drawing programs, | |
8 which use a depth-first-algorithm. | |
9 | |
10 Uses: | |
11 (1) a tree-generator, where the drawing is | |
12 quasi the side-effect, whereas the generator | |
13 always yields None. | |
14 (2) Turtle-cloning: At each branching point | |
15 the current pen is cloned. So in the end | |
16 there are 1024 turtles. | |
17 """ | |
18 from turtle import Turtle, mainloop | |
19 from time import perf_counter as clock | |
20 | |
21 def 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 | |
39 def maketree(): | |
40 p = Turtle() | |
41 p.setundobuffer(None) | |
42 p.hideturtle() | |
43 p.speed(0) | |
44 p.getscreen().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 | |
53 def main(): | |
54 a=clock() | |
55 maketree() | |
56 b=clock() | |
57 return "done: %.2f sec." % (b-a) | |
58 | |
59 if __name__ == "__main__": | |
60 msg = main() | |
61 print(msg) | |
62 mainloop() |