【问题标题】:Mandelbrot set smooth colouring functionMandelbrot 设置平滑着色函数
【发布时间】:2019-03-18 20:21:30
【问题描述】:

我用 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 我不认为问题出在解决方案上
  • @Spektre 我的图片?第二个?

标签: python python-3.x math mandelbrot


【解决方案1】:

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

我建议:

1) 在一维线上绘制你的 color-vs.-n。它看起来是连续的吗?如果不是,请选择一个显示为连续 w.r.t 的颜色图。增加n。

2) 找到一种方法使 n 连续,而不是离散。一种方法是计算查看窗口的最大转义时间,然后将所有其他转义时间除以该值,以产生更连续的字段。请参阅此链接了解转义时间规范化:
https://linas.org/art-gallery/escape/escape.html

我相信,如果您同时满足上述两个条件,主图像周围的场将显示为连续的,而不是具有“等线”外观。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-04
    相关资源
    最近更新 更多