科赫曲线,也叫做雪花曲线。是一种分形几何,分形几何是一种迭代的几何图形,广泛存在于自然界中。 科赫曲线是一种迭代的图形,所以我们是可以利用python中的迭代法来绘制。 我们先考虑如何实现迭代。 首先我们确定递归的基例,考虑最基本的情况,就是直接绘制一条曲线,没有任何的改变,即0阶的科赫曲线。
if n==0: turtle.fd(size)
这里的size指的是长度。 然后我们来确定递归的链条。
else: for angle in [0,60,-120,60]: turtle.left(angle) kehe(size/3,n-1)
我们观察每一条线,对每一个三分之一处进行一次转向,角度依次为0、60、-120、60,单位为度。 然后我们加入定义主函数,用来绘制一个科赫曲线。
#科赫曲线 import turtle def kehe(size,n): if n==0: turtle.fd(size) else: for angle in [0,60,-120,60]: turtle.left(angle) kehe(size/3,n-1) def main(): turtle.setup(800,400) turtle.penup() turtle.goto(-300,-50) turtle.pendown() turtle.pensize(2) kehe(600,3) #三阶科赫曲线 turtle.hideturtle() main()
turtle.hideturtle()用来最后将画笔隐藏。 最终画出的效果如下: 而我们希望得到的科赫雪花这是三个上面这样的图形组成而成,这时我们就需要在绘制上面图像的结束时转变角度,然后继续绘制。 代码如下:
#科赫雪花 import turtle def kehe(size,n): if n==0: turtle.fd(size) else: for angle in [0,60,-120,60]: turtle.left(angle) kehe(size/3,n-1) def main(): turtle.setup(600,600) turtle.penup() turtle.goto(-200,100) turtle.pendown() turtle.pensize(2) level=3 #三阶科赫雪花 kehe(400,level) turtle.right(120) kehe(400,level) turtle.right(120) kehe(400,level) turtle.hideturtle() main()
可以最终得出如下图形: 这里我们可以通过改变参数来得到我们所需要的高阶图形,也可以通过加快画笔的速度来缩减画图的所用时间。下面是我改变阶数画出的四阶与五阶的图形。
对于科赫雪花,我们还可以进行拓展,比如我把三边改为四边,将绘制三角形改为四边形进行迭代,有很多种的改变方式,但思路方法一致,下面是我自己随意改变形状所得的图形形状。 整体为三角形,突起为四边形的二阶图形: 整体为三角形,突起为四边形的三阶图形:
整体为三角形,突起为四边形的三阶图形: