gpt4 book ai didi

algorithm - Mandelbrot 集渲染的平滑频谱

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:14:46 24 4
gpt4 key购买 nike

我目前正在编写一个程序来生成非常巨大的(65536x65536 像素及以上)Mandelbrot 图像,并且我想设计一个光谱和着色方案来使它们公平。 wikipedia featured mandelbrot image似乎是一个很好的例子,尤其是调色板如何在序列的所有缩放级别保持变化。不过,我不确定它是在旋转调色板还是在做其他一些技巧来实现这一点。

我熟悉 smooth coloring algorithm对于 mandelbrot 集,所以我可以避免 strip 化,但我仍然需要一种方法来为该算法的输出值分配颜色。

我生成的图像是金字塔形的(例如,一系列图像,每个图像的尺寸都是前一个图像的一半),所以我可以使用某种旋转调色板,只要改变后续缩放级别之间的调色板不太明显。

最佳答案

这是平滑颜色算法:

假设您从复数 z0 开始并迭代 n 次直到它逃逸。令终点为 zn

一个平滑的值是

nsmooth := n + 1 - Math.log(Math.log(zn.abs()))/Math.log(2)

这只适用于 mandelbrot,如果你想计算 julia 集的平滑函数,那么使用

Complex z = new Complex(x,y);
double smoothcolor = Math.exp(-z.abs());

for(i=0;i<max_iter && z.abs() < 30;i++) {
z = f(z);
smoothcolor += Math.exp(-z.abs());
}

smoothcolor在区间(0,max_iter)

smoothcolor 除以 max_iter 得到 0 到 1 之间的值。

从值中获得平滑的颜色:

这可以调用,例如(在 Java 中):

Color.HSBtoRGB(0.95f + 10 * smoothcolor ,0.6f,1.0f);

因为 HSB 颜色参数中的第一个值用于定义色环中的颜色。

关于algorithm - Mandelbrot 集渲染的平滑频谱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/369438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com