View difference between Paste ID: K928gMzK and 0mMDLHCQ
SHOW: | | - or go back to the newest paste.
1
from turtle import *
2
3
#Version 0.0.5 by J.B. Wincek
4
#The next version will be 0.1.0 which will be code clean up and comments
5
#Changes from version 0.0.4: added in fractal Plant based grammar 
6
7
8
axiomA='A'
9
rulesA = {}
10
rulesA['A'] = 'AB'
11
rulesA['B'] = 'A'
12
13
axiomB='B'
14
rulesB = {}
15
rulesB['B'] = 'BA'
16
rulesB['A'] = 'B'
17
18
axiomF='F'
19
rulesF = {}
20
rulesF['F'] = 'F+F-F-F+F'
21
turtleRulesF = {}
22
turtleRulesF['F'] = 'forward(10)'
23
turtleRulesF['+'] = 'left(90)'
24
turtleRulesF['-'] = 'right(90)'
25
26
axiomS='A'
27
rulesS = {}
28
rulesS['A'] = 'B-A-B'
29
rulesS['B'] = 'A+B+A'
30
turtleRulesS = {}
31
turtleRulesS['A'] = 'forward(3)'
32
turtleRulesS['B'] = 'forward(3)'
33
turtleRulesS['+'] = 'left(60)'
34
turtleRulesS['-'] = 'right(60)'
35
36
axiomD='FX'
37-
turtleRulesD['F'] = 'forward(5)'
37+
38
rulesD['X']='X+YF'
39
rulesD['Y']='FX-Y'
40
turtleRulesD={}
41
turtleRulesD['F'] = 'forward(3)'
42
turtleRulesD['-'] = 'left(90)'
43
turtleRulesD['+'] = 'right(90)'
44
turtleRulesD['X'] = 'nul'
45
turtleRulesD['Y'] = 'nul'
46
47
axiomP='X'
48
positionHash = ()
49
positionHeap = []
50
rulesP={}
51
rulesP['X']='F-[[X]+X]+F[+FX]-X'
52
rulesP['F']='FF'
53
turtleRulesP={}
54
turtleRulesP['F'] = 'forward(3)'
55
turtleRulesP['-'] = 'left(25)'
56
turtleRulesP['+'] = 'right(25)'
57
turtleRulesP['X'] = 'nul'
58
turtleRulesP['['] = """positionHeap.append(hashPosition())"""
59
turtleRulesP[']'] = 'restorePosition(positionHeap.pop())'
60
61
def hashPosition():
62
    output = ()
63
    output = output + pos()
64
    output = (output, heading())
65
    return output
66-
            eval(turtleRules[words])
66+
67-
screensize(800,800)
67+
def restorePosition(hashed):
68
    pu()
69
    setx(int(hashed[0][0]))
70-
#setx(-400)
70+
    sety(int(hashed[0][1]))
71-
#sety(-400)
71+
    setheading(hashed[1])
72
    pd()
73
    return hashed
74
75
def compose(axiom, rules):
76-
evaluate(axiomD,rulesD,turtleRulesD,10)
76+
77
        for i in axiom:
78
            output = output + rules.get(i,i)
79
        return output
80
81
def iterate(axiom,rules, times):
82
    output = ''
83
    if times == 0:
84
        output = axiom
85
    else:
86
        return iterate(compose(axiom, rules), rules, times -1)
87
    return output
88
89
# format for evaluate ( <which axiom to use>,
90
#                       <which rule set to use> ,
91
#                       < which ruleset for turtle navigation> ,
92
#                       <how many iterations>)
93
def evaluate(axiom,rules,turtleRules,times):
94
    for words in iterate(axiom,rules,times):
95
        if turtleRules[words] != 'nul':
96
            exec(turtleRules[words])
97
98
#print iterate(axiomA,rulesB,6)
99
#print iterate(axiomB,rulesA,6)
100
#directions = iterate(axiomF,rulesF,3)
101
#print directions
102
103
screensize(210,210)
104
105
speed(0)
106
pu()
107
setx(200)
108
sety(-200)
109
left(90)
110
pd()
111
color('red','yellow')
112
#begin_fill()
113
#evaluate(axiomS,rulesS,turtleRulesS,6)
114
#evaluate(axiomD,rulesD,turtleRulesD,14)
115
#testString = "newHash = hashPosition()"
116
#exec(testString)
117
#print newHash
118
119
evaluate(axiomP,rulesP,turtleRulesP,6)
120
121
#end_fill()
122
done()
123
124
#special thanks to http://www.4dsolutions.net/ocn/lsystems.html