【发布时间】: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。最好在循环中使用x和y。 -
另外,在 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