曼德博集合平滑着色函数

4

我用Python编程实现了Mandelbrot集,但效果很奇怪,所以我寻找了平滑颜色的方法。我编写了一个使用对数和线性插值的平滑着色函数,但无论我尝试什么都达不到想要的效果。

self.palette = [(3, 25, 61),(5, 43, 107),(7, 61, 153),(20, 96, 226),(20, 164, 226),(74, 181, 226),(138, 211, 242),(205, 234, 247),(225, 237, 242),(255,255,255)]

这是我的调色板

if n == self.max_iterations:
    self.screen.set_at((x, y), (110, 13, 13))
else:
    gradient = 1 + n - math.log(math.log(abs(m))) / math.log(2.0)
    iteration = n + 1 - gradient
    color1 = list(self.palette[n % 10])
    if n % 10 <= 8:
        color2 = list(self.palette[n % 10+1])
    else:
        color2 = list(self.palette[-1])

    color = [[], [], []]
    for number, elt in enumerate(color):
        color[number] = color1[number] + (iteration % 1)*(color2[number]-color1[number])

    self.screen.set_at((x, y), tuple(color))

这是我的着色函数:
这是我得到的结果:
如您所见,颜色是平滑的,但方式不对,颜色之间没有连续性。
我希望得到像这样的结果:
理想的结果:
我们看不到颜色间隙。

你是如何生成你的曼德布洛特集合的?我怀疑你可能正在处理分辨率不足够高的数据。 - adrtam
1
一个作弊的方法是:使用滤镜平滑图像,然后再在顶部绘制收敛数据的锐利集合。 - mikuszefski
1
@adrtam 我不认为问题在于分辨率。 - Hugo
@Spektre 我的图片?第二张? - Hugo
1个回答

5

看起来您是根据离散值(n,逃逸时间)选择像素颜色。

我建议:

1)在一维线上绘制颜色与n的关系图。是否连续?如果不是,请选择一个看起来相对于增加的n连续的颜色映射。

2)找到一种使n连续而不是离散的方法。其中一种方法是通过计算视窗的最大逃逸时间,然后将所有其他逃逸时间除以这个值,以产生更连续的场。请参阅此链接有关逃逸时间归一化的信息:
https://linas.org/art-gallery/escape/escape.html

我相信,如果您同时满足上述两个条件,则主图周围的区域将呈现连续状态,而不是具有等高线外观。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接