Spaces:
Runtime error
Runtime 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() | |