今天用了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()
其中,这里去掉了树干,去掉了树叶,去掉了让树向左歪。图形如下
最后,我们可以继续美化这颗分型树,下面说几点想到的:
- 树干的粗细可以不同,最好从下往上依次变细。
- 树叶可以画的漂亮些,不仅仅是个圆。
- 背景颜色可以改变。
- 树干,树叶颜色可以改变。
- 可以加入一些随机的树叶。
- 可以给左右角度一个合理的随机范围,这样就不止可以让树歪,而是变得有层次感。
暂时想到这么多,挺晚了,该睡了,下次有机会再实现。