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 |