~toolpart/+junk/pythoncard

« back to all changes in this revision

Viewing changes to samples/turtle/wxTurtleCurves.py

  • Committer: Bazaar Package Importer
  • Author(s): Mohammed Adnène Trojette
  • Date: 2006-11-12 17:52:13 UTC
  • mfrom: (2.1.5 feisty)
  • Revision ID: james.westby@ubuntu.com-20061112175213-tv8bnl6rtpa2qw1o
Tags: 0.8.1-8.1
* Non-maintainer upload.
* Fix path to findfiles, codeEditor and resourceEditor:
   + patch from Ernest ter Kuile <ernestjw@xs4all.nl>. (Closes: #397018)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# examples derived from
2
 
# Visual Modeling with Logo: A Structural Approach to Seeing
3
 
# by James Clayson
4
 
# and
5
 
# Turtle Geometry: The Computer as a Medium for Exploring Mathematics
6
 
# by Harold Abelson and Andrea diSessa
7
 
 
8
 
#import wxTurtle
9
 
from tWrapper import tWrapper
10
 
 
11
 
#class turtleCurves(wxTurtle.Pen):
12
 
class turtleCurves(tWrapper):
13
 
    # TG p. 92
14
 
    def cCurve(self, size, level):
15
 
        if level == 0:
16
 
            self.forward(size)
17
 
            return
18
 
        self.cCurve(size, level - 1)
19
 
        self.right(90)
20
 
        self.cCurve(size, level - 1)
21
 
        self.left(90)
22
 
 
23
 
    # TG p. 93
24
 
    def lDragon(self, size, level):
25
 
        if level == 0:
26
 
            self.forward(size)
27
 
            return
28
 
        self.lDragon(size, level - 1)
29
 
        self.left(90)
30
 
        self.rDragon(size, level - 1)
31
 
 
32
 
    # TG p. 93
33
 
    def rDragon(self, size, level):
34
 
        if level == 0:
35
 
            self.forward(size)
36
 
            return
37
 
        self.lDragon(size, level - 1)
38
 
        self.right(90)
39
 
        self.rDragon(size, level - 1)
40
 
 
41
 
    # example derived from
42
 
    # Turtle Geometry: The Computer as a Medium for Exploring Mathematics
43
 
    # by Harold Abelson and Andrea diSessa
44
 
    # p. 98
45
 
    def hilbert(self, size, level, parity):
46
 
        if level == 0:
47
 
            return
48
 
        # rotate and draw first subcurve with opposite parity to big curve
49
 
        self.left(parity * 90)
50
 
        self.hilbert(size, level - 1, -parity)
51
 
        # interface to and draw second subcurve with same parity as big curve
52
 
        self.forward(size)
53
 
        self.right(parity * 90)
54
 
        self.hilbert(size, level - 1, parity)
55
 
        # third subcurve
56
 
        self.forward(size)
57
 
        self.hilbert(size, level - 1, parity)
58
 
        # fourth subcurve
59
 
        self.right(parity * 90)
60
 
        self.forward(size)
61
 
        self.hilbert(size, level - 1, -parity)
62
 
        # a final turn is needed to make the turtle
63
 
        # end up facing outward from the large square
64
 
        self.left(parity * 90)
65
 
 
66
 
    # Visual Modeling with Logo: A Structural Approach to Seeing
67
 
    # by James Clayson
68
 
    # Koch curve, after Helge von Koch who introduced this geometric figure in 1904
69
 
    # p. 146
70
 
    def fractalgon(self, n, rad, lev, dir):
71
 
        import math
72
 
        
73
 
        # if dir = 1 turn outward
74
 
        # if dir = -1 turn inward
75
 
        edge = 2 * rad * math.sin(math.pi / n) # logo uses sin(180 / n); Python uses radians
76
 
        self.pu()
77
 
        self.fd(rad)
78
 
        self.pd()
79
 
        self.rt(180 - (90 * (n - 2) / n))
80
 
        for i in range(n):
81
 
            self.fractal(edge, lev, dir)
82
 
            self.rt(360 / n)
83
 
        self.lt(180 - (90 * (n - 2) / n))
84
 
        self.pu()
85
 
        self.bk(rad)
86
 
        self.pd()
87
 
 
88
 
    # p. 146
89
 
    def fractal(self, dist, depth, dir):
90
 
        if depth < 1:
91
 
            self.fd(dist)
92
 
            return
93
 
        self.fractal(dist / 3, depth - 1, dir)
94
 
        self.lt(60 * dir)
95
 
        self.fractal(dist / 3, depth - 1, dir)
96
 
        self.rt(120 * dir)
97
 
        self.fractal(dist / 3, depth - 1, dir)
98
 
        self.lt(60 * dir)
99
 
        self.fractal(dist / 3, depth - 1, dir)