利用递归函数进行分形树的绘制
要绘制分形树,不能不提到turtle,下面将介绍绘制分形树的一些知识及详细步骤。
1.1 Turtle库介绍
Turtle库是Python语言中一个很流行的绘制图像的函数库,想象一个小乌龟,在一个横轴为x、纵轴为y的坐标系原点,(0,0)位置开始,它根据一组函数指令的控制,在这个平面坐标系中移动,从而在它爬行的路径上绘制了图形,绘图方向如下图所示。
1.2 常见函数
turtle.penup() 抬起画笔,之后移动画笔不绘制形状
turtle.pendown() 落下画笔,之后移动画笔绘制形状
turtle.pensize() 设置画笔宽度
turtle.pencolor() 设置画笔颜色,常用的颜色:white black grey darkgreen gold violet purple
turtle.right(degree) 顺时针移动degree°
turtle.left(degree) 逆时针移动degree°
turtle.forward(distance) 向当前画笔方向移动distance像素长度
turtle.backward(distance) 向当前画笔方向移动distance像素长度
2.1 递归函数
函数定义中调用函数本身的方式称为递归,能够非常简洁的解决重要问题,每次函数调用时,各函数逐层结束运算,返回计算结果,要注意终止条件的构建,否则递归无法正常返回结果。
2.2 分形几何学
分形几何学的基本思想:客观事物具有自相似的层次结构,局部与整体在形态、功能、信息、时间、空间等方面具有统计意义上的相似性,称为自相似性。自相似性是指局部是整体成比例缩小的性质。
2.3 代码
import turtle
def draw_tree(size, angle, gap):
if size > 5:
# 绘制右边的树
turtle.forward(size)
turtle.right(angle)
draw_tree(size - gap, angle, gap)
# 绘制左边的树
turtle.left(angle * 2)
draw_tree(size - gap, angle, gap)
turtle.right(angle)
# 最后一层叶子为绿色,其他为树干部分,棕色
if size <= gap:
turtle.pencolor('green')
else:
turtle.pencolor('brown')
# 往回画,回溯到上一层
turtle.backward(size)
def main():
"""
主函数
"""
# 因为树是往上的,所以先把方向转左
turtle.left(90)
# 把起点放到底部
turtle.penup()
turtle.backward(200)
turtle.pendown()
# 传递参数,分别为树的长度,树枝开叉角度,树枝间距
size = int(input('输入树的长度:'))
angle = int(input('输入树枝开叉角度:'))
gap = int(input('输入树枝间距:'))
draw_tree(size, angle, gap)
# 点击才关闭画画窗口
turtle.exitonclick()
if __name__ == '__main__':
main()