turtle畫分形樹
阿新 • • 發佈:2018-12-27
今天用了python內建的turtle繪相簿,感覺很有意思。然後嘗試用turtle+遞迴畫了一個分型樹。程式碼如下,
import turtle toplevel = 6 #一共遞迴6層 angle = 30 rangle = 15 def drawTree(length, level): turtle.left(angle) #繪製左枝 turtle.forward(length) if level == toplevel: #葉子 turtle.circle(2,360) if level < toplevel: #在左枝退回去之前遞迴 drawTree(length-10, level+1) turtle.back(length) turtle.right(angle+rangle) #繪製右枝 turtle.forward(length) if level == toplevel: #葉子 turtle.circle(2,360) if level < toplevel: #在右枝退回去之前遞迴 drawTree(length-10, level+1) turtle.back(length) turtle.left(rangle) turtle.left(90) turtle.penup() turtle.back(300) turtle.pendown() turtle.forward(100) turtle.speed('fastest') drawTree(80,1) turtle.done()
圖形是這樣,
這個稍微美化了一些,來看個最原始的版本:
import turtle toplevel = 6 #一共遞迴6層 angle = 30 def drawTree(length, level): turtle.left(angle) #繪製左枝 turtle.forward(length) if level < toplevel: #在左枝退回去之前遞迴 drawTree(length-10, level+1) turtle.back(length) turtle.right(angle*2) #繪製右枝 turtle.forward(length) if level < toplevel: #在右枝退回去之前遞迴 drawTree(length-10, level+1) turtle.back(length) turtle.left(angle) turtle.tracer(0) #不重新整理 turtle.left(90) drawTree(80,1) turtle.update() #重新整理,和上面的tracer(0)配合,直接出圖形,忽略過程 turtle.done()
其中,這裡去掉了樹幹,去掉了樹葉,去掉了讓樹向左歪。圖形如下
最後,我們可以繼續美化這顆分型樹,下面說幾點想到的:
- 樹幹的粗細可以不同,最好從下往上依次變細。
- 樹葉可以畫的漂亮些,不僅僅是個圓。
- 背景顏色可以改變。
- 樹幹,樹葉顏色可以改變。
- 可以加入一些隨機的樹葉。
- 可以給左右角度一個合理的隨機範圍,這樣就不止可以讓樹歪,而是變得有層次感。
暫時想到這麼多,挺晚了,該睡了,下次有機會再實現。