Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/lib/python3.8/turtledemo/bytedesign.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_bytedesign.py | |
5 | |
6 An example adapted from the example-suite | |
7 of PythonCard's turtle graphics. | |
8 | |
9 It's based on an article in BYTE magazine | |
10 Problem Solving with Logo: Using Turtle | |
11 Graphics to Redraw a Design | |
12 November 1982, p. 118 - 134 | |
13 | |
14 ------------------------------------------- | |
15 | |
16 Due to the statement | |
17 | |
18 t.delay(0) | |
19 | |
20 in line 152, which sets the animation delay | |
21 to 0, this animation runs in "line per line" | |
22 mode as fast as possible. | |
23 """ | |
24 | |
25 from turtle import Turtle, mainloop | |
26 from time import perf_counter as clock | |
27 | |
28 # wrapper for any additional drawing routines | |
29 # that need to know about each other | |
30 class Designer(Turtle): | |
31 | |
32 def design(self, homePos, scale): | |
33 self.up() | |
34 for i in range(5): | |
35 self.forward(64.65 * scale) | |
36 self.down() | |
37 self.wheel(self.position(), scale) | |
38 self.up() | |
39 self.backward(64.65 * scale) | |
40 self.right(72) | |
41 self.up() | |
42 self.goto(homePos) | |
43 self.right(36) | |
44 self.forward(24.5 * scale) | |
45 self.right(198) | |
46 self.down() | |
47 self.centerpiece(46 * scale, 143.4, scale) | |
48 self.getscreen().tracer(True) | |
49 | |
50 def wheel(self, initpos, scale): | |
51 self.right(54) | |
52 for i in range(4): | |
53 self.pentpiece(initpos, scale) | |
54 self.down() | |
55 self.left(36) | |
56 for i in range(5): | |
57 self.tripiece(initpos, scale) | |
58 self.left(36) | |
59 for i in range(5): | |
60 self.down() | |
61 self.right(72) | |
62 self.forward(28 * scale) | |
63 self.up() | |
64 self.backward(28 * scale) | |
65 self.left(54) | |
66 self.getscreen().update() | |
67 | |
68 def tripiece(self, initpos, scale): | |
69 oldh = self.heading() | |
70 self.down() | |
71 self.backward(2.5 * scale) | |
72 self.tripolyr(31.5 * scale, scale) | |
73 self.up() | |
74 self.goto(initpos) | |
75 self.setheading(oldh) | |
76 self.down() | |
77 self.backward(2.5 * scale) | |
78 self.tripolyl(31.5 * scale, scale) | |
79 self.up() | |
80 self.goto(initpos) | |
81 self.setheading(oldh) | |
82 self.left(72) | |
83 self.getscreen().update() | |
84 | |
85 def pentpiece(self, initpos, scale): | |
86 oldh = self.heading() | |
87 self.up() | |
88 self.forward(29 * scale) | |
89 self.down() | |
90 for i in range(5): | |
91 self.forward(18 * scale) | |
92 self.right(72) | |
93 self.pentr(18 * scale, 75, scale) | |
94 self.up() | |
95 self.goto(initpos) | |
96 self.setheading(oldh) | |
97 self.forward(29 * scale) | |
98 self.down() | |
99 for i in range(5): | |
100 self.forward(18 * scale) | |
101 self.right(72) | |
102 self.pentl(18 * scale, 75, scale) | |
103 self.up() | |
104 self.goto(initpos) | |
105 self.setheading(oldh) | |
106 self.left(72) | |
107 self.getscreen().update() | |
108 | |
109 def pentl(self, side, ang, scale): | |
110 if side < (2 * scale): return | |
111 self.forward(side) | |
112 self.left(ang) | |
113 self.pentl(side - (.38 * scale), ang, scale) | |
114 | |
115 def pentr(self, side, ang, scale): | |
116 if side < (2 * scale): return | |
117 self.forward(side) | |
118 self.right(ang) | |
119 self.pentr(side - (.38 * scale), ang, scale) | |
120 | |
121 def tripolyr(self, side, scale): | |
122 if side < (4 * scale): return | |
123 self.forward(side) | |
124 self.right(111) | |
125 self.forward(side / 1.78) | |
126 self.right(111) | |
127 self.forward(side / 1.3) | |
128 self.right(146) | |
129 self.tripolyr(side * .75, scale) | |
130 | |
131 def tripolyl(self, side, scale): | |
132 if side < (4 * scale): return | |
133 self.forward(side) | |
134 self.left(111) | |
135 self.forward(side / 1.78) | |
136 self.left(111) | |
137 self.forward(side / 1.3) | |
138 self.left(146) | |
139 self.tripolyl(side * .75, scale) | |
140 | |
141 def centerpiece(self, s, a, scale): | |
142 self.forward(s); self.left(a) | |
143 if s < (7.5 * scale): | |
144 return | |
145 self.centerpiece(s - (1.2 * scale), a, scale) | |
146 | |
147 def main(): | |
148 t = Designer() | |
149 t.speed(0) | |
150 t.hideturtle() | |
151 t.getscreen().delay(0) | |
152 t.getscreen().tracer(0) | |
153 at = clock() | |
154 t.design(t.position(), 2) | |
155 et = clock() | |
156 return "runtime: %.2f sec." % (et-at) | |
157 | |
158 if __name__ == '__main__': | |
159 msg = main() | |
160 print(msg) | |
161 mainloop() |