在放大Mandelbrot

时间:2015-08-07 07:09:59

标签: formula mandelbrot

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

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

有没有办法根据你在Mandelbrot空间(x_start,x_end,y_start,y_end)的位置来确定max_iterations的数量?

1 个答案:

答案 0 :(得分:2)

我尝试过的一种方法是重复预处理Mset边界区域中的一个小区域,迭代次数增加,直到状态从一次重复到下一次重复的百分比变化很小。问题是,当前地图上的不同地方会有所不同,因为“深度”会因此而异。如何找到合适的地方呢?通过记录上一代中的“最深”边界区域(仍将在下一个缩放区域内)。

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

远离Mset的边界,相同深度的区域可以“轮廓化”然后填充该深度。这不是一个简单的算法。基本上我跟着光栅扫描但是当我检测到迭代变化的边界(检查所有邻居以确保我没有接近Mset的边缘)时,我会切换到曲线拼接方法来迭代轮廓它开始的地方(显然没有重新计算我已经做过的点),然后用迭代级别在countour中填充栅格线。它充满了泄漏,但最终我破解了它。

在Mset中,我采用了相同的方法,因为你要做的最后一件事就是犁过大片区域并达到迭代限制。

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

使用轮廓法也会对这个区域的下边或Mset边有缺陷,但由于这个区域看起来很混乱,直到你变焦得更深,我就和它一起生活。

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

当尝试动画平滑播放变焦时,BTW着色与Mset相邻的区域看起来很糟糕。出于这个原因,我通过与邻居比较,将这个区域以灰度着色。如果存在太大差异,我首先将其着色为0x808080,然后根据邻居深度的优势进行调整。都需要微调!