我该如何解决我的曼德博集合分形生成器问题?

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

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

通过对该函数进行迭代会产生以下分形图像(忽略颜色):

http://www.embedds.com/wp-content/uploads/2010/01/mandelbrot_set_arduino.png

当您将函数更改为以下内容时(z的三次方):

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

该分形应该渲染出如下图像(再次强调,颜色不重要):

http://www.relativitybook.com/CoolStuff/erkfractals_powers/Mandelbrot_Set_power_z4_1800.gif

(来源: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
点赞
用户3998938
用户3998938

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

我决定使用递归来概括曼德博函数,以供需要的人使用。因此,例如,您可以使用“f(z,c)z ^ 2 + c”或“f(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)
2015-05-15 18:44:25