教你如何用代码画一棵银杏树

265 阅读2分钟

下面是在Python中用turtle库绘制银杏树的示例代码和详细教程:

import turtle

def draw_branch(branch_length, pen_size):
    # 递归结束条件
    if branch_length > 5:
        # 绘制右侧树枝
        turtle.pensize(pen_size)
        turtle.forward(branch_length)
        turtle.right(20)
        draw_branch(branch_length - 15, pen_size - 1)
        
        # 绘制左侧树枝
        turtle.left(40)
        draw_branch(branch_length - 15, pen_size - 1)
        
        # 回溯到原来位置
        turtle.right(20)
        turtle.backward(branch_length)

def draw_tree():
    # 设定起始位置及朝向
    turtle.left(90)
    turtle.penup()
    turtle.backward(200)
    turtle.pendown()
    
    # 绘制树干
    turtle.pencolor('brown')
    turtle.pensize(20)
    turtle.forward(60)
    
    # 绘制树枝
    turtle.pencolor('green')
    draw_branch(120, 10)
    
    # 画完后隐藏turtle
    turtle.hideturtle()

# 启动turtle模块,开始绘制树
turtle.speed(10)
draw_tree()
turtle.done()

解释:

  1. 导入turtle库,使用其中的函数及方法来绘制图形。

  2. 定义函数draw_branch(branch_length, pen_size)起始朝向向右,传入branch_lengthpen_size两个参数,分别表示当前树枝长度及笔的大小。当树枝长度低于5时停止递归。

  3. 绘制右侧树枝:根据传入的branch_length长度和pen_size的笔宽,向前移动并绘制一段线,然后向右旋转20度,并执行递归函数调用,将当前树枝长度减去15,笔的大小减去1传给下一次递归。

  4. 绘制左侧树枝:向左旋转40度,执行递归函数调用。

  5. 回溯到原来位置:向右旋转20度,后退到开始位置,准备绘制下一棵树枝。

  6. 定义函数draw_tree(),该函数用于绘制整颗树,包括树干及树枝。

  7. 设定起始位置及朝向:首先向左旋转90度,以便绘制垂直的树干,然后向后移动200个像素,准备开始绘制树干。

  8. 绘制树干:向前移动60个像素,在良好的位置上开始绘制。

  9. 绘制树枝:根据定义的递归函数绘制树枝。

  10. 画完后隐藏turtle:为了美观和满足完整性,添加该行代码,所有几何体绘制结束后隐藏turtle。

  11. 启动turtle模块,开始绘制树:调用draw_tree()函数,将速度调到最快,绘制出你所期望的银杏树。

注意:

  • 该层递归函数的函数调用次数通过branch_lengthpen_size变量来判断,并用递归树画出的可视方式进行追踪。调用层数的增加会导致上一层的函数转入等待状态,在等待中被保持在操作系统内部的栈中,直到下一层函数返回。

  • 银杏树作为一种文化古树,具有生长缓慢、寿命悠久、耐寒抗旱等特点。因此在绘制过程中,请自由发挥,并适度地添加一些细节,如银杏叶的形状、周围环境等等。