门格尔的海绵分形

门格尔的海绵是一种流行的分形,概括了康托尔集和Sierpinski三角形。其分形维数在2和3之间。

内容

卡尔·门格尔

卡尔·门格尔(1902 - 1985)是20世纪Austrian-American数学家。他的大部分职业生涯是在芝加哥伊利诺理工大学。他对几何学和博弈理论的贡献。但他最出名的是立方体状分形称为“海绵”。

海绵

从一个大坚实的多维数据集。这是零水平。

三等分的大数据集分成子集要= 27个小方块,像一个没有标签的魔方。去除中心立方体的六个面的和立方体的中心。离开这些27 - 7 = 20小一级的多维数据集。

重复这个过程在每一个20立方体生成20 x20 = 400更小的数据集在两个水平。

一次。这是与800年水平三个小立方体和大量的漏洞。

下一个级别呢?

分辨率可在我们的电脑屏幕,或者在打印页面中,几乎没有被超越了三个水平。每个多维数据集只占几个像素和水平四个方块将小20倍。

还有20倍。160000亚像素大小的方块。虽然我不能够把它,我做了完整的一个计算四个级别。它与主存超过32 gb的RAM,我有我的笔记本电脑。它必须使用虚拟存储,跑了近15分钟。

两到三维?

20/27的固体体积减少的一个因素在每个级别。如果你理论上继续过去三个或四个水平,体积趋于零。另一方面,表面变得无限。结果是一个介于两和三维分形。1918年,菲力克斯豪斯多夫分形维数。原来,门格尔海绵的豪斯多夫维数日志(20)/日志(3),约为2.727。

在这个问题上。

到目前为止,我们一直在黑暗中工作。我们做了一些阐述。大立方体开始实际上是纯金(模拟)。

光照射不同表面在不同角度产生不同深浅的黄金。我们现在可以很容易地看到洞。

在两级我们开拓了几乎一半的黄金。

光和阴影,水平三个需要大约5秒来计算和阴谋。它比其他的阴谋,因为有些暗方块边缘开始占据主导地位。

倾斜

如果海绵略微倾斜,你可以看到孔通道一路穿过。

动画

我试着在我所有的博文动画gif。

门格尔

这是我的代码。这个函数门格尔事情开始。有两个输入参数。第一个参数指定所需的水平的改进。一个坚实的多维数据集水平= 0。增加水平由一个繁殖的数量数据集,因此所需的执行时间和内存,20倍。任何水平大于3是不切实际的。

第二个输入参数是真或假。真正的打开camlight所以你可以看到更多的细节。与假没有照明。照明需要更多的时间,特别是如果你希望操纵海绵后计算。

8-by-3数组V提供了一个立方体的顶点半角3。从这个宽度意味着许多后续计算完成没有舍入误差。这是重要的,当数据集的大小图形分辨率的方法。

函数门格尔(水平,点燃)%分形立方体,门格尔海绵。20 ^ %门格尔(高度)生成多维数据集。%门格尔(水平,真正的)是照亮。%门格尔(水平,假)不是照亮,所以更快。
V = [3 3 3;3 3 3;3 3 3;3 3 3;3 3 3;3 3 3;3 3 3;3 3 3];init_fig(点燃)海绵(V级)

海绵

这就是所有的行动发生。这个函数海绵是递归的。它自称反复,传递数组v代表小立方体的顶点。的v数组是获得从原始V3的比例与逆大国和翻译与向量[x y z]由所有可能的组合2,+ 20。一个典型的v

[3 3 3;3 3 3;3 3 3;3 3 3 3 3 3;3 3 3;3 3 3;3 3 3]/ 9 + [0 2 2]

向量[x y z]的坐标立方体中心。的向量是一个MATLAB的数组单例扩张。翻译后的v附近可能没有,但它是什么的某个地方海绵。和所有多维数据集的海绵是达成的递归。

现在一个关键点。这个函数nnz在最内层循环计数的非零组件一个向量。将通过翻译的多维数据集nnz ([x y z])等于01跳过,因为他们正是在分形提供了洞的多维数据集。

函数海绵(v,水平,点燃)如果水平> 0 v = v / 3;x = (2 0 2)y = (2 0 2)z = (2 0 2)如果nnz ([x y z]) > 1海绵(v + [x y z],第1层,点燃)结束结束结束结束其他的多维数据集(v,点燃)结束结束

多维数据集

这个函数使用补丁绘制一个黄金的立方体的六个面。如果需要照明一些镜面反射率参数设置材料

函数多维数据集(v,点燃)f = [1 5 7 3 3 7 8 4 1 3 4 2 2 4 8 6 1 2 6 5 5 6 8 7];黄金= [1 .85 .60];p =补丁(顶点= v,面临= f,FaceColor =金,线宽= 0.5);如果亮金色= (0.7,0.5,0.3,1.0,0.2);材料(p,金色)结束结束

init_fig

轴和初始化图,如果需要,光指着立方体的观看位置。这个名字windowbuttonmotionfcnMATLAB中最长的标识符和一个非常方便的功能。我们这里需要一个灯当我们旋转一个海绵。

函数init_fig(点燃)轴(4 *[1 1 1 1 1 1])轴平等的vis3drotate3d视图(60,15)如果点燃camlight (-45, 10);集(gcf,“windowbuttonmotionfcn”,@wbmf);结束结束

wbmf

函数甘氨胆酸wbmf (~。~) =;l = findobj (,“类型”,“光”);camlight (l, -45, 10);结束

软件

我的代码是可用的在这里

了解更多

网络上有很多门格尔海绵。人们建造了那些你可以穿过。人用3 d打印机打印。谷歌“门格尔海绵图像”,点击“查看所有”。

维基百科有一篇好文章。https://en.wikipedia.org/wiki/Menger_sponge

我特别喜欢这个视频。https://www.youtube.com/watch?v=fWsmq9E4YC0

纽约时报甚至有一篇文章。https://www.nytimes.com/2011/06/28/science/28math-menger.html

谢谢

由于Ed天使向我介绍门格尔的创建和鲍勃·布莱恩与图形一些急需的帮助。




发表与MATLAB®R2021a

|

评论

要发表评论,请点击此处登录到您的MathWorks帐户或创建一个新帐户。