今天看書,發(fā)現(xiàn)了個不錯的程序,好家伙,二話不說,直接上手。
調(diào)到最好狀態(tài)的效果圖就是這樣的。
代碼如下:
代碼
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 #右分支偏轉(zhuǎn)角度
c = random()*15+10 #左分支偏轉(zhuǎn)角度
d = l*(random()*0.25+0.7) #下一個分支的長度
#右轉(zhuǎn)一定角度,畫右分支
right(b)
tree(n-1,d)
#左轉(zhuǎn)一定角度,畫左分支
left(b+c)
tree(n-1,d)
#轉(zhuǎn)回來
right(c)
else:
#畫葉子
right(90)
n=cos(radians(heading()-45))/4+0.5
ran=random()
#這里相比于原來隨機(jī)添加了填充的圓圈,讓櫻花葉子看起來更多一點(diǎn)
if(ran>0.7):
begin_fill()
circle(3)
fillcolor('pink')
#把原來隨機(jī)生成的葉子換成了統(tǒng)一的粉色
pencolor("pink")
circle(3)
if(ran>0.7):
end_fill()
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)#退回
if __name__ == '__main__':
bgcolor(0.856,0.8255,0.8882)#設(shè)置背景色(把灰色換成淡紫色)
ht()#隱藏turtle
speed(10)#速度 1-10漸進(jìn),0 最快
tracer(0,0)
pu()#抬筆
backward(50)
left(90)#左轉(zhuǎn)90度
pu()#抬筆
backward(300)#后退300
tree(12,100)#遞歸12層
done()
原理
1. 二叉樹
大家自習(xí)觀察就能發(fā)現(xiàn)我們的樹枝都是兩兩分叉的,這就是通過二叉樹的層層遞歸建立實(shí)現(xiàn)的,中間其實(shí)并不復(fù)雜,找到合適的層級數(shù)在進(jìn)行構(gòu)建二叉樹再配合turtle進(jìn)行繪畫就可以啦。
例如下面當(dāng)遞歸層數(shù)較少時候,我們就很容易發(fā)現(xiàn)是二叉樹的構(gòu)成,在構(gòu)建時候再將每個樹枝的長度都隨機(jī)一下就可以案例。
2. python的turtle庫
真棵櫻花樹的繪制效果是通過 Python 中的 turtle 來實(shí)現(xiàn)的,Python 的強(qiáng)大之處在于有許多很強(qiáng)大的庫,turtle就是其中之一,是 Python 自帶的一個庫。
基本入門可以參考這篇文章:https://zhuanlan.zhihu.com/p/64594462
詳細(xì)內(nèi)容請查看官方文檔:https://docs.python.org/zh-cn/3/library/turtle.html
學(xué)廢了趕緊畫一棵送給喜歡的妹子吧 O(∩_∩)O
遞歸效果探究
五層
當(dāng)遞歸五層時就是這個熊樣,很禿然
七層
十層
十二層(最好)
十四層
這里就太多了,顯得不大好看了,程序運(yùn)行等了幾分鐘才畫出來。文章來源:http://www.zghlxwxcb.cn/news/detail-426459.html
(在這里也希望廣大程序員的頭發(fā)像這一樣茂密,(*^▽^*)
)文章來源地址http://www.zghlxwxcb.cn/news/detail-426459.html
到了這里,關(guān)于每天好心情——Python畫一棵櫻花樹的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!