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