Mandelbrot设置平滑着色功能

时间:2019-03-18 20:21:31

标签: python python-3.x math mandelbrot

我用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))

这是我的着色功能

这就是我得到的

如您所见,颜色是平滑的,但是以错误的方式显示颜色没有连续性

我想要这样的东西:

理想结果

我们看不到色差

1 个答案:

答案 0 :(得分:2)

您似乎正在根据离散值(n,转义时间)选择像素颜色。

我建议:

1)在1D线上绘制您的颜色-n。它看起来连续吗?如果不是,请选择连续显示的颜色图。不断增加。

2)找到使n连续而不是离散的方法。一种方法是通过计算查看窗口的最大退出时间,然后将所有其他退出时间除以该值,以产生更连续的场。请参阅以下有关逸出时间标准化的链接:
https://linas.org/art-gallery/escape/escape.html

我相信,如果您同时满足以上两个条件,则主图像周围的区域将显示为连续的,而不会出现“等值线”。