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

图形是这样,

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

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

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

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

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

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

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值