天天看點

如何用Python畫一棵漂亮的樹

如何用Python畫一棵漂亮的樹

Tree

海龜繪圖

turtle

在1966年,Seymour Papert和Wally Feurzig發明了一種專門給兒童學習程式設計的語言——

LOGO語言

,它的特色就是通過程式設計指揮一個小海龜(turtle)在螢幕上繪圖。

海龜繪圖(Turtle Graphics)後來被移植到各種進階語言中,Python内置了turtle庫,基本上100%複制了原始的Turtle Graphics的所有功能。

Python腳本:

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

def tree(n,l):
    pd()#下筆
    #陰影效果
    t = cos(radians(heading()+45))/8+0.25
    pencolor(t,t,t)
    pensize(n/3)
    forward(l)#畫樹枝

    if n>0:
        b = random()*15+10 #右分支偏轉角度
        c = random()*15+10 #左分支偏轉角度
        d = l*(random()*0.25+0.7) #下一個分支的長度
        #右轉一定角度,畫右分支
        right(b)
        tree(n-1,d)
        #左轉一定角度,畫左分支
        left(b+c)
        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)
        circle(3)
        left(90)
        #添加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)
            circle(2)
            left(90)
            pu()
            #傳回
            t=heading()
            setheading(an)
            backward(dis)
            setheading(t)
    pu()
    backward(l)#退回

bgcolor(0.5,0.5,0.5)#背景色
ht()#隐藏turtle
speed(0)#速度 1-10漸進,0 最快
tracer(0,0)
pu()#擡筆
backward(100)
left(90)#左轉90度
pu()#擡筆
backward(300)#後退300
tree(12,100)#遞歸7層
done()
           
如何用Python畫一棵漂亮的樹

運作效果