目录
一、科赫雪花
科赫雪花是一种经典的几何图形,它是通过递归的方式生成的,而我们现在就用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() #绘画完后,保持窗口,毕竟咱还得看看画的啥样子
让我们来看一下效果吧:
窝嘞个豆!!!!!!仅仅是三阶就这么好看了,那阶数多了还了得~
以上就是科赫雪花的基本内容:)