from turtle import *
import random
import time
tracer(10000, 0)
def branch(x, y, direction, branch_length):
# if the branch is too small, just quit
if branch_length < 5:
return
# draw the "trunk"
trunk_size = max(branch_length / 7.0, 1) + random.randint(-1, 1)
pensize(trunk_size)
for i in range(4):
forward(branch_length / 4.0 + random.randint(-10, 10))
left(random.randint(-8, 8))
if random.randint(0, 5) == 0:
tiny_branch_angle = random.randint(-LEFT_ANGLE, RIGHT_ANGLE)
right(tiny_branch_angle)
branch(xcor(), ycor(), heading(), branch_length / 2)
left(tiny_branch_angle)
pensize(trunk_size)
if random.randint(0, 5) == 0:
branch_length = branch_length * 0.9
# draw the two branches, which are fractal trees
if random.randint(0, 9) != 0:
left(LEFT_ANGLE)
branch(xcor(), ycor(), heading(), branch_length - LEFT_DECREASE)
right(LEFT_ANGLE)
if random.randint(0, 9) != 0:
right(RIGHT_ANGLE)
branch(xcor(), ycor(), heading(), branch_length - RIGHT_DECREASE)
left(RIGHT_ANGLE)
# return back to the starting point
penup()
goto(x, y)
setheading(direction)
pendown()
def draw_tree(x, y, direction, seed):
global LEFT_ANGLE, RIGHT_ANGLE, LEFT_DECREASE, RIGHT_DECREASE
# go to the starting point
penup()
goto(x, y)
setheading(direction)
pendown()
# try changing these values and looking at the results
random.seed(seed)
LEFT_ANGLE = random.randint(10, 30)
RIGHT_ANGLE = random.randint(10, 30)
LEFT_DECREASE = random.randint( 6, 15)
RIGHT_DECREASE = random.randint( 6, 15)
START_SIZE = random.randint(80, 120)
branch(x, y, direction, START_SIZE)
update()
draw_tree(0, -310, 90, 12393)
exitonclick()