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