如何放大 mandelbrot 集?

Ale*_*lex 5 zooming mandelbrot

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

makeMandel(minReal, maxReal, minImaginary, maxImaginary);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

How*_*ard 6

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

centerX = (minReal + maxReal)/2
sizeX = maxReal - minReal
Run Code Online (Sandbox Code Playgroud)

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

minReal = centerX - sizeX/2
maxReal = centerX + sizeX/2
Run Code Online (Sandbox Code Playgroud)

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

sizeX = 2^(-zoomLevel) * baseSize
Run Code Online (Sandbox Code Playgroud)

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

sizeY = 2^(-zoomLevel) * baseSize   
minImaginary = centerY - sizeY/2
maxImaginary = centerY + sizeY/2
Run Code Online (Sandbox Code Playgroud)

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