实验报告:科赫雪花分形绘制

软件工程24-3班黄甘露 3242052051056

一、实验目的

  1. 理解递归算法的思想,掌握递归函数的编写方法,明白递归终止条件与递归递推过程的作用。
  2. 学习 Python 中 turtle 绘图库的基础使用,掌握画笔移动、转向、画布设置等绘图操作。
  3. 认识分形图形的自相似特征,观察不同阶数的科赫雪花图形变化,理解分形几何的特点。
  4. 学会将数学上的分形规则转化为程序代码,锻炼利用程序实现图形绘制的逻辑思维。
    二、实验环境
    操作系统:Windows 开发工具:PyCharm Community Edition 编程语言:Python 3.x 依赖库:Python 内置 turtle 库(无需额外 pip 安装)
    三、实验内容
    科赫雪花是典型的分形图形,由三条科赫曲线首尾相连构成。
    • 0 阶科赫曲线:直接绘制一条直线,对应 0 阶雪花是等边三角形,为递归的终止条件。
    • 当阶数 n>0 时,将一条线段平均分为三等份,中间一段替换为两条夹角 60° 的线段,形成凸起;这个变换过程对每一小段递归重复执行,阶数越高图形细节越丰富。
    实验要求实现 0~4 阶科赫雪花的绘制,编写递归函数koch_curve()绘制单条科赫曲线,再编写koch_snowflake()函数循环 3 次绘制曲线并旋转 120° 拼接成雪花图形。依次修改阶数参数,观察 0、1、2、3、4 阶雪花的绘制效果。

完整实验代码:
import turtle

def koch_curve(length, level):
if level == 0:
turtle.forward(length)
else:
for angle in [0, 60, -120, 60]:
turtle.left(angle)
koch_curve(length / 3, level - 1)

def koch_snowflake(length, level):
for _ in range(3):
koch_curve(length, level)
turtle.right(120)

if name == "main":
turtle.setup(600, 600)
turtle.speed(0)
koch_snowflake(300, 3) ##修改koch_snowflake(300, 3)第二个参数,分别填入 0、1、2、3、4,即可绘制对应阶数的雪花。
turtle.hideturtle()
turtle.done()

四、实验结果

  1. 阶数 0:图形为简单等边三角形,没有任何凸起,是科赫雪花的基础原型。
    PQL}BR2YR40YXW2O3N}}WH3

  2. 阶数 1:三角形的每一条边中间向外凸起一个小三角形,轮廓初步出现锯齿。
    YXREU62`%NKN{0%EWHWIUA

  3. 阶数 2:每一段锯齿边再次细分凸起,锯齿数量成倍增加,雪花轮廓更加明显。
    95V3FH6JN(QITZGGA90PV6

  4. 阶数 3:锯齿细节丰富,已经是大家熟悉的雪花样式。
    UL1F1ASE`6@9_W9H}35H6S

  5. 阶数 4:图形细节非常密集,绘制耗时变长,分形的自相似特点清晰,放大局部和整体形状相似。
    VKYY9U353S0ISC2T(_(AKT

五、实验心得
本次实验让我直观体会了递归的魅力。递归最重要的就是设置好终止条件,如果缺少 level==0 的判断,程序就会无限递归、报错崩溃。科赫雪花每一小段的图形和整体结构是相似的,这就是分形自相似的特点,用递归实现这种重复变换非常简洁,相比循环写法逻辑更贴合数学定义。
同时我也熟悉了 turtle 库绘图,明白了画笔转向、移动的控制方式。实验中我发现阶数越高,计算量越大,绘图速度会明显变慢,让我意识到递归虽然代码简短,但存在一定的性能开销。
通过这次实验,我学会了把抽象的几何规则翻译成代码,不再只停留在看懂语法,而是可以用程序实现有趣的图形。后续我也会继续练习递归,尝试其他分形图案,加深对递归和分形的理解。

posted @ 2026-10-21 19:18  煮煮煮猪  阅读(13)  评论(0)    收藏  举报