python 绘制分形树

# -*- coding: utf8 -*-
"""
绘制分形树
"""
import turtle

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JackieZhengChina

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值