如何用Python畫一棵漂亮的樹2.0

參考原文

這兩天學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()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章