我可以生成从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问题,但我仍然不明白。请帮帮我。
答案 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
来覆盖图像的非方形宽高比。