当前位置: 首页 > 知识库问答 >
问题:

Mandelbrot集光滑着色函数

丁经国
2023-03-14

我用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个答案

祁承嗣
2023-03-14

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

我建议:

1) 在1D线上绘制颜色与-n的对比。它看起来是连续的吗?如果不是,请选择显示为连续w.r.t.增加n的颜色贴图。

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

我相信如果你满足上述两个标准,围绕主图像的场将看起来是连续的,而不是有“等线”的外观。

 类似资料:
  • 我知道关于这件事,阿雷迪回答了很多问题。然而,我的略有不同。无论何时我们实现平滑着色算法,我都理解它。 其中n是逃逸迭代,2是z的幂,如果我没有弄错,z是该逃逸迭代处复数的模。然后,我们在颜色之间的线性插值中使用这个重整化的逃逸值来生成平滑的带状mandelbrot集。我已经看到了关于这个的其他问题的答案,我们通过HSB到RGB的转换来运行这个值,但是我仍然无法理解这将如何提供平滑的颜色渐变,以及

  • 我制作了一个程序来计算mandelbrot集合中的点。对于不属于mandelbrot集的点,我会记录起点发散到震级大于2的地方所需的迭代次数。基本上,对于mandelbrot集合之外的每一点,我都有一个计数器,可以显示它在1到256的范围内发散的速度。我想做的是根据每个点发散的速度给它一个颜色。例如,在255次迭代中发散的点可能是白色的,发散越快,着色越多。我已经做了一个简单的调整,在20步以上的

  • 我正在渲染一个mandelbrot集,并且已经实现了一些平滑的着色,但是当仔细观察时,图片变得非常嘈杂。我想知道,为了达到更好的美感,改善我的色彩的最好方法是什么。使用直方图着色是否有助于去除粗糙的像素区域?这里是一个使用10000次迭代的分形渲染。 这是我现在生成和分配颜色的方式:

  • 为了获得python方面的培训,我决定使用脚本绘制mandelbrot集。绘制它并不太复杂,所以我决定使用颜色,我发现了平滑着色算法。使用这个问题,我能够渲染出一些非常漂亮的东西,类似于这个。 为了实现这一点,我使用三个“步骤”设置了渐变调色板:从深蓝色到浅蓝色,然后从浅蓝色到黄色,最后从黄色到深棕色。整体形象完美。 当我试图太放大时,问题就来了。让我们以这个区域为例。当我处于这种缩放水平时,我的

  • 因此,在学习C的一个步骤中,我决定尝试使用CImg实现mandelbrot集。这是我的程序: 我设法画出经典的曼德尔布洛特形状,但后来我试图实现平滑,以摆脱丑陋的带状。但我不能让它真正工作。 说真的,我不知道我在做什么,因为数学很难。 当保存图像时,我也会收到这个警告 所以很明显我有一个溢出的地方,但我真的不知道在哪里。 如果有人能帮助我,解释我在做什么,并指出我所做的所有错误的事情,但用一种简单

  • 我试图在java中为Mandelbrot集编程一个可视化,有几件事我正在努力编程。我意识到围绕这个主题的问题已经被问了很多,网上有很多留档,但是很多事情看起来很复杂,我对编程相对来说是新手。 我的第一个问题是放大分形。我的目标是对分形进行“无限”缩放(当然不是无限的,只要普通计算机在计算时间和精度方面允许)。我目前采用的方法是以下计时器: 在实轴(-2,2)和虚轴(2,2)范围内使用一定次数的迭代