symbian-qemu-0.9.1-12/python-2.6.1/Demo/turtle/tdemo_bytedesign.py
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     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()