5

我可以生成从 minReal 到 maxReal 以及从 minImaginary 到 maxImaginary 的 Mandelbrot 集的 400x400 图像。所以,

makeMandel(minReal, maxReal, minImaginary, maxImaginary);

我需要修改它,以便我可以拥有,

makeMandel(centerX, centerY, Zoomlevel);
// generates a region of the mandelbrot set centered at centerX,centerY at a zoom level of Zoomlevel

(考虑缩放级别表示像素之间的距离,由公式缩放级别 n = 2 ^ (-n) 给出,因此缩放级别 1 表示像素相隔 0.5 个单位,缩放级别 2、0.25 等等...)

我的问题是如何从第二个函数的参数计算第一个 makeMandel 函数的参数?我知道第一个函数能够缩放和移动,但我不知道如何计算任何给定中心和缩放级别的正确数字。

我一直试图让这个工作超过三天,我真的很困惑。我试着在纸上画桌子等等……然后把它弄出来。我在搜索 mandelbrot 集和一些过去的 stackoverflow 问题时阅读了您在 Google 上找到的大多数文档,但我仍然不明白。请帮帮我。

4

1 回答 1

6

您可以通过以下方式解决。如果你有两个定义

centerX = (minReal + maxReal)/2
sizeX = maxReal - minReal

您可以通过计算轴上的延伸

minReal = centerX - sizeX/2
maxReal = centerX + sizeX/2

然后使用以下公式计算大小zoomLevel

sizeX = 2^(-zoomLevel) * baseSize

相同的公式适用于y和虚轴。

sizeY = 2^(-zoomLevel) * baseSize   
minImaginary = centerY - sizeY/2
maxImaginary = centerY + sizeY/2

唯一定义为常数的是您的baseSize,即当zoomLevel为零时,实轴和虚轴上的延伸。您可能会考虑baseSize在实数和虚数方向上有所不同,以覆盖图像的非正方形纵横比。

于 2011-04-16T12:13:23.197 回答