~pythonregexp2.7/python/issue2636-12

« back to all changes in this revision

Viewing changes to Demo/turtle/tdemo_bytedesign.py

  • Committer: Jeffrey C. "The TimeHorse" Jacobs
  • Date: 2008-06-09 14:52:42 UTC
  • mfrom: (39033.1.3 Regexp-2.6)
  • Revision ID: darklord@timehorse.com-20080609145242-9m268zc6u87rp1vp
Merged in changes from the core Regexp branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/usr/bin/python
 
2
"""      turtle-example-suite:
 
3
 
 
4
        tdemo_bytedesign.py
 
5
 
 
6
An example adapted from the example-suite
 
7
of PythonCard's turtle graphcis.
 
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
import math
 
26
from turtle import Turtle, mainloop
 
27
from time import clock
 
28
 
 
29
# wrapper for any additional drawing routines
 
30
# that need to know about each other
 
31
class Designer(Turtle):
 
32
 
 
33
    def design(self, homePos, scale):
 
34
        self.up()
 
35
        for i in range(5):
 
36
            self.forward(64.65 * scale)
 
37
            self.down()
 
38
            self.wheel(self.position(), scale)
 
39
            self.up()
 
40
            self.backward(64.65 * scale)
 
41
            self.right(72)
 
42
        self.up()
 
43
        self.goto(homePos)
 
44
        self.right(36)
 
45
        self.forward(24.5 * scale)
 
46
        self.right(198)
 
47
        self.down()
 
48
        self.centerpiece(46 * scale, 143.4, scale)
 
49
        self.tracer(True)
 
50
 
 
51
    def wheel(self, initpos, scale):
 
52
        self.right(54)
 
53
        for i in range(4):
 
54
            self.pentpiece(initpos, scale)
 
55
        self.down()
 
56
        self.left(36)
 
57
        for i in range(5):
 
58
            self.tripiece(initpos, scale)
 
59
        self.left(36)
 
60
        for i in range(5):
 
61
            self.down()
 
62
            self.right(72)
 
63
            self.forward(28 * scale)
 
64
            self.up()
 
65
            self.backward(28 * scale)
 
66
        self.left(54)
 
67
        self.getscreen().update()
 
68
 
 
69
    def tripiece(self, initpos, scale):
 
70
        oldh = self.heading()
 
71
        self.down()
 
72
        self.backward(2.5 * scale)
 
73
        self.tripolyr(31.5 * scale, scale)
 
74
        self.up()
 
75
        self.goto(initpos)
 
76
        self.setheading(oldh)
 
77
        self.down()
 
78
        self.backward(2.5 * scale)
 
79
        self.tripolyl(31.5 * scale, scale)
 
80
        self.up()
 
81
        self.goto(initpos)
 
82
        self.setheading(oldh)
 
83
        self.left(72)
 
84
        self.getscreen().update()
 
85
 
 
86
    def pentpiece(self, initpos, scale):
 
87
        oldh = self.heading()
 
88
        self.up()
 
89
        self.forward(29 * scale)
 
90
        self.down()
 
91
        for i in range(5):
 
92
            self.forward(18 * scale)
 
93
            self.right(72)
 
94
        self.pentr(18 * scale, 75, scale)
 
95
        self.up()
 
96
        self.goto(initpos)
 
97
        self.setheading(oldh)
 
98
        self.forward(29 * scale)
 
99
        self.down()
 
100
        for i in range(5):
 
101
            self.forward(18 * scale)
 
102
            self.right(72)
 
103
        self.pentl(18 * scale, 75, scale)
 
104
        self.up()
 
105
        self.goto(initpos)
 
106
        self.setheading(oldh)
 
107
        self.left(72)
 
108
        self.getscreen().update()
 
109
 
 
110
    def pentl(self, side, ang, scale):
 
111
        if side < (2 * scale): return
 
112
        self.forward(side)
 
113
        self.left(ang)
 
114
        self.pentl(side - (.38 * scale), ang, scale)
 
115
 
 
116
    def pentr(self, side, ang, scale):
 
117
        if side < (2 * scale): return
 
118
        self.forward(side)
 
119
        self.right(ang)
 
120
        self.pentr(side - (.38 * scale), ang, scale)
 
121
 
 
122
    def tripolyr(self, side, scale):
 
123
        if side < (4 * scale): return
 
124
        self.forward(side)
 
125
        self.right(111)
 
126
        self.forward(side / 1.78)
 
127
        self.right(111)
 
128
        self.forward(side / 1.3)
 
129
        self.right(146)
 
130
        self.tripolyr(side * .75, scale)
 
131
 
 
132
    def tripolyl(self, side, scale):
 
133
        if side < (4 * scale): return
 
134
        self.forward(side)
 
135
        self.left(111)
 
136
        self.forward(side / 1.78)
 
137
        self.left(111)
 
138
        self.forward(side / 1.3)
 
139
        self.left(146)
 
140
        self.tripolyl(side * .75, scale)
 
141
 
 
142
    def centerpiece(self, s, a, scale):
 
143
        self.forward(s); self.left(a)
 
144
        if s < (7.5 * scale):
 
145
            return
 
146
        self.centerpiece(s - (1.2 * scale), a, scale)
 
147
 
 
148
def main():
 
149
    t = Designer()
 
150
    t.speed(0)
 
151
    t.hideturtle()
 
152
    t.getscreen().delay(0)
 
153
    t.tracer(0)
 
154
    at = clock()
 
155
    t.design(t.position(), 2)
 
156
    et = clock()
 
157
    return "runtime: %.2f sec." % (et-at)
 
158
 
 
159
if __name__ == '__main__':
 
160
    msg = main()
 
161
    print msg
 
162
    mainloop()