我得到了一些关于 Mandelbrot 集的分形可视化的工作。
我不是在寻找一个完整的解决方案(自然),我在寻求有关复数轨道的帮助。
假设我有一个Complex
从复平面上的点派生的给定数字。我现在需要迭代它的轨道序列并根据轨道是否增加数量级来绘制点。
如何收集复数的轨道?非常感谢任何指导(链接等)。测试轨道序列所需的数学函数的任何指针,例如Math.pow()
我正在使用 Java,但这在这里并不是特别重要。
再次感谢,亚历克斯
我得到了一些关于 Mandelbrot 集的分形可视化的工作。
我不是在寻找一个完整的解决方案(自然),我在寻求有关复数轨道的帮助。
假设我有一个Complex
从复平面上的点派生的给定数字。我现在需要迭代它的轨道序列并根据轨道是否增加数量级来绘制点。
如何收集复数的轨道?非常感谢任何指导(链接等)。测试轨道序列所需的数学函数的任何指针,例如Math.pow()
我正在使用 Java,但这在这里并不是特别重要。
再次感谢,亚历克斯
当您显示 Mandelbrot 集时,您只需将实平面和虚平面分别转换为 x 和 y 坐标。
因此,例如复数4.5 + 0.27i
转换为x = 4.5, y = 0.27
.
Mandelbrot 集是方程Z = Z² + C
永远不会达到 |Z| 的值的所有点。>= 2,但在实践中,您包括在特定迭代次数内值不超过 2 的所有点,例如 1000。为了获得您通常看到的集合的彩色渲染,您为外部点分配不同的颜色设置取决于他们达到极限的速度。
因为它是复数,所以方程实际上是Zr + Zi = (Zr + Zi)² + Cr + Ci
。你可以把它分成两个方程,一个用于实平面,一个用于虚平面,然后它就是简单的代数。C 是要测试的点的坐标,Z 的初始值为零。
这是来自我的多线程 Mandelbrot 生成器的图像 :)
实际上,Mandelbrot 集是迭代收敛的复数集。
所以 Mandelbrot 集合中唯一的点就是中间那个大而无聊的颜色。你看到的所有漂亮的颜色只不过代表了边界附近的点(但错误的一侧)旋转到无穷大的速率。
在数学上,
M = {c in C : lim (k -> inf) z_k = 0 } where z_0 = c, z_(k+1) = z_k^2 + c
即选择任何复数 c。现在要确定它是否在集合中,反复迭代它 z_0 = c,z_(k+1) = z_k^2 + c,z_k 将接近零或无穷大。如果它的极限(因为 k 趋于无穷大)为零,那么它在。否则不是。
有可能证明一次 |z_k| > 2,它不会收敛。这是一个很好的优化练习:IIRC |Z_k|^2 > 2 就足够了......无论哪种方式,平方都会为您节省昂贵的 sqrt() 函数。
/d{def}def/u{dup}d[0 -185 u 0 300 u]concat/q 5e-3 d/m{mul}d/z{A u m B u
m}d/r{rlineto}d/X -2 q 1{d/Y -2 q 2{d/A 0 d/B 0 d 64 -1 1{/f exch d/B
A/A z sub X add d B 2 m m Y add d z add 4 gt{exit}if/f 64 d}for f 64 div
setgray X Y moveto 0 q neg u 0 0 q u 0 r r r r fill/Y}for/X}for showpage