Mandelbrot算法 – 背景颜色

我正在用C#编写一个Mandelbrot应用程序(我正在使用Python进行测试)。 我已经拥有从集合到其边界的连续着色。 我目前的问题是设置环境的背景颜色。 我现在获取颜色的代码现在看起来像是这样,它将颜色变为双倍(对数函数在之前完成)并检查它的部分与否,并创建一个非常平滑的渐变(从黑色到橙色)。

private Color getColor(double i) { double ratio = i / (double)(iterations); int col = (int)(i / iterations * 255); int alpha = 255; if (ratio >= 0 && ratio = 0.25 && ratio = 0.50 && ratio = 0.75 && ratio < 1) return Color.FromArgb(alpha, col, col/2, 0); return Color.Black; //color of the set itself } 

如何将黑色环境(不是Mandelbrot集)更改为另一种颜色,如混淆的Python脚本( http://preshing.com/20110926/high-resolution-mandelbrot-in-obfuscated-python )? 我已经将脚本编辑为更好的forms,但它不适合我的算法。

编辑:忘记提及,我没有使用复杂的equotation类,我使用维基百科上显示的算法计算分形。

这是我对另一个关于将一系列值映射到伪彩色的问题的答案的快速改编,它允许将它们映射到RGB颜色的整个调色板而不是仅仅两个。 请注意,中间颜色在RGB颜色空间中进行插值,而不是HSV(在我看来,这通常更好看,但需要更多计算)。

我并不是很满意,但是这个周末我的时间非常有限,至少到目前为止我的工作似乎都有效,即使它不是最佳的,所以我会发布给你玩的:

 def palette_pseudocolor(val, minval, maxval, palette): max_index = len(palette)-1 # convert val in range minval...maxval to range 0..max_index v = (float(val-minval) / (maxval-minval)) * max_index # split result into integer and fractional parts i = int(v); f = vi # interpolate between two colors in the palette c0, c1 = palette[i], palette[min(i+1, max_index)] d = c1[0]-c0[0], c1[1]-c0[1], c1[2]-c0[2] return c0[0]+f*d[0], c0[1]+f*d[1], c0[2]+f*d[2] if __name__ == '__main__': numsteps = 10 palette = [(1,0,0), (0,1,0), (0,0,1)] # [RED, GREEN, BLUE] print 'val RGB' for val in xrange(0, 100+numsteps, numsteps): print ('%3d -> (%.3f, %.3f, %.3f)' % ((val,) + palette_pseudocolor(val, 0, 100, palette))) 

输出:

 val RGB 0 -> (1.000, 0.000, 0.000) 10 -> (0.800, 0.200, 0.000) 20 -> (0.600, 0.400, 0.000) 30 -> (0.400, 0.600, 0.000) 40 -> (0.200, 0.800, 0.000) 50 -> (0.000, 1.000, 0.000) 60 -> (0.000, 0.800, 0.200) 70 -> (0.000, 0.600, 0.400) 80 -> (0.000, 0.400, 0.600) 90 -> (0.000, 0.200, 0.800) 100 -> (0.000, 0.000, 1.000) 

这是使用示例中的红色,绿色和蓝色调色板生成的颜色渐变:

红色,绿色,蓝色调色板的颜色渐变