【问题标题】:How can I fix this issue with my Mandelbrot fractal generator?如何使用 Mandelbrot 分形生成器解决此问题?
【发布时间】:2014-10-08 04:19:54
【问题描述】:

我一直在做一个渲染 Mandelbrot 分形的项目。对于那些知道的人,它是通过迭代以下函数生成的,其中 c 是复平面上的点:

function f(c, z) return z^2 + c end

遍历该函数会产生以下分形(忽略颜色):

当你把函数改成这个时,(z的三次方)

function f(c, z) return z^3 + c end

分形应该像这样呈现(同样,颜色无关紧要):


(来源:uoguelph.ca

但是,当我将 z 提高到 3 次方时,我得到的图像与将 z 提高到 2 次方时非常相似。如何正确渲染分形?这是完成迭代的代码:(变量 real 和 imaginary 只是将屏幕从 -2 缩放到 2)

--loop through each pixel, col = column, row = row
local real = (col - zoomCol) * 4 / width
local imaginary = (row - zoomRow) * 4 / width 
local z, c, iter = 0, 0, 0
while math.sqrt(z^2 + c^2) <= 2 and iter < maxIter do
    local zNew = z^2 - c^2 + real
    c = 2*z*c + imaginary
    z = zNew
    iter = iter + 1
end

【问题讨论】:

  • 你在哪里将它提升到 3 的幂?
  • 非常混乱的代码。循环中的c 不是函数f 中的c。最好在循环中使用xy
  • 另外,在 Lua 中你可以编写更简单的代码x,y = x^2-y^2+real, 2*x*y+imaginary
  • 第二张图片似乎是立方 Julia 集,而不是立方 Mandelbrot 集。参见math.rochester.edu/people/faculty/doug/oldcourses/215s98/… 中的图 12.1。
  • 对于立方曼德布罗集,使用x,y= x^3-3*x*y^2+real,-y^3+3*x^2*y+imaginary

标签: lua iteration fractals mandelbrot


【解决方案1】:

所以我最近决定重新制作一个 Mandelbrot 分形生成器,它比我上次的尝试成功得多,因为我的编程技能随着实践而提高。

我决定为任何想要的人使用递归来概括 mandelbrot 函数。因此,例如,您可以使用f(z, c) z^2 + cf(z, c) z^3 + c

这里是为任何可能需要它的人准备的:

function raise(r, i, cr, ci, pow)
    if pow == 1 then
        return r + cr, i + ci
    end
    return raise(r*r-i*i, 2*r*i, cr, ci, pow - 1)
end

它是这样使用的:

r, i = raise(r, i, CONSTANT_REAL_PART, CONSTANT_IMAG_PART, POWER)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-06
    • 2020-03-12
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多