comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/lib/python3.8/turtledemo/forest.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 """ turtlegraphics-example-suite:
3
4 tdemo_forest.py
5
6 Displays a 'forest' of 3 breadth-first-trees
7 similar to the one in tree.
8 For further remarks see tree.py
9
10 This example is a 'breadth-first'-rewrite of
11 a Logo program written by Erich Neuwirth. See
12 http://homepage.univie.ac.at/erich.neuwirth/
13 """
14 from turtle import Turtle, colormode, tracer, mainloop
15 from random import randrange
16 from time import perf_counter as clock
17
18 def symRandom(n):
19 return randrange(-n,n+1)
20
21 def randomize( branchlist, angledist, sizedist ):
22 return [ (angle+symRandom(angledist),
23 sizefactor*1.01**symRandom(sizedist))
24 for angle, sizefactor in branchlist ]
25
26 def randomfd( t, distance, parts, angledist ):
27 for i in range(parts):
28 t.left(symRandom(angledist))
29 t.forward( (1.0 * distance)/parts )
30
31 def tree(tlist, size, level, widthfactor, branchlists, angledist=10, sizedist=5):
32 # benutzt Liste von turtles und Liste von Zweiglisten,
33 # fuer jede turtle eine!
34 if level > 0:
35 lst = []
36 brs = []
37 for t, branchlist in list(zip(tlist,branchlists)):
38 t.pensize( size * widthfactor )
39 t.pencolor( 255 - (180 - 11 * level + symRandom(15)),
40 180 - 11 * level + symRandom(15),
41 0 )
42 t.pendown()
43 randomfd(t, size, level, angledist )
44 yield 1
45 for angle, sizefactor in branchlist:
46 t.left(angle)
47 lst.append(t.clone())
48 brs.append(randomize(branchlist, angledist, sizedist))
49 t.right(angle)
50 for x in tree(lst, size*sizefactor, level-1, widthfactor, brs,
51 angledist, sizedist):
52 yield None
53
54
55 def start(t,x,y):
56 colormode(255)
57 t.reset()
58 t.speed(0)
59 t.hideturtle()
60 t.left(90)
61 t.penup()
62 t.setpos(x,y)
63 t.pendown()
64
65 def doit1(level, pen):
66 pen.hideturtle()
67 start(pen, 20, -208)
68 t = tree( [pen], 80, level, 0.1, [[ (45,0.69), (0,0.65), (-45,0.71) ]] )
69 return t
70
71 def doit2(level, pen):
72 pen.hideturtle()
73 start(pen, -135, -130)
74 t = tree( [pen], 120, level, 0.1, [[ (45,0.69), (-45,0.71) ]] )
75 return t
76
77 def doit3(level, pen):
78 pen.hideturtle()
79 start(pen, 190, -90)
80 t = tree( [pen], 100, level, 0.1, [[ (45,0.7), (0,0.72), (-45,0.65) ]] )
81 return t
82
83 # Hier 3 Baumgeneratoren:
84 def main():
85 p = Turtle()
86 p.ht()
87 tracer(75,0)
88 u = doit1(6, Turtle(undobuffersize=1))
89 s = doit2(7, Turtle(undobuffersize=1))
90 t = doit3(5, Turtle(undobuffersize=1))
91 a = clock()
92 while True:
93 done = 0
94 for b in u,s,t:
95 try:
96 b.__next__()
97 except:
98 done += 1
99 if done == 3:
100 break
101
102 tracer(1,10)
103 b = clock()
104 return "runtime: %.2f sec." % (b-a)
105
106 if __name__ == '__main__':
107 main()
108 mainloop()