分形,噪声和状态变量

2021年1月5日

在这篇博客文章中,我们探索了称为状态变量的ComsolMultiphysics®软件中的强大工具。我们了解它们如何用于产生分形,例如著名的Mandelbrot集和所谓的分形噪声。产生分形并不是状态变量最典型的使用。然而,这篇博客文章是一种具有启发性,有见地和有趣的方法,可以了解有关使用状态变量,复杂算术和随机数的更多信息。

什么是分形?

从广义上讲,分形是在不同尺度上表现出某种形式的自相似性的对象。这听起来可能很抽象,但是分形模式实际上发生在自然界中 - 无论有没有考虑,您都会自己遇到它们。

例如,蕨类植物显示分形图案。下图所示的每个蕨叶由较小的“分支”或细分组成,所谓的小针,沿主茎生长并显示与主叶本身相似的模式。单独的pinnae再次由较小的细分组成(),在某些蕨类植物中可能会细分为较小的部分。

真实的绿色蕨类植物的照片。
计算机生成的Barnsley Fern离开的图像,部分重复结构放大并突出显示。

真正的蕨类植物和计算机生成的Barnsley Fern。

有一个数学对应物,灵感来自自然界中的模式,即巴恩斯利·弗恩(Barnsley Fern)。可以在具有迭代函数的计算机上生成蕨叶的数学表示,仅需要几行代码。所产生的图像类似于蕨类叶子,就像现实世界中的灵感一样,由具有与主叶本身相似的细分组成。实际上,巴恩斯利蕨类植物将经常将其细分为较小的自相似形状,而真正的蕨类植物的自相似性仅在几个层面上。

除了吸引人的外观外,分形实际上具有各种现实世界的应用,如以前的博客文章。另一个应用程序是在计算机生成的图像中,例如在计算机游戏中模仿自然看起来的物体,例如景观,云,树木或其他植物。在此博客文章的稍后,我们将展示如何使用分形模式生成某种逼真的景观。

mandelbrot集

也许最著名的分形之一是mandelbrot设置。简而言之,这是由简单的迭代函数产生的一组复数。一个复杂的数字,C,如果将其插入某个迭代函数和绝对值,则被认为是集合的一部分||z_ \ textrm {n} ||经过许多迭代后,不会发散。要检查一个数字是否是集合的一部分,我们只需将其插入以下公式:

z_ \ textrm {n + 1} = z_ \ textrm {n}^2 + c \ qquad \ textrm {where} \ qquad z_0 = 0

