如何使用Mandelbrot分形发生器解决这个问题?

时间:2014-10-08 04:19:54

标签: lua iteration fractals mandelbrot

我一直致力于一个呈现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 http://eldar.mathstat.uoguelph.ca/dashlock/ftax/Gallery/Mandel2D960.gif

然而,当我将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

1 个答案:

答案 0 :(得分:0)

所以我最近决定重新制作一个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)