将分形从纸上带走

分形是你在学习计算机科学和编程算法时可能遇到的最奇怪的东西之一。来自维基百科:“分形是一个数学集合,其分形维数通常超过其拓扑维数,并且可能介于整数之间。” 这是一个非常奇怪的概念——你可以拥有像图像这样的东西,它不是由线条或表面组成的,而是介于两者之间的东西。 “分形”一词由 Benoit Mandelbrot 于 1975 年创造。

分形的一个关键特性是它们是自相似的。 这意味着,如果您放大分形,它看起来会类似于分形最初的样子。 递归的概念在这里也非常重要。 许多类型的分形算法使用递归来生成给定集合中的值。 几乎每个人都见过计算机生成的经典分形图像,例如曼德勃罗集或康托集。 关于所有这些经典图像的一件事是它们是二维的(或者实际上大于一维且小于二维,如果你想吹毛求疵的话)。 但是没有任何东西迫使情况如此。 分形可以是任何维度,包括大于二维。 借助现代 3-D 显卡,您没有理由不能检查这些并使用它们。 现在你可以了,使用软件包 Mandelbulber

Mandelbulber 是一个实验性的开源软件包,可让您渲染三维分形图像并与之交互。 它使用 GTK 工具包编写,因此 Windows 和 Mac OS X 以及 Linux 都有下载版本。 实际上,大多数 Linux 发行版都应在其软件包管理系统中包含它。 如果没有,您始终可以下载源代码并从头开始构建它。

如果您想获得有关 Mandelbulber 可能实现的功能的一些灵感,我强烈建议您去查看使用此软件生成的图像库。 那里有一些真正创新且令人惊叹的图像,其中一些图像包含您需要自行重新生成图像的参数。 Mandelbulber Wiki 提供了大量信息。 当您阅读完本文后,请查看您可以使用 Mandelbulber 执行的所有其他操作。

当您首次启动 Mandelbulber 时,会打开三个窗口。 第一个是参数窗口(图 1)。 最上方是两个主要按钮:渲染和停止。 下面是 12 个按钮的列表,这些按钮会拉出不同的参数窗格。 您将获得一组初始默认参数,这些参数将生成经典曼德勃罗集的 3-D 版本。 单击渲染按钮将开始渲染过程。 如果您的机器上有多个内核,Mandelbulber 将抓取它们以帮助加快计算速度。

图 1. 主窗口为您提供控制分形生成的所有参数。

渲染的绘图将绘制在其自己的窗口中(图 2)。 第三个窗口向您显示渲染进度的某些度量(图 3)。 您将获得两个直方图,描述迭代次数和步数。

图 2. 这是默认的 3-D 分形的样子。

图 3. 渲染进度的直方图

要生成新图像,Mandelbulber 的安装中包含 70 多个示例,您可以将它们用作起点。 单击“加载示例”按钮会弹出一个文件对话框,您可以在其中加载其中一个示例。 例如,您可以加载“menger sponge.fract”。 单击渲染按钮将生成 3-D Sierpinski 海绵(图 4)。 虽然从技术上讲,该集合只有一个拓扑维度,该维度包围零体积(分形不是很奇怪吗?)。

图 4. Sierpinski 海绵具有无限的表面积和零体积。

您可以在 Mandelbulber 中更改什么? 单击分形按钮会拉出窗格,您可以在其中设置分形本身的参数(图 5)。 您可以从几种不同类型的分形公式类型中进行选择,例如 mandelbulb、四元数或 menger 海绵。 您可以设置几个选项,具体取决于您选择的分形类型。 例如,如果您选择迭代函数系统 (IFS),则可以单击 IFS 选项卡来设置几个不同的参数。

图 5. 有几种不同的分形类型可供选择。

问题之一是想出真正独特且美观的方程组来进行实验。 为了帮助解决这个问题,Mandelbulber 在分形类型列表中提供了一个混合选项。 当您选择此选项时,您可以选择混合按钮并设置最多五个不同的分形方程(图 6)。 使用此选项,您可以创建非常复杂和精细的分形进行渲染。

图 6. 您可以创建一个由最多五种不同分形类型混合而成的混合系统。

Mandelbulber 不仅生成这些高维分形的静态图像。 还有一个选项可以生成动画,显示当某些参数被扫描时这些图像如何变化。 首先,您需要单击视图窗格底部的“时间线”按钮。 这将弹出一个时间线窗口,您可以在其中设置用于生成动画的参数。 “记录”按钮将参数放入实际的关键帧编号(右侧的“关键帧编号”字段)。 然后,如果不是最后一个关键帧,它会加载并渲染下一个关键帧。

然后,您可以使用“之后插入”按钮添加新的关键帧,或使用“删除”按钮删除关键帧。 要修改给定的关键帧,您可以双击它来设置参数,然后单击“记录”来渲染关键帧。

关键帧之间的插值由 Catmull-Rom 样条处理。 处理完关键帧后,您需要渲染完整的动画。 单击主窗口中的“动画”按钮会弹出您可以设置的参数。 这些参数包括要从关键帧渲染的帧数,以及起始和结束帧编号。 然后,您可以单击“从关键帧渲染”按钮来生成动画。 在我的上网本上,这是一个相当长的过程。 对于图像生成,您还可以控制相机位置、照明和着色器选项。 您应该能够生成您想要的确切图像或动画。

如果您希望为科幻题材生成一些令人惊叹的 3-D 景观或独特的形状,您绝对应该查看 Mandelbulber——只需准备好在您开始摆弄所有可用参数时丢失几个小时。

加载 Disqus 评论