引言

大家好!今天我们来聊聊数学中的一个有趣的概念—谢尔宾斯基地毯(Sierpinski Carpet)。这不仅仅是一个抽象的数学图形,它也给了我们一个非常直观的例子来了解分形几何。最重要的是,我们还可以利用 Python 来进行可视化,感受这份数学美感。

什么是谢尔宾斯基地毯?

谢尔宾斯基地毯是由波兰数学家谢尔宾斯基(Wacław Sierpiński)提出的一种分形图形。简单来说,谢尔宾斯基地毯是通过不断地对一个正方形进行分割和删除操作,最终形成的图形。它看起来像是一个充满小孔的正方形地毯。

其构建规则是这样的:

  1. 从一个正方形开始。
  2. 将正方形分为 9 个小正方形(如同 3x3 的网格)。
  3. 删除中间的那个小正方形。
  4. 对剩下的 8 个小正方形,重复这个过程。

经过多次迭代,这个图形就会逐渐形成一个看似“空洞”的图案,而这个图案的结构在不同的尺度上是相似的,符合分形几何的特点。

为什么要可视化谢尔宾斯基地毯?

谢尔宾斯基地毯虽然规则简单,但其视觉效果却十分独特。通过 Python 进行可视化,不仅能够帮助我们理解分形的概念,还能为学习分形几何和递归算法提供直观的体验。

用 Python 绘制谢尔宾斯基地毯

我们可以通过 Python 中的 matplotlib 库来进行绘制。matplotlib 是一个非常强大的绘图库,支持丰富的图形和可视化效果,适合用来绘制谢尔宾斯基地毯。

安装所需库

首先,确保你安装了 matplotlib 库。如果没有安装,可以使用以下命令进行安装:

pip install matplotlib

绘制谢尔宾斯基地毯的代码

接下来,我们来写一段代码,生成谢尔宾斯基地毯的图像:

# coding=utf-8
import matplotlib

matplotlib.use('Agg')
import matplotlib.pyplot as plt


def sierpinski_carpet(ax, x, y, size, level):
    """
    绘制谢尔宾斯基地毯的递归函数

    参数:
    ax: 当前的绘图对象
    x, y: 当前正方形的左下角坐标
    size: 当前正方形的边长
    level: 递归的深度
    """
    if level == 0:
        # 到达递归底部,绘制正方形
        ax.add_patch(plt.Rectangle((x, y), size, size, color='black'))
    else:
        # 计算每个小正方形的大小
        new_size = size / 3
        # 递归绘制9个小正方形,去掉中间的一个
        for i in range(3):
            for j in range(3):
                # 中间的正方形不绘制
                if i == 1 and j == 1:
                    continue
                sierpinski_carpet(ax, x + i * new_size, y + j * new_size, new_size, level - 1)


# 创建图形和坐标轴
fig, ax = plt.subplots(figsize=(6, 6))
ax.set_aspect('equal')

# 设置坐标轴范围
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)

# 绘制谢尔宾斯基地毯,递归深度为4
sierpinski_carpet(ax, 0, 0, 1, 4)

# 隐藏坐标轴
ax.axis('off')

# 保存图形
plt.savefig('Sierpinski.png')

代码解析

  • 递归函数:sierpinski_carpet 是一个递归函数,用于绘制谢尔宾斯基地毯。在每一层递归中,都会把当前正方形分成 9 个更小的正方形,并去掉中间的那个。
  • 绘制正方形:使用 plt.Rectangle 来绘制每一个小正方形。当递归深度为 0 时,说明我们到达了最小的正方形,就开始绘制。
  • 递归深度:通过改变 level 参数的值,我们可以控制谢尔宾斯基地毯的复杂度。level=4 表示递归 4 次。

结果展示

运行这段代码后,你将看到一个充满小孔的正方形图案,这就是谢尔宾斯基地毯。当递归深度增大时,图案会变得更加复杂,细节部分越来越精细。

递归与分形几何

谢尔宾斯基地毯是一个典型的分形图形,它具有自相似性——即图形的每一部分都与整体结构相似。分形几何是数学
中的一个重要领域,描述了那些具有复杂结构但规则的几何形状。通过递归算法,我们能够轻松地在计算机上实现这种复杂的结构。

扩展与挑战

  1. 更高的递归深度:可以通过增加递归的层数,进一步增加谢尔宾斯基地毯的复杂性,但要注意,递归层数过高会导致计算量增大,渲染速度变慢。
  2. 颜色变化:你可以尝试修改正方形的颜色,通过颜色渐变来展示更丰富的视觉效果。
  3. 生成其他分形图形:除了谢尔宾斯基地毯,还有很多其他有趣的分形图形,比如谢尔宾斯基三角形、曼德博集合等,都可以通过 Python 来绘制。

总结

今天我们通过 Python 的递归函数,成功地绘制了谢尔宾斯基地毯,并深入了解了分形几何的基础概念。谢尔宾斯基地毯不仅是数学中的一种有趣图形,它还帮助我们理解了如何通过递归算法生成复杂的图案。

如果你对分形几何感兴趣,使用 Python 进行可视化是一个非常好的练习方式。希望这篇文章能够激发你深入探索分形世界的兴趣,欢迎在评论区分享你的想法和实践经验!