turtle画分形树

今天用了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()

图形是这样,

turtle画分形树_第1张图片

这个稍微美化了一些,来看个最原始的版本:

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()

其中,这里去掉了树干,去掉了树叶,去掉了让树向左歪。图形如下

turtle画分形树_第2张图片

最后,我们可以继续美化这颗分型树,下面说几点想到的:

  • 树干的粗细可以不同,最好从下往上依次变细。
  • 树叶可以画的漂亮些,不仅仅是个圆。
  • 背景颜色可以改变。
  • 树干,树叶颜色可以改变。
  • 可以加入一些随机的树叶。
  • 可以给左右角度一个合理的随机范围,这样就不止可以让树歪,而是变得有层次感。

暂时想到这么多,挺晚了,该睡了,下次有机会再实现。

你可能感兴趣的:(python)