我一直致力于一个呈现Mandelbrot分形的项目。对于那些知道的人来说,它是通过迭代以下函数生成的,其中c是复平面上的点:
function f(c, z) return z^2 + c end
迭代该函数会产生以下分形(忽略颜色):
当你将功能改为此时,(z升至三次幂)
function f(c, z) return z^3 + c end
分形应该像这样渲染(再次,颜色无关紧要):
然而,当我将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
答案 0 :(得分:0)
所以我最近决定重新制作一个Mandelbrot分形发生器,它比我上次的尝试更成功,因为我的编程技巧随着练习而增加。
我决定使用递归来为任何想要它的人推广mandelbrot函数。例如,您可以执行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)