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()