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__':