File: byteDesign.py

package info (click to toggle)
pythoncard 0.8.1-8.1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k, lenny
  • size: 5,352 kB
  • ctags: 4,594
  • sloc: python: 42,401; makefile: 55; sh: 22
file content (109 lines) | stat: -rw-r--r-- 3,164 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# example based on article in BYTE magazine
# Problem Solving with Logo: Using Turtle Graphics to Redraw a Design
# November 1982
# p. 118 - 134

from wrappers import Turtle

class ByteTurtle(Turtle):
    def design(self, homePos, scale):
        self.pu()
        for i in range(5):
            self.fd(64.65 * scale)
            self.pd()
            self.wheel(self.getXY(), scale)
            self.pu()
            self.bk(64.65 * scale)
            self.rt(72)
        self.pu(); self.setXY(homePos); self.rt(36); self.fd(24.5 * scale); self.rt(198); self.pd()
        self.centerpiece(46 * scale, 143.4, scale)

    def wheel(self, initpos, scale):
        self.rt(54)
        for i in range(4): self.pentpiece(initpos, scale)
        self.pd(); self.lt(36)
        for i in range(5): self.tripiece(initpos, scale)
        self.lt(36)
        for i in range(5):
            self.pd()
            self.rt(72)
            self.fd(28 * scale)
            self.pu()
            self.bk(28 * scale)
        self.lt(54)

    def tripiece(self, initpos, scale):
        oldh = self.getHeading()
        self.pd(); self.bk(2.5 * scale)
        self.tripolyr(31.5 * scale, scale)
        self.pu(); self.setXY(initpos); self.setHeading(oldh)
        self.pd(); self.bk(2.5 * scale)
        self.tripolyl(31.5 * scale, scale)
        self.pu(); self.setXY(initpos); self.setHeading(oldh)
        self.lt(72)

    def pentpiece(self, initpos, scale):
        oldh = self.getHeading()
        self.pu(); self.fd(29 * scale); self.pd()
        for i in range(5):
            self.fd(18 * scale)
            self.rt(72)
        self.pentr(18 * scale, 75, scale)
        self.pu(); self.setXY(initpos); self.setHeading(oldh)
        self.fd(29 * scale); self.pd()
        for i in range(5):
            self.fd(18 * scale)
            self.rt(72)
        self.pentl(18 * scale, 75, scale)
        self.pu(); self.setXY(initpos); self.setHeading(oldh)
        self.lt(72)

    def pentl(self, side, ang, scale):
        if side < (2 * scale): return
        self.fd(side)
        self.lt(ang)
        self.pentl(side - (.38 * scale), ang, scale)

    def pentr(self, side, ang, scale):
        if side < (2 * scale): return
        self.fd(side)
        self.rt(ang)
        self.pentr(side - (.38 * scale), ang, scale)

    def tripolyr(self, side, scale):
        if side < (4 * scale): return
        self.fd(side)
        self.rt(111)
        self.fd(side / 1.78)
        self.rt(111)
        self.fd(side / 1.3)
        self.rt(146)
        self.tripolyr(side * .75, scale)

    def tripolyl(self, side, scale):
        if side < (4 * scale): return
        self.fd(side)
        self.lt(111)
        self.fd(side / 1.78)
        self.lt(111)
        self.fd(side / 1.3)
        self.lt(146)
        self.tripolyl(side * .75, scale)
        
    def centerpiece(self, s, a, scale):
        self.fd(s); self.lt(a)
        if s < (7.5 * scale): return
        self.centerpiece(s - (1.2 * scale), a, scale)

def draw(canvas):
    t = ByteTurtle(canvas)
    t.cls()
    """
    t.pu()
    t.lt(90)
    t.fd(30)
    t.rt(90)
    t.pd()
    """

    t.design(t.getXY(), 2.3)