如何放大曼德博集合?

5

我可以从minReal到maxReal和从minImaginary到maxImaginary生成一个400x400的Mandelbrot集图像。因此,

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

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

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

我已经尝试了三天以上,但我真的很困惑。我试图在纸上画表格等来解决它。 我阅读了大多数关于曼德博集合的文档以及一些过去的stackoverflow问题,但我仍然不理解。请帮帮我。


3
在这种情况下,寻找曼德布罗集合并不会对你有太大帮助,因为你的问题也适用于许多领域。你只是在做“坐标变换”的问题,所以这就是你应该研究的内容。 - Roland Illig
1个回答

6
您可以按照以下方式解决。如果您有两个定义:
centerX = (minReal + maxReal)/2
sizeX = maxReal - minReal

您可以通过以下方式计算轴上的延伸:

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

然后,大小是使用缩放级别计算的:
sizeX = 2^(-zoomLevel) * baseSize

同样的公式适用于y和虚数轴。
sizeY = 2^(-zoomLevel) * baseSize   
minImaginary = centerY - sizeY/2
maxImaginary = centerY + sizeY/2

唯一需要定义为常量的是您的baseSize,即当zoomLevel为零时,实轴和虚轴上的扩展。您可以考虑在实轴和虚轴方向上使用不同的baseSize来覆盖图像的非正方形长宽比。


那么对于一个正方形图像,unitSize将是1吗?很抱歉我不明白为什么sizeX等于两个不同的公式。 - Alex
它不等于两个不同的公式(第一个根据定义自动出现)。baseSize只是一个缩放因子。如果您的实际轴在zoomLevel = 0情况下从-2到2(为了覆盖完整集合),则sizeX = 4,因此baseSize = 4。 - Howard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接