Python递归进阶——科赫雪花

发布于:2025-03-05 ⋅ 阅读:(9) ⋅ 点赞:(0)

目录

一、科赫雪花

二、代码部分


一、科赫雪花

科赫雪花是一种经典的几何图形,它是通过递归的方式生成的,而我们现在就用Python的递归函数来绘制一个科赫雪花!

首先我们来了解一下科赫雪花的制作过程:

当雪花是0阶时,雪花是一个等边三角形,且每条边就是一条直线。(终止条件

当雪花的阶数每次加一时,每条边会由上一条边长的三分一的新边长来组成,并且会把新边长复制成相等的四份,然后依次旋转0,60,-120,60度,来构成一个新的边长:

下面我们用图片来更好的理解一下:

我们先来看看0阶的一个边:

就是一条水平的直线

现在我们来看看一阶的:

阶数+1时,就想上面所说的一样,我们得到一个这样的边

这样依次类推,我们的阶数越大,就会得到一个更加复杂的边,再把这样的边进行组合,就得到了一个漂亮的“雪花”

二、代码部分

现在我们根据上面的定义来编写一个Python代码:

在这之前要注意几点:

(1)在Python中我们会用递归函数来解决问题,我们需要先找到终止条件,也就是上面提到的,当阶数是0时,是一条直线。

(2)因为需要绘制出我们可以看的图形,所以需要用到import关键字,这个是用来导入模块的,我们这次是要导入turtle模块,是一个用来绘图的模块。

下面我们来看看代码(激动人心的环节):

import turtle   #导入turtle包

n = int(input("请输入阶数:"))
size = int(input("请输入初始线段长度:"))
def snow(n,size) :  #定义了snow递归函数
    if n == 0 :
        turtle.fd(size)
    else :
        for angle in [0,60,-120,60] :   #for循环让线段分别旋转
            turtle.left(angle)  #让线段逆时针旋转
            snow(n-1,size/3)    #执行完一步后,阶数减一,长度变为原来的三分之一

turtle.setup(800,600)   #显示窗口大小是800x600
turtle.penup()  #抬起笔
turtle.goto(-300,-50)   #找到绘制的初始位置
turtle.pendown()    #把笔放下,开始绘制线条
turtle.pensize(3)   #线条粗细为3px
snow(n,size)    #调用函数
turtle.done()   #绘画完后,保持窗口,毕竟咱还得看看画的啥样子

现在让我们来运行一下看看效果:

先来一个5阶的看看是什么样子的:

如果你和我一样也选择了无阶,那么这真是一场酣畅淋漓的等待(捂脸)

没想仅仅到五阶就这么复杂,但是身为一个追求完美的人,上面这个代码还不够完美,毕竟它只是绘制出了一条边,我们要的可是一整个完美的雪花!!而且他的绘制速度也太慢了,我们现在要对他进行改良:

首先就是速度慢,我们会加入turtle.speed()函数,用来加快绘制速度

其次就是我们要把一条边变成一个完整的“雪花”

改良如下:

import turtle   #导入turtle包

n = int(input("请输入阶数:"))
size = int(input("请输入初始线段长度:"))
def snow(n,size) :  #定义了snow递归函数
    if n == 0 :
        turtle.fd(size)
    else :
        for angle in [0,60,-120,60] :   #for循环让线段分别旋转
            turtle.left(angle)  #让线段逆时针旋转
            snow(n-1,size/3)    #执行完一步后,阶数减一,长度变为原来的三分之一

turtle.setup(800,800)  #显示窗口大小是800x800
turtle.speed(1000)  #提速!!!!!!!!!
turtle.penup()  #抬起笔
turtle.goto(-200,100)   #找到绘制的初始位置
turtle.pendown()    #把笔放下,开始绘制线条
turtle.pensize(2)   #线条粗细为2px
snow(n , size)  #调用函数
turtle.right(120)   #画完后把笔逆时针旋转120°
snow(n , size)
turtle.right(120)
snow(n , size)
turtle.done()   #绘画完后,保持窗口,毕竟咱还得看看画的啥样子

让我们来看一下效果吧:

窝嘞个豆!!!!!!仅仅是三阶就这么好看了,那阶数多了还了得~

以上就是科赫雪花的基本内容:)


网站公告

今日签到

点亮在社区的每一天
去签到