algorithm - Mandelbrot 集渲染的平滑频谱

标签 algorithm colors fractals mandelbrot

我目前正在编写一个程序来生成非常巨大的(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/

相关文章:

javascript - 在 Javascript Canvas 中动画分形树

java - 检查闰年 - 不使用除法运算

c++ - 如何使用A.R Drone 2.0的PID Controller ?

php - 如何将换行符/换行符内爆到空格?

python - 更改seaborn分布线的颜色

c# - 使 C# mandelbrot 绘图更高效

r - R中的分形盒计数

algorithm - 减少选择中的平均比较次数

python - 我的 Python 脚本中的奇怪输出 - [0m 或 [32m

algorithm - 是否有图形着色算法,可以限制每种颜色的顶点数