from turtle import *
from random import *
from math import *
class Tree:
def __init__(self):
setup(1000, 500)
bgcolor(1, 1, 1)
speed(10)
tracer(0, 0)
pu()
backward(100)
left(90)
backward(300)
def tree(self, n, l):
pd()
t = cos(radians(heading() + 45)) / 8 + 0.25
pencolor(t, t, t)
pensize(n / 1.2)
forward(l)
if n > 0:
b = random() * 15 + 10
c = random() * 15 + 10
d = l * (random() * 0.25 + 0.7)
right(b)
self.tree(n - 1, d)
left(b + c)
self.tree(n - 1, d)
right(c)
else:
right(90)
n = cos(radians(heading() - 45)) / 4 + 0.5
pencolor(n, n * 0.8, n * 0.8)
fillcolor(n, n * 0.8, n * 0.8)
begin_fill()
circle(3)
left(90)
end_fill()
if random() > 0.7:
pu()
t = heading()
an = -40 + random() * 40
setheading(an)
dis = int(800 * random() * 0.5 + 400 * random() * 0.3 + 200 * random() * 0.2)
forward(dis)
setheading(t)
pd()
right(90)
n = cos(radians(heading() - 45)) / 4 + 0.5
pencolor(n * 0.5 + 0.5, 0.4 + n * 0.4, 0.4 + n * 0.4)
fillcolor(n, n * 0.8, n * 0.8)
begin_fill()
circle(2)
left(90)
end_fill()
pu()
t = heading()
setheading(an)
backward(dis)
setheading(t)
def main():
tree = Tree()
tree.tree(12, 100)
done()
if __name__ == '__main__':
main()
from turtle import *
from random import *
def drawTree(n, l):
pendown()
pencolor('#5d3c3c')
pensize(n / 1.5)
forward(l)
if n > 0:
dr = randint(30, 40)
dl = randint(30, 40)
move = l * (random() * 0.4 + 0.5)
right(dr)
drawTree(n - 1, move)
left(dr + dl)
drawTree(n - 1, move)
right(dl)
else:
drawPetal(3)
penup()
backward(l)
def petalPlace(m, x, y):
penup()
goto(x, y)
pendown()
setheading(0)
tracer(False)
for i in range(m):
if i == 0:
drawPetal(5)
else:
penup()
goto(x, y)
a = randint(20, 400)
b = randint(-50, 50)
forward(a)
left(90)
forward(b)
right(90)
pendown()
drawPetal(5)
def drawPetal(n):
colormode(255)
r = randint(200, 255)
g = randint(8, 158)
b = randint(8, 158)
begin_fill()
fillcolor(r, g, b)
pencolor(r, g, b)
circle(n)
end_fill()
def run():
setup(1.0, 1.0)
penup()
goto(-50, -150)
left(90)
pendown()
hideturtle()
tracer(False)
drawTree(13, 150)
petalPlace(160, -100, -150)
run()
done()
if __name__ == '__main__':
run()
import turtle
import random
stack = []
def createWord(max_it, word, proc_rules, x, y, turn):
turtle.up()
turtle.home()
turtle.goto(x, y)
turtle.right(turn)
turtle.down()
t = 0
while t < max_it:
word = rewrite(word, proc_rules)
drawit(word, 5, 20)
t = t + 1
def rewrite(word, proc_rules):
wordList = list(word)
for i in range(len(wordList)):
curChar = wordList[i]
if curChar in proc_rules:
wordList[i] = proc_rules[curChar]
return "".join(wordList)
def drawit(newWord, d, angle):
newWordLs = list(newWord)
for i in range(len(newWordLs)):
cur_Char = newWordLs[i]
if cur_Char == 'F':
turtle.forward(d)
elif cur_Char == '+':
turtle.right(angle)
elif cur_Char == '-':
turtle.left(angle)
elif cur_Char == '[':
state_push()
elif cur_Char == ']':
state_pop()
def state_push():
global stack
stack.append((turtle.position(), turtle.heading()))
def state_pop():
global stack
position, heading = stack.pop()
turtle.up()
turtle.goto(position)
turtle.setheading(heading)
turtle.down()
def randomStart():
x = random.randint(-300, 300)
y = random.randint(-320, -280)
heading = random.randint(-100, -80)
return ((x, y), heading)
def main():
rule_sets = []
rule_sets.append(((3, 5), 'F', {'F': 'F[+F][-F]F'}))
rule_sets.append(((4, 6), 'B', {'B': 'F[-B][+ B]', 'F': 'FF'}))
rule_sets.append(((2, 4), 'F', {'F': 'FF+[+F-F-F]-[-F+F+F]'}))
tree_count = 50
turtle.tracer(10, 0)
for x in range(tree_count):
rand_i = random.randint(0, len(rule_sets) - 1)
selected_ruleset = rule_sets[rand_i]
i_range, word, rule = selected_ruleset
low, high = i_range
i = random.randint(low, high)
start_position, start_heading = randomStart()
start_x, start_y = start_position
createWord(i, word, rule, start_x, start_y, start_heading)
if __name__ == '__main__':
main()