如何放大mandelbrot套装?

时间:2011-04-16 12:02:24

标签: zoom mandelbrot

我可以生成从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问题,但我仍然不明白。请帮帮我。

1 个答案:

答案 0 :(得分:4)

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

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来覆盖图像的非方形宽高比。