Turtle
043_Fibonacci_Tree2.py
import random
import os
from palettes import randomPalette
from util import getTurtleAndScreen
# Fibonacci tree.
# CAC, 4/24/2023
def fibTree(turtle,length,angle,level,colors,typeA,maxflex):
realAngle=angle/2
if level >0: # If level <=0, draw nothing.
if typeA:
turtle.color(random.choice(colors))
turtle.left(random.randint(-maxflex,maxflex))
turtle.forward(length)
fibTree(turtle,length,angle,level-1,colors,False,maxflex)
else:
version = random.randint(0,1)
x,y=turtle.pos()
heading = turtle.heading()
turtle.left(realAngle+random.randint(-maxflex,maxflex))
turtle.color(random.choice(colors))
turtle.forward(length)
if version:
fibTree(turtle,length,angle,level-1,colors,True,maxflex)
else:
fibTree(turtle,length,angle,level-1,colors,False,maxflex)
turtle.penup()
turtle.goto(x,y)
turtle.setheading(heading-realAngle+random.randint(-maxflex,maxflex))
turtle.pendown()
turtle.color(random.choice(colors))
turtle.forward(length)
if version:
fibTree(turtle,length,angle,level-1,colors,False,maxflex)
else:
fibTree(turtle,length,angle,level-1,colors,True,maxflex)
def Draw():
level = random.randint(4,15)
angle = random.randint(45,90)
maxflex = random.randint(5,15)
title = "Flexible Fibonacci Tree "+str(level)+" "+str(angle)+" "+str(maxflex)
width = 800
height = 600
filename = os.path.basename(__file__)[0:-3]
turtle, screen = getTurtleAndScreen(title,width,height,filename,moveWorld=True)
colors = randomPalette()
bg = random.choice(colors)
colors.remove(bg)
screen.bgcolor(bg)
turtle.pensize(2)
length = height/(1.5*level)
turtle.penup()
turtle.goto(width/2,height/4)
turtle.pendown()
turtle.setheading(90)
fibTree(turtle,length,angle,level,colors,True,maxflex)
turtle.penup()
screen.mainloop()
# ----------------------------------------------------------------
if __name__ == '__main__':
Draw()
|