Python turtle 绘制科赫雪花,实现 0~4 阶分形图形 前言分形几何是一个非常有意思的数学分支和我们平时学的欧式几何不一样分形图形拥有自相似性把图形的局部放大之后局部的形状和整体高度相似。科赫雪花也叫科赫岛是入门分形最经典的例子。本次课程作业要求使用 Python基于 turtle 海龟绘图库实现可以指定阶数的科赫雪花支持 0 阶到 4 阶的绘制。阶数越低图形越简单阶数越高雪花边缘的锯齿细节越多曲线越细腻。通过这个实验我们可以直观感受递归算法的魅力理解递归的终止条件、递归调用、参数传递这些核心内容同时熟悉 turtle 绘图库的基础 API。很多初学递归的同学会觉得递归很难看懂但是科赫雪花这个例子可视化效果很强代码运行起来可以一步步看到画笔绘图的过程很适合用来破除对递归的畏难心理。需求说明编写 Python 程序绘制科赫雪花要求支持输入阶数 nn 的取值范围0、1、2、3、40 阶等边三角形1~4 阶按照科赫曲线分形规则迭代阶数越高细节越丰富使用内置 turtle 库无需额外 pip 安装第三方包代码结构分为两层底层绘制单条科赫曲线上层调用三次曲线拼成闭合雪花。原理讲解首先我们先搞懂科赫曲线的规则科赫曲线是科赫雪花的基础递归终止条件当阶数 level 0 的时候不再拆分画笔直接向前画一条固定长度的直线如果阶数 level 0把当前线段平均分成三等份舍弃中间那一段替换成两条线段形成一个凸起的等边三角形转角依次是左转 60 度、右转 120 度、左转 60 度每一次递归调用的时候线段长度都变成原来的 1/3阶数减 1持续拆分直到降到 0 阶触发出口。而科赫雪花就是由三条科赫曲线首尾相连围成的闭合图形。画完一条科赫曲线之后海龟向右转 120 度连续画三次刚好围成一个雪花轮廓。这里简单介绍各阶形态0 阶等边三角形没有任何锯齿1 阶三角形的三条边每一条边都变成一个凸起2 阶上一阶里面每一条小线段再次拆分凸起锯齿数量翻倍3 阶典型的雪花样子分形特征明显4 阶锯齿非常密集边缘接近平滑曲线绘图耗时明显变长注意阶数不要继续往上加5 阶及以上计算量会爆炸绘图速度极慢。完整代码import turtle def koch_curve(length, level): 绘制单条科赫曲线 :param length: 当前这条线段的总长度 :param level: 当前递归阶数 # 递归出口阶数为0直接画直线 if level 0: turtle.forward(length) else: # 四段拆分前进1/3左转60前进1/3右转120前进1/3左转60前进1/3 for angle in [0, 60, -120, 60]: turtle.left(angle) koch_curve(length / 3, level - 1) def koch_snowflake(length, level): 绘制完整科赫雪花三条科赫曲线组成 :param length: 0阶三角形的边长 :param level: 雪花阶数 0~4 for _ in range(3): koch_curve(length, level) turtle.right(120) if __name__ __main__: # 画布基础设置 turtle.setup(width700, height700) turtle.speed(0) # 绘图速度0为最快数字1~10逐渐加快 turtle.pencolor(steelblue) turtle.pensize(1) # 抬笔移动位置防止初始画线 turtle.penup() turtle.goto(-200, 100) turtle.pendown() # 修改第二个参数切换0~4阶雪花 order 3 print(f正在绘制{order}阶科赫雪花请稍等...) koch_snowflake(350, order) turtle.hideturtle() # 绘图完成后保持窗口需要手动关闭 turtle.done()代码逐段解析导入 turtle 库 turtle 是 Python 自带的海龟绘图库专门用来做入门图形绘制不需要额外安装。koch_curve 函数核心递归函数 这是整个程序的重点。level0 就是递归的出口避免无限递归。当阶数大于 0 时循环 4 次递归调用每次线段长度除以 3阶数减一配合角度转向完成一段科赫折线。koch_snowflake 雪花组装函数 循环三次调用科赫曲线每次画完一条曲线右转 120°三条拼接闭合形成雪花。画布配置部分 setup 设置窗口大小speed (0) 关闭动画延迟加速绘图penup/goto 用来移动画笔到合适位置避免一开始拖动出多余线条pencolor 可以自定义画笔颜色。不同阶数效果说明order0等边三角形没有分形凸起是雪花最基础的原型order1三条边各出现一个尖角能看出基础变形order2尖角上继续长出更小的尖角分形特征开始明显order3大众印象里标准的科赫雪花锯齿均匀美观order4细节拉满锯齿非常多绘制时间会明显增加耐心等待画布渲染。知识点总结递归算法函数调用自身设置明确终止条件层层分解问题分形与自相似局部结构和整体结构保持一致是分形最核心的特点turtle 库常用 APIforward 前进、left/right 转向、penup 抬笔、pendown 落笔、goto 坐标移动角度几何利用等边三角形内角 60°、外角 120°控制画笔转向算法复杂度阶数每升高一级绘图的线段数量会快速增长属于指数级增长。调试踩坑记录问题 1图形画出来对不上形状错乱 原因转向角度写错60、-120、60 这个序列不能随便改动角度错了整个分形就变形。问题 2递归无限循环程序卡死 原因忘记写 level0 的递归出口函数会无限调用自己直接栈溢出。问题 3雪花超出画布看不见 解决调整 goto 的坐标或者缩短初始 length 边长把图形往画布中间放。拓展方向我们还可以继续丰富这个项目写循环一次性在画布上画出 0 到 4 阶 5 个雪花并排对比增加填充颜色给雪花上色增加键盘输入交互运行时手动输入想要绘制的阶数改造为科赫曲线动画放慢绘图速度观察递归绘制顺序。