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 上找到的大多数文档,但我仍然不明白。请帮帮我。
您可以通过以下方式解决。如果你有两个定义
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在实方向和虚方向上不同以覆盖图像的非方形纵横比。