tsu.xxw 发表于 2022-1-11 12:06

python利用函数递归绘制雪花图形

在学习函数递归的过程中,课程老师介绍了一个很有趣的小例子,利用turtle和函数递归绘制科赫雪花,效果如下:
科赫曲线:仔细观察可以发现,雪花的边缘和雪花的整体结构之间存在着一定的相似性,这种相似性就是科赫曲线的数学描述
光看定义可能不太明白,下面上图

是不是已经有雪花的雏形了呢,接下来我们来绘制
首先定义一个科赫函数,两个参数分别为想要绘制直线的长度和绘制的阶数n:
def koch(size,n):
然后用分支结构区分基例(最简单的情形)和链条(每一次递推的具体过程)
    if n == 0:                              
      turtle.fd(size)
    else:
      for angle in :         
            turtle.left(angle)
            koch(size/3,n-1)
到这,其实就已经结束了,我们给出计算机第一次怎么绘制,之后的绘制按照这个递归就可以一直执行下去,怎么样,递归是不是很有趣,接下来完成绘制的过程
我们引入turtle库
设置画布的尺寸,画笔的大小,出发点,速度
turtle.setup(600,600)               
    turtle.penup()                           
    turtle.goto(-200,100)                  
    turtle.pendown()                     
    turtle.pensize(2)                  
    turtle.speed(speed=6)               
    level=3      
接下来调用刚才的科赫函数进行绘制,绘制的过程按照等边三角形为框架,先直边,然后两个斜边进行绘制,完整代码和注释见下
import turtle

def koch(size,n):
    if n == 0:                               #对于科赫雪花,如果考虑最简单的情形,就是一条直线
      turtle.fd(size)
    else:
      for angle in :         #绘制方向从0°,然后抬起60°,然后向下120°,再向上60°回到水平,相当于等边三角形去掉下底
            turtle.left(angle)
            koch(size/3,n-1)               #运用递归,上面只给出第一次画的方法,剩下的n-1次全部如此

def main():
    turtle.setup(600,600)                  #设置画布尺寸
    turtle.penup()                            #抬起画笔
    turtle.goto(-200,100)                   #画笔上指定位置
    turtle.pendown()                     #落笔
    turtle.pensize(2)                   #设置画笔尺寸为2像素
    turtle.speed(speed=6)                #控制小海龟的移动速度,0和10最大,6正常
    level=3                              #传入koch雪花函数的参数,3,即在每条边上进行三次迭代
    koch(400,level)                      #开始绘制等边三角形第一条边(横着的边)的雪花图形
    turtle.right(120)                  #画笔方向向下旋转120°,进行第二条边绘制
    koch(400,level)                      #开始绘制等边三角形第一条斜边
    turtle.right(120)                  #画笔再次旋转,此时指向了起始点
    koch(400, level)                      #开始绘制等边三角形第二条斜边
    turtle.hideturtle()                   #隐藏画笔

main()                        #调用函数开始绘制

其实这个科赫雪花是最基础的,我们还可以修改雪花的颜色,雪花的数量,还可以再写一个函数,让雪花实现飘落的效果,也可以修改科赫曲线的旋转角度,基础框架的形状等等
非常希望这个案例能够激发大家的兴趣,动手一起敲代码,看到图形那一刻会非常有成就感。

素问何问 发表于 2022-1-11 14:26

要想学会递归,你必需先学会递归

vethenc 发表于 2022-1-11 12:30

感谢分享,期待下一期出个白雪公主

ghoob321 发表于 2022-1-11 15:17

感谢分享

xyl52p 发表于 2022-1-11 16:25

看着挺酷的,一行行代码变成了好玩的图形了,厉害!

15555549980 发表于 2022-1-11 19:32

页: [1]
查看完整版本: python利用函数递归绘制雪花图形