渲染分形:莫比乌斯变换和牛顿盆地

3

我知道如何渲染(二维)“逃逸时间群”分形(朱利亚和曼德博集合),但似乎无法渲染一个Mobius变换或者牛顿盆。我尝试使用相同的方法(通过在每个像素上递归地使用多项式方程“n”次),但我有一种感觉这些分形是用完全不同的方法渲染的。Mobius“变换”意味着必须先存在一幅图像,然后对其进行变换以产生几何形状,而牛顿盆似乎绘制每个点,而不仅仅是落入某个集合的点。

这些分形是如何绘制的?它们是否使用与朱利亚和曼德博一样的迭代方法进行绘制?

我正在使用的方程:

Julia: Zn+1 = Zn^2 + C

其中Z是代表像素的复数,C是一个复常数(正确)。

Mandelbrot: Cn+1 = Cn^2 + Z

Z是代表像素的复数,C是复数(0, 0),每个步骤都会复合起来(与朱利亚集相反)。

Newton Basin: Zn+1 = Zn - (Zn^x - a) / (Zn^y - a)

其中 Z 代表表示像素的复数,x 和 y 是不同次数的指数,a 是一个复杂常数(错误 - 创建一个居中的、八条腿的“线性星”)。

Mobius Transformation: Zn+1 = (aZn + b) / (cZn + d)

其中,Z代表一个表示像素的复数,a、b、c和d是复常数(不正确,所有内容都属于该集合)。

那么,牛顿盆和莫比乌斯变换如何在复平面上绘制呢?

更新:莫比乌斯变换就是转换。

"Every Möbius transformation is
a composition of translations,
rotations, zooms (dilations) and
inversions."

执行Mobius变换时,必须先有一个形状、图片、涂抹等才能进行变换。
那么,牛顿盆如何呢?
更新2:我的牛顿盆数学计算有误。方程末尾的分母(应该是)原始函数的导数。可以通过研究MIT MatLab源代码中的“NewtonRoot.m”来理解该函数。搜索引擎可以很容易地找到它。但我仍然不知道如何在复平面上绘制它...
牛顿盆:
f(x) = x - f(x) / f'(x)
1个回答

2
在Mandelbrot和Julia集中,如果内部循环超过了一个特定的阈值作为轨道“达到”无穷大的速度的测量,您将终止内部循环。
if(|z| > 4) { stop }

对于牛顿分形图而言,情况则相反:由于牛顿迭代法通常会收敛于某个特定值,我们更关心它达到极限的速度,这可以通过检查连续两个值之间的差异何时降至某个特定值以下(通常10^-9是一个好的值)来实现。

if(|z[n] - z[n-1]| < epsilon) { stop }

每个像素都是通过使用像素的向量分量创建一个新的复数来计算的,就像曼德博集合一样?换句话说,它是以相同的方式在复平面上逐像素渲染的吗? - MrMysterious2502
@MrMysterious2502 是的,完全正确。因此,它实际上只是一个不同的公式,一个不同的边界条件和颜色条件,您可以使用最后一个角度。 - Searles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接