2 """ turtle-example-suite:
6 An example adapted from the example-suite
7 of PythonCard's turtle graphcis.
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
14 -------------------------------------------
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.
26 from turtle
import Turtle
, mainloop
27 from time
import clock
29 # wrapper for any additional drawing routines
30 # that need to know about each other
31 class Designer(Turtle
):
33 def design(self
, homePos
, scale
):
36 self
.forward(64.65 * scale
)
38 self
.wheel(self
.position(), scale
)
40 self
.backward(64.65 * scale
)
45 self
.forward(24.5 * scale
)
48 self
.centerpiece(46 * scale
, 143.4, scale
)
51 def wheel(self
, initpos
, scale
):
54 self
.pentpiece(initpos
, scale
)
58 self
.tripiece(initpos
, scale
)
63 self
.forward(28 * scale
)
65 self
.backward(28 * scale
)
67 self
.getscreen().update()
69 def tripiece(self
, initpos
, scale
):
72 self
.backward(2.5 * scale
)
73 self
.tripolyr(31.5 * scale
, scale
)
78 self
.backward(2.5 * scale
)
79 self
.tripolyl(31.5 * scale
, scale
)
84 self
.getscreen().update()
86 def pentpiece(self
, initpos
, scale
):
89 self
.forward(29 * scale
)
92 self
.forward(18 * scale
)
94 self
.pentr(18 * scale
, 75, scale
)
98 self
.forward(29 * scale
)
101 self
.forward(18 * scale
)
103 self
.pentl(18 * scale
, 75, scale
)
106 self
.setheading(oldh
)
108 self
.getscreen().update()
110 def pentl(self
, side
, ang
, scale
):
111 if side
< (2 * scale
): return
114 self
.pentl(side
- (.38 * scale
), ang
, scale
)
116 def pentr(self
, side
, ang
, scale
):
117 if side
< (2 * scale
): return
120 self
.pentr(side
- (.38 * scale
), ang
, scale
)
122 def tripolyr(self
, side
, scale
):
123 if side
< (4 * scale
): return
126 self
.forward(side
/ 1.78)
128 self
.forward(side
/ 1.3)
130 self
.tripolyr(side
* .75, scale
)
132 def tripolyl(self
, side
, scale
):
133 if side
< (4 * scale
): return
136 self
.forward(side
/ 1.78)
138 self
.forward(side
/ 1.3)
140 self
.tripolyl(side
* .75, scale
)
142 def centerpiece(self
, s
, a
, scale
):
143 self
.forward(s
); self
.left(a
)
144 if s
< (7.5 * scale
):
146 self
.centerpiece(s
- (1.2 * scale
), a
, scale
)
152 t
.getscreen().delay(0)
155 t
.design(t
.position(), 2)
157 return "runtime: %.2f sec." % (et
-at
)
159 if __name__
== '__main__':