放大 Mandelbrot 时计算动态迭代值

Calculate a dynamic iteration value when zooming into a Mandelbrot

我正在尝试弄清楚如何在 Mandelbrot 分形中移动时自动调整最大迭代值。

我发现的所有示例都使用 1000 或更小的常数,但在放大分形集时这还不够。

有没有办法根据您在 Mandelbrot space 中的位置来确定 max_iterations 的数量(x_start、x_end、y_start,y_end)?

我尝试的一种方法是重复预处理 Mset 边界区域中的一个小区域,并增加迭代次数,直到状态从一次重复到下一次重复的百分比变化很小。问题是,这会在当前地图上的不同位置发生变化,因为 "depth" 在地图上各不相同。如何找到合适的地方做呢?通过记录上一代的 "deepest" 边界区域(仍将在下一个缩放区域内)。

但我最好的策略是尽可能避免迭代:

远离Mset的边界,等深度的区域可以"contoured"然后用那个深度填充。这不是一个简单的算法。基本上我遵循了光栅扫描,但是当我检测到迭代变化的边界时(检查所有邻居以确保我没有靠近 Mset 的边缘),我会切换到曲线缝合方法以围绕轮廓返回迭代到它开始的地方(显然不是重新计算我已经做过的点),然后第二次通过迭代级别填充 countour 内的栅格线。它充满了漏洞,但最终我破解了它。

在 Mset 中,我采用了相同的方法,因为你最不想做的就是跨越广阔的区域并达到迭代限制。

困难区域靠近边界,迭代结果不能与邻居的平滑轮廓相关联。轮廓拼接方法在这里不起作用,因为特定深度只有 1 个像素。

使用等高线方法也会对该区域的下侧或 Mset 侧产生故障,但由于在放大更深之前该区域看起来很混乱,所以我接受了。

所以说了这么多,我只是将迭代深度设置得尽可能高,但也许你可以将我的第一段与区域填充技术结合起来。

顺便说一下,尝试对缩放进行动画平滑播放时,为 Mset 附近的区域着色看起来很糟糕。出于这个原因,我通过与邻居进行比较,将这个区域涂成灰色。如果差异太大,我首先着色为 0x808080,然后根据邻居深度的优势进行调整。都需要微调!