代码之家  ›  专栏  ›  技术社区  ›  Alex

有助于渲染Mandelbrot集

  •  4
  • Alex  · 技术社区  · 15 年前

    我不是在寻找一个完整的解决方案(自然地),我是在寻求关于复数轨道的帮助。

    Complex 从复平面上的一点导出的数。我现在需要迭代它的轨道序列,并根据轨道是否增加了数量级来绘制点。

    如何收集复数的轨道?任何指导都很受欢迎(链接等)。测试轨道序列所需数学函数的任何指针,例如。 Math.pow()

    再次感谢,

    4 回复  |  直到 15 年前
        1
  •  7
  •   Guffa    15 年前

    显示Mandelbrot集时,只需将真实平面和imaginaty平面分别转换为x和y坐标。

    例如复数 4.5 + 0.27i 翻译成 x = 4.5, y = 0.27

    Mandelbrot集是方程 Z = Z² + C 永远不要达到| Z |>=2的值,但实际上,在特定的迭代次数(例如1000次)内,包含值不超过2的所有点。要获得通常在集合中看到的彩色渲染,可以将不同的颜色指定给集合外的点,具体取决于它们达到限制的速度。

    因为它是复数,所以方程实际上是 Zr + Zi = (Zr + Zi)² + Cr + Ci

    这是我的多线程Mandelbrot生成器的图像:)

    Mandelbrot set

        2
  •  3
  •   P i    15 年前

    所以曼德尔布罗特集中的唯一点就是中间的大的无聊的颜色。你所看到的所有漂亮的颜色,只不过代表了边界附近(但错误的一面)的点旋转到无穷远的速度。

    在mathspeak中,

    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趋于无穷大)是零,那么它就在。否则不行。

        3
  •  1
  •   duffymo    15 年前

    Wolfram Mathworld有一个 nice site

    一个复杂的类将是最有用的。

    比如说 this

    除了正弦、余弦、指数等函数外,你还必须知道如何用复数进行加法、减法、乘法、除法和幂运算。如果你不知道这些,我就从这里开始。

    Ruel V. Churchill "Complex Variables" .

        4
  •  0
  •   DNA    15 年前
    /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