python:利用递归函数进行分形树的绘制
利用递归函数进行分形树的绘制
要绘制分形树,不能不提到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()