如何用Python画一棵漂亮的树2.0

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_38981172/article/details/88685151

参考原文

这两天学python的时候,发现turtle库很好玩,百度后发现一个画树的文章,我把代码拿来改了下,感觉还不错,像极了樱花

下面是我参考原文做了些修改后的代码:

from turtle import *
from random import *
from math import *


class Tree:

    def __init__(self):
        setup(1000, 500)
        bgcolor(1, 1, 1)  # 背景色
        # ht()  # 隐藏turtle
        speed(10)  # 速度 1-10渐进,0 最快
        # tracer(1, 100)    # 设置绘图屏幕刷新频率,参数1设置在正常刷新频次的第参数1次刷新,参数2设置每次刷新的时延
        tracer(0, 0)
        pu()  # 抬笔
        backward(100)
        # 保证笔触箭头方向始终不向下,此处使其左转90度,而不是右转
        left(90)  # 左转90度
        backward(300)  # 后退300

    def tree(self, n, l):
        pd()    # 下笔
        # 阴影效果
        t = cos(radians(heading()+45))/8+0.25
        pencolor(t, t, t)
        pensize(n/1.2)
        forward(l)  # 画树枝

        if n > 0:
            b = random()*15+10  # 右分支偏转角度
            c = random()*15+10  # 左分支偏转角度
            d = l*(random()*0.25+0.7)  # 下一个分支的长度
            # 右转一定角度,画右分支
            right(b)
            self.tree(n-1, d)
            # 左转一定角度,画左分支
            left(b+c)
            self.tree(n-1, d)
            # 转回来
            right(c)
        else:
            # 画叶子
            right(90)
            n = cos(radians(heading()-45))/4+0.5
            pencolor(n,n*0.8,n*0.8)
            fillcolor(n,n*0.8,n*0.8)
            begin_fill()
            circle(3)
            left(90)
            end_fill()

            # 添加0.3倍的飘落叶子
            if random() > 0.7:
                pu()
                # 飘落
                t = heading()
                an = -40 + random()*40
                setheading(an)
                dis = int(800*random()*0.5 + 400*random()*0.3 + 200*random()*0.2)
                forward(dis)
                setheading(t)
                # 画叶子
                pd()
                right(90)
                n = cos(radians(heading()-45))/4+0.5
                pencolor(n*0.5+0.5,0.4+n*0.4,0.4+n*0.4)
                fillcolor(n, n * 0.8, n * 0.8)
                begin_fill()
                circle(2)
                left(90)
                end_fill()
                pu()
                # 返回
                t = heading()
                setheading(an)
                backward(dis)
                setheading(t)
            # pass
        pu()
        backward(l)     # 退回


def main():
    tree = Tree()
    tree.tree(12, 100)  # 递归7层
    done()


if __name__ == '__main__':
    main()

猜你喜欢

转载自blog.csdn.net/weixin_38981172/article/details/88685151