Spaces:
Build error
Build error
#!/usr/bin/env python3 | |
""" turtle-example-suite: | |
tdemo_bytedesign.py | |
An example adapted from the example-suite | |
of PythonCard's turtle graphics. | |
It's based on an article in BYTE magazine | |
Problem Solving with Logo: Using Turtle | |
Graphics to Redraw a Design | |
November 1982, p. 118 - 134 | |
------------------------------------------- | |
Due to the statement | |
t.delay(0) | |
in line 152, which sets the animation delay | |
to 0, this animation runs in "line per line" | |
mode as fast as possible. | |
""" | |
from turtle import Turtle, mainloop | |
from time import perf_counter as clock | |
# wrapper for any additional drawing routines | |
# that need to know about each other | |
class Designer(Turtle): | |
def design(self, homePos, scale): | |
self.up() | |
for i in range(5): | |
self.forward(64.65 * scale) | |
self.down() | |
self.wheel(self.position(), scale) | |
self.up() | |
self.backward(64.65 * scale) | |
self.right(72) | |
self.up() | |
self.goto(homePos) | |
self.right(36) | |
self.forward(24.5 * scale) | |
self.right(198) | |
self.down() | |
self.centerpiece(46 * scale, 143.4, scale) | |
self.getscreen().tracer(True) | |
def wheel(self, initpos, scale): | |
self.right(54) | |
for i in range(4): | |
self.pentpiece(initpos, scale) | |
self.down() | |
self.left(36) | |
for i in range(5): | |
self.tripiece(initpos, scale) | |
self.left(36) | |
for i in range(5): | |
self.down() | |
self.right(72) | |
self.forward(28 * scale) | |
self.up() | |
self.backward(28 * scale) | |
self.left(54) | |
self.getscreen().update() | |
def tripiece(self, initpos, scale): | |
oldh = self.heading() | |
self.down() | |
self.backward(2.5 * scale) | |
self.tripolyr(31.5 * scale, scale) | |
self.up() | |
self.goto(initpos) | |
self.setheading(oldh) | |
self.down() | |
self.backward(2.5 * scale) | |
self.tripolyl(31.5 * scale, scale) | |
self.up() | |
self.goto(initpos) | |
self.setheading(oldh) | |
self.left(72) | |
self.getscreen().update() | |
def pentpiece(self, initpos, scale): | |
oldh = self.heading() | |
self.up() | |
self.forward(29 * scale) | |
self.down() | |
for i in range(5): | |
self.forward(18 * scale) | |
self.right(72) | |
self.pentr(18 * scale, 75, scale) | |
self.up() | |
self.goto(initpos) | |
self.setheading(oldh) | |
self.forward(29 * scale) | |
self.down() | |
for i in range(5): | |
self.forward(18 * scale) | |
self.right(72) | |
self.pentl(18 * scale, 75, scale) | |
self.up() | |
self.goto(initpos) | |
self.setheading(oldh) | |
self.left(72) | |
self.getscreen().update() | |
def pentl(self, side, ang, scale): | |
if side < (2 * scale): return | |
self.forward(side) | |
self.left(ang) | |
self.pentl(side - (.38 * scale), ang, scale) | |
def pentr(self, side, ang, scale): | |
if side < (2 * scale): return | |
self.forward(side) | |
self.right(ang) | |
self.pentr(side - (.38 * scale), ang, scale) | |
def tripolyr(self, side, scale): | |
if side < (4 * scale): return | |
self.forward(side) | |
self.right(111) | |
self.forward(side / 1.78) | |
self.right(111) | |
self.forward(side / 1.3) | |
self.right(146) | |
self.tripolyr(side * .75, scale) | |
def tripolyl(self, side, scale): | |
if side < (4 * scale): return | |
self.forward(side) | |
self.left(111) | |
self.forward(side / 1.78) | |
self.left(111) | |
self.forward(side / 1.3) | |
self.left(146) | |
self.tripolyl(side * .75, scale) | |
def centerpiece(self, s, a, scale): | |
self.forward(s); self.left(a) | |
if s < (7.5 * scale): | |
return | |
self.centerpiece(s - (1.2 * scale), a, scale) | |
def main(): | |
t = Designer() | |
t.speed(0) | |
t.hideturtle() | |
t.getscreen().delay(0) | |
t.getscreen().tracer(0) | |
at = clock() | |
t.design(t.position(), 2) | |
et = clock() | |
return "runtime: %.2f sec." % (et-at) | |
if __name__ == '__main__': | |
msg = main() | |
print(msg) | |
mainloop() | |