【发布时间】:2016-10-16 10:35:45
【问题描述】:
寻找有关 python 的培训我决定使用脚本绘制 mandelbrot 集。绘制它并不太复杂,所以我决定使用颜色,我发现了平滑着色算法。使用this question,我能够渲染出非常漂亮且类似于this one 的东西。
为了实现这一点,我使用三个“步骤”设置了渐变调色板:从深蓝色到浅蓝色,然后是浅蓝色到黄色,最后是黄色到深棕色。整体形象完美。
当我尝试放大时,问题就来了。让我们以this area 为例。当我处于这种缩放级别时,我的脚本不再绘制深蓝色。我想我写错了一些东西,因为无论你在维基百科图像上看到深蓝色的地方,我都有深棕色(所以是我调色板末端的颜色)。当我第一次想到这一点时,我告诉自己如果图案要回到原来的图案,那么它应该使用相同的颜色,因为转义时间应该相同。
那么,这个颜色是在调色板中配置的,还是我不理解逃逸时间?
这是我用于着色的代码:
def color_pixel(n, z):
smoothcolor = n + 1 - math.log(math.log(abs(z)))/math.log(2)
f = smoothcolor/iterate_max
i = int(f*500)
color = palette[i]
return color
500 是我调色板中的颜色数量 (len(palette)-1)。
z 超过 10 时 z 的值。
我使用 100 作为最大迭代次数,但相同的结果具有更高的值。
谢谢!
【问题讨论】:
-
当你放大到你显示的小区域时,该区域的最低迭代不再是1,所以颜色数组低端的颜色不会被使用。 OTOH 在基础级别,很少使用阵列上端的颜色,因此您不会注意到它们。您可以做的一件事是在渲染图像之前找到区域边缘周围的最低迭代次数,并将其用作偏移量。
-
我缩放的越多,迭代次数就会越高?我应该在调色板上做一个循环,这样颜色就会回来?
-
没错,低迭代只在第一个比例图像的边缘,你发布的图像告诉你!当您进行实验时,您会发现缩放越深,解决细节所需的迭代次数就越多 - 在 M 集的附近,这通常是您获得有趣的地方图片。
-
...是的,我使用了一个由迭代 mod 调色板大小索引的调色板,其中颜色平滑地环绕回 index[0]。虽然着色纯粹是主观的,但这取决于你想要做什么。对于动态缩放,每个轮廓的颜色必须始终相同。但是对于单个静态图像,您需要进行实验。因此,并非所有缩放区域都使用相同的着色方法看起来不错。
-
...在地图的某些区域,整个图像的迭代变化不如其他区域那么大。例如,将主图标图像链接到相同的较小版本的线程。您越接近这些主要或迷你 M 集形状中的任何一个,您会发现的迭代的 范围 越多。
标签: python python-3.x colors mandelbrot