Mercurial > repos > rliterman > csp2
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() |