And*_*ius 5 formula mandelbrot
我试图弄清楚在 Mandelbrot 分形中移动时如何自动调整最大迭代值。
我发现的所有示例都使用 1000 或更少的常数,但这在放大分形集时还不够。
有没有办法根据例如您在 Mandelbrot 空间(x_start,x_end,y_start,y_end)中的位置来确定 max_iterations 的数量?
我尝试的一种方法是通过增加迭代次数来重复预处理 Mset 边界区域中的一小块区域,直到从一次重复到下一次重复的状态百分比变化很小。问题是,当前地图上的不同位置会有所不同,因为“深度”在整个地图上有所不同。如何找到合适的地方去做呢?通过记录上一代期间的“最深”边界区域(仍将在下一个缩放区域内)。
但我最好的策略是尽可能避免迭代:
远离 Mset 的边界,可以对等深度的区域进行“轮廓绘制”,然后用该深度进行填充。这不是一个简单的算法。基本上我遵循光栅扫描,但当我检测到迭代变化的边界时(检查所有邻居以确保我没有接近 Mset 的边缘),我会切换到曲线缝合方法来围绕轮廓进行迭代到它开始的地方(显然没有重新计算我已经做过的点),然后进行第二次遍历,用迭代级别填充计数内的栅格线。它充满了漏洞,但最终我还是破解了它。
在 Mset 中,我遵循相同的方法,因为您最不想做的事情就是跨越广阔的区域并达到迭代限制。
困难区域靠近边界,迭代结果不能与邻居的平滑轮廓相关。轮廓拼接方法在这里不起作用,因为特定深度只有 1 个像素。
使用轮廓方法也会对该区域的下侧或 Mset 侧产生故障,但由于该区域看起来很混乱,除非您放大得更深,所以我忍受了这一点。
话虽如此,我只是将迭代深度设置为我可以容忍的尽可能高,但也许您可以将我的第一段与区域填充技术结合起来。
顺便说一句,当尝试缩放动画平滑播放时,对 Mset 附近的区域进行着色看起来很糟糕。因此,我通过与邻居进行比较,将这个区域涂成灰度。如果差异太大,我首先将颜色设置为 0x808080,然后根据邻居深度的优势进行调整。都需要微调!