下面是在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()
解释:
-
导入turtle库,使用其中的函数及方法来绘制图形。
-
定义函数
draw_branch(branch_length, pen_size)起始朝向向右,传入branch_length及pen_size两个参数,分别表示当前树枝长度及笔的大小。当树枝长度低于5时停止递归。 -
绘制右侧树枝:根据传入的
branch_length长度和pen_size的笔宽,向前移动并绘制一段线,然后向右旋转20度,并执行递归函数调用,将当前树枝长度减去15,笔的大小减去1传给下一次递归。 -
绘制左侧树枝:向左旋转40度,执行递归函数调用。
-
回溯到原来位置:向右旋转20度,后退到开始位置,准备绘制下一棵树枝。
-
定义函数
draw_tree(),该函数用于绘制整颗树,包括树干及树枝。 -
设定起始位置及朝向:首先向左旋转90度,以便绘制垂直的树干,然后向后移动200个像素,准备开始绘制树干。
-
绘制树干:向前移动60个像素,在良好的位置上开始绘制。
-
绘制树枝:根据定义的递归函数绘制树枝。
-
画完后隐藏turtle:为了美观和满足完整性,添加该行代码,所有几何体绘制结束后隐藏turtle。
-
启动turtle模块,开始绘制树:调用
draw_tree()函数,将速度调到最快,绘制出你所期望的银杏树。
注意:
-
该层递归函数的函数调用次数通过
branch_length与pen_size变量来判断,并用递归树画出的可视方式进行追踪。调用层数的增加会导致上一层的函数转入等待状态,在等待中被保持在操作系统内部的栈中,直到下一层函数返回。 -
银杏树作为一种文化古树,具有生长缓慢、寿命悠久、耐寒抗旱等特点。因此在绘制过程中,请自由发挥,并适度地添加一些细节,如银杏叶的形状、周围环境等等。