PageRenderTime 265ms CodeModel.GetById 110ms app.highlight 17ms RepoModel.GetById 134ms app.codeStats 1ms

/Demo/turtle/tdemo_bytedesign.py

http://unladen-swallow.googlecode.com/
Python | 162 lines | 155 code | 1 blank | 6 comment | 0 complexity | 8b313064e5a37bf43fb3a537e8f275eb MD5 | raw file
  1#!/usr/bin/python
  2"""      turtle-example-suite:
  3
  4        tdemo_bytedesign.py
  5
  6An example adapted from the example-suite
  7of PythonCard's turtle graphcis.
  8
  9It's based on an article in BYTE magazine
 10Problem Solving with Logo: Using Turtle
 11Graphics to Redraw a Design
 12November 1982, p. 118 - 134
 13
 14-------------------------------------------
 15
 16Due to the statement
 17
 18t.delay(0)
 19
 20in line 152, which sets the animation delay
 21to 0, this animation runs in "line per line"
 22mode as fast as possible.
 23"""
 24
 25import math
 26from turtle import Turtle, mainloop
 27from time import clock
 28
 29# wrapper for any additional drawing routines
 30# that need to know about each other
 31class 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
148def 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
159if __name__ == '__main__':
160    msg = main()
161    print msg
162    mainloop()