# -*- coding: utf8 -*-
"""
繪制分形樹
"""
import turtledeflection_angle = 20 # 樹枝與樹干夾角
trunk_min_length = 5 # 樹干最小長度
trunk_step_length = 10 # 樹干每次遞減長度
trunk_length = 80 # 初始樹干長度
treetop_length = 30 # 樹梢部分長度
treetop_color = 'green' # 主樹干顏色
treetrunk_color = 'brown' # 樹梢部分顏色
pen_size = 10 # 畫筆初始寬度
pen_step_size = 2 # 畫筆每次遞減寬度
pen_min_size = 1 # 畫筆最小寬度def DrawFractalTree(trunk_length, pen_size):if trunk_length >= trunk_min_length:turtle.pensize(pen_size if pen_size > pen_min_size else pen_min_size)# 畫筆顏色turtle.pencolor((treetop_color, treetrunk_color)[trunk_length > treetop_length])# 畫樹干turtle.fd(trunk_length)# 繪制右側樹枝turtle.rt(deflection_angle)DrawFractalTree(trunk_length - trunk_step_length, pen_size - pen_step_size)# 繪制中間樹枝turtle.lt(deflection_angle)DrawFractalTree(trunk_length - trunk_step_length, pen_size - pen_step_size)# 繪制左側樹枝turtle.lt(deflection_angle)DrawFractalTree(trunk_length - trunk_step_length, pen_size - pen_step_size)# 返回樹干起始點turtle.rt(deflection_angle)turtle.penup()turtle.bk(trunk_length)turtle.pendown()def main():# 繪制速度 范圍[0,10]turtle.speed(10)# 初始畫筆位置 turtle.penup()turtle.left(90)turtle.backward(250)turtle.pendown()# 執行繪制DrawFractalTree(trunk_length, pen_size)turtle.exitonclick()if __name__ == '__main__':main()
?