Programming Resources
For Fun and Learning
Charles Cusack
Computer Science
Hope College
main


Python


C++
JAVA
PHP
SQL
Assignments

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()