例如,让我们尝试数字C = 1+0.25 i。第一次迭代产生z_1 = 1+0.25 i((||z_ \ textrm {n} || = 1.03), 第二Z_2 = 1.94+0.75 i((||z_ \ textrm {n} || = 2.08), 第三z_3 = 4.19+3.16 i((||z_ \ textrm {n} || = 5.25), 等等。在这种情况下,绝对价值||z_ \ textrm {n} ||似乎有分歧,所以1+0.25 i不是Mandelbrot集的一部分。

计算ComsolMultiphysics®中的Mandelbrot集

实际上,计算comsol多物理学中的mandelbrot设置非常简单。为此,我们创建了一个2D几何形状,我们将其解释为复杂的平面。每个点(x,y)在这个飞机中代表一个复杂的数字c = x+i y我们可以插入迭代方程。我们必须跟踪先前的结果z_ \ textrm {n}计算下一个数字z_ \ textrm {n+1}

当我们面对从上一个计算步骤中跟踪数据的情况时,状态变量特征是一个方便的工具。在里面状态变量功能,我们可以根据需要定义尽可能多的变量。在这种情况下,我们定义两个变量,即Zn光环

状态变量的屏幕截图具有设置窗口,并扩展了状态组件部分。
状态变量的定义。

第一个状态变量跟踪当前值z_ \ textrm {n}在任何给定的迭代步骤以及我们复杂平面中的任何给定点。我们初始化Zn在里面初始值柱子。这更新表达式是我们的迭代功能,我们在结果平方Zn从上一个迭代中,然后添加c = x+i y。我们还添加了第二个状态变量称为光环。我们以零初始化字段,并存储所需的迭代次数,直到绝对值的绝对值Zn大于两个。

可以证明z_ \ textrm {n}最终会分歧||z_ \ textrm {n} ||> 2在某个迭代步骤中。如果我们解决了几个迭代的这些功能并绘制结果,我们将看到Mandelbrot集的出现。

Mandelbrot集及其“ Aura”计算为25次迭代。

黑灰色形状表示曼德布罗特集合的一部分的复数(变量Zn)。在每次迭代中,我们都会更近的近似值,这些数字实际上是集合的一部分。灰色的不同阴影表示Zn。对于某些初始值,C,迭代函数不会收敛到单个值,而是在不同的值之间跳跃,在动画中,它们看起来有点像是在一次打开和关闭的光源。Mandelbrot集合外部的有色字段表示Aura,这表明数字差的速度。我们越接近Mandelbrot集的边界,在绝对值大于两个大于两个之前,需要迭代越多。

曼德布罗特套件接近边界的视图,螺旋结构的300迭代以较浅和较浅的颜色显示,并以紫色包围。
螺旋结构的中心位置c \ of -0.7789333 + 0.1345 \,i使用300次迭代计算。图像跨越0.01和一个高度0.00666

分形噪声

现在,我们获得了分形和状态变量的要旨,让我们看看在计算机生成的图像领域中分形的更实际应用。更具体地说,我们将探讨如何使用所谓的分形噪声来模拟有机纹理。该技术实际上是在Comsol多物理学中使用的,以实现各种材料的现实可视化,我们将在后面讨论。分形噪声的另一个常见应用是在计算机游戏中以过程产生自然的地形。

让我们使用噪音创建人造景观。在此处讨论的上下文中,我们理解噪声是一些随机值。换句话说,我们正在寻找一个功能,说噪音(x,y),它以两个坐标为论点,并返回一个伪数编号。结果被解释为在给定位置处地形的高度。与随机的在comsol多物理学中的功能,我们可以创建所谓的白噪声。如果我们将结果绘制在XY平面中,则数字从一个坐标随机和独立于下一个增量中随机跳跃。显然,这看起来不像现实世界中发现的任何景观,因此我们需要一种更好的方法。

具有均匀分布的白噪声的灰度可视化。
白噪声,分布均匀。值在某些最小值和最大值之间随机跳跃。

珀林噪音

取而代之的是,我们正在寻找产生随机值的噪声函数,同时不应该是“太随机”而自然的。相邻点之间应该有一定的连贯性。珀林噪音,由肯·珀林(Ken Perlin)开发的是一种特殊的噪声形式,它使我们能够为给定坐标产生伪数值,并且噪声值从一个点到相邻点的过渡是平滑的。这种“平稳的随机性”看起来更像是自然界中发现的图案。

三个并排图像显示了如何生成2D Perlin噪声,左侧的网格定义,中心的绝对值以及右侧的插值噪声。
生成2D Perlin噪声:(a)网格定义。红色箭头是随机生成的梯度向量(通过0.5缩放,以更好地可视化)。蓝色箭头从周围的网格点到某个位置(x,y)。(b)使用左下梯度向量的第一个点产物的绝对值。灰度指示0(黑色)和1(白色)之间的值。(c)插值噪声。

生成Perlin噪声涉及上面概述的几个步骤。在第一步中,我们将XY平面分为单位正方形。在每个网格点,我们生成一个长度为一的伪向量,该向量也称为梯度向量(红色箭头)。与一个点相关的四个周围梯度向量(x,y)只是伪随机,因为当我们在同一点重新计算噪声时,它们应该始终相同。使用梯度向量,我们可以开始计算某个点的噪声值(x,y)位于飞机内的任何地方。对于这个给定的点,我们在梯度向量之间计算四个点产物,以及从网格点到所选点的位置向量乐动体育app无法登录(x,y)本身(蓝色箭头)。

d_ \ textrm {i} = \ mathbf g_ \ textrm {i} \ cdot(\ mathbf x - \ mathbf x_ \ textrm {gi})\ qquad \ qquad \ textrm {for}

可以将四个点产物解释为梯度乐动体育app无法登录在所选点上噪声水平的影响。梯度向量之间的点产物,\ Mathbf g_ \ textrm {i},以及位置向量,\ Mathbf X - \ Mathbf X_ \ Textrm {Gi},当两个向量指向相同方向时,达到其最大值,并且当它们彼此垂直时的最小值。生成Perlin噪声的最后一步是计算四个点产品的加权平均值,并返回插值值。乐动体育app无法登录这涉及巧妙选择的平滑步骤功能和线性插值,这确保我们在域上进行平滑过渡。有关如何计算Perlin噪声的更多详细信息参考。1

分形噪声

我们产生的Perlin噪声具有非常平稳的过渡,并且看起来并不像大多数现实世界中的地形一样,在那里我们通常会发现更多的当地不规则性,也许是从山丘或较小的岩石中找到的。解决方案是超越不同的八度噪音,这就是分形的想法发挥作用。基本上,我们以较高的频率或换句话说产生更多的噪声,在相同距离内具有更多的峰和山谷。像音乐中一样,每个八度频率都会加倍。我们降低了高频噪声的幅度,并将其添加到基本噪声中。原则上,我们可以根据需要添加尽可能多的八度噪声。因此,而不是打电话给噪音()函数仅一次,我们现在将其称为多次,并用调整后的振幅将结果汇总。

h(x,y)= \ sum_ {j = 0}^n \ frac {\ texttt {noings}(2^j x,\ 2^j y)} {\ texttt {scale}(j)}

如果我们解释H作为我们景观的高度,第一次迭代(j = 0)产生以大而定义的特征(例如山脉)的第一个平滑近似;第二个迭代可能来自更多的当地山丘和凹陷。第三次迭代可能来自单个巨石和岩层。等等。

四线的视图:顶部的一维分形噪声和下面的Perlin噪声的前三个频率。
1D分形噪声(顶线)。以下是Perlin噪声的前三个频率,将其添加在一起,形成顶部的线。

产生分形噪声涉及使用不同频率的计算和超级噪声。在Comsol多物理学中进行此操作时,使用状态变量再次方便,因为我们想“记住”以前所有频率的组合噪声。以下动画代表了一个2D高度图,其中越来越多的细节出现,每个级别的高频噪声都会添加到基本噪声中。

地形图是由五个珀林噪声的五个频率产生的。轮廓线和不同的颜色代表不同的高度。

随机表面几何形状可用于物理模拟环境中,例如,您需要对表面粗糙度或不均匀材料进行建模。在以前的博客文章中,我们展示了一种不同的方式创建随机表面几何形状通过具有不同幅度和频率的超级构造函数,以及创建任意的方法来自图像或文本文件的几何形状

使用噪音改善材料外观

您是否知道可以在图中添加分形噪声以改善Comsol多物理学中的材料外观?从5.6版开始,有特殊可视化选项用于材料。一些内置材料类型,例如生锈的钢,皮革和水,使用单纯噪声创建更现实的纹理。单纯形噪声与Perlin噪声具有相似之处,也由Ken Perlin开发。您可以自己调整噪声参数以达到所需的效果。

comsol多物理模型构建器具有图形窗口中浅水方程模型的可视化。
使用单纯噪声可视化水中的水浅水方程模型

带有生锈的钢表面的扳手模型通过单纯形噪声可视化。
可视化扳手模型使用单纯噪声带有生锈的钢表面。

自己尝试

是否想尝试对本博客文章中讨论的Mandelbrot集或Perlin噪声进行建模?单击下面的按钮以访问MPH文件。

参考

  1. K. Perlin,“改善噪音”,纽约大学,2002年。https://mrl.cs.nyu.edu/~perlin/paper445.pdf

进一步阅读

在这些相关博客文章中了解有关分形,噪声和状态变量的更多信息:


评论(0)

发表评论
登录|登记
加载...
探索comsol乐动体育赛事播报博客