引言
大家好!今天我们来聊聊数学中的一个有趣的概念—谢尔宾斯基地毯(Sierpinski Carpet)。这不仅仅是一个抽象的数学图形,它也给了我们一个非常直观的例子来了解分形几何。最重要的是,我们还可以利用 Python 来进行可视化,感受这份数学美感。
什么是谢尔宾斯基地毯?
谢尔宾斯基地毯是由波兰数学家谢尔宾斯基(Wacław Sierpiński)提出的一种分形图形。简单来说,谢尔宾斯基地毯是通过不断地对一个正方形进行分割和删除操作,最终形成的图形。它看起来像是一个充满小孔的正方形地毯。
其构建规则是这样的:
- 从一个正方形开始。
- 将正方形分为 9 个小正方形(如同 3x3 的网格)。
- 删除中间的那个小正方形。
- 对剩下的 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 次。
结果展示
运行这段代码后,你将看到一个充满小孔的正方形图案,这就是谢尔宾斯基地毯。当递归深度增大时,图案会变得更加复杂,细节部分越来越精细。

递归与分形几何
谢尔宾斯基地毯是一个典型的分形图形,它具有自相似性——即图形的每一部分都与整体结构相似。分形几何是数学
中的一个重要领域,描述了那些具有复杂结构但规则的几何形状。通过递归算法,我们能够轻松地在计算机上实现这种复杂的结构。
扩展与挑战
- 更高的递归深度:可以通过增加递归的层数,进一步增加谢尔宾斯基地毯的复杂性,但要注意,递归层数过高会导致计算量增大,渲染速度变慢。
- 颜色变化:你可以尝试修改正方形的颜色,通过颜色渐变来展示更丰富的视觉效果。
- 生成其他分形图形:除了谢尔宾斯基地毯,还有很多其他有趣的分形图形,比如谢尔宾斯基三角形、曼德博集合等,都可以通过 Python 来绘制。
总结
今天我们通过 Python 的递归函数,成功地绘制了谢尔宾斯基地毯,并深入了解了分形几何的基础概念。谢尔宾斯基地毯不仅是数学中的一种有趣图形,它还帮助我们理解了如何通过递归算法生成复杂的图案。
如果你对分形几何感兴趣,使用 Python 进行可视化是一个非常好的练习方式。希望这篇文章能够激发你深入探索分形世界的兴趣,欢迎在评论区分享你的想法和实践经验!