对于那里的所有创意人士:着色mandelbrot集......需要创意

时间:2011-04-17 12:29:39

标签: colors mandelbrot

给定最大迭代次数= 1000,给我一些关于如何着色(红色,绿色,蓝色)的想法。我现在所能得到的只是蹩脚的2色渐变:(

实际上是否有可能想出像这样漂亮的东西?

enter image description here

5 个答案:

答案 0 :(得分:5)

他们不会让我新手发布图片,但看到我的着色效果试试这个链接

click to see my mandelbrot, when there right click to view larger sizes

我的技术是使用颜色立方体的所有可用颜色作为Fractal extreme的228个调色板索引。使用电子表格(OpenOffice)我采用24位值的线性样本。我从每个RGB分量(即最高位)切1位以形成3位RGB值。使用vlookup将8种3位颜色转换为白色,品红色,红色,黄色,黑色,蓝色,青色和绿色等序列。然后我复制并粘贴为值,这样我就可以按第7位对顶部位序列进行排序......

想了解详情?

合成24位RGB值很简单 Colum A的数字从0到227,= ROW() - 2
在B列= ROUND(A2 * 16777215/227)中将其转换为24位 C列转换为Hex = DEC2HEX(B2; 6)
D列提取红色分量并转换为decimal = HEX2DEC(LEFT(C2; 2))
类似于E列绿色= HEX2DEC(MID(C2; 3; 2))和F蓝色= HEX2DEC(右(C2; 2))
G切割顶部位并转换为3位RGB
= BIN2DEC(LEFT(DEC2BIN($ D2; 8); 1)& LEFT(DEC2BIN($ E2; 8); 1)& LEFT(DEC2BIN( $ F2; 8); 1))
H第7位切片
= BIN2DEC(MID(DEC2BIN($ D2; 8); 2; 1)及MID(DEC2BIN($ E2; 8); 2; 1)及MID(DEC2BIN($ F2; 8); 2; 1))
我是第6位切片 = BIN2DEC(MID(DEC2BIN($ D2; 8); 3; 1)及MID(DEC2BIN($ E2; 8); 3; 1)及MID(DEC2BIN($ F2; 8); 3; 1))
依此类推,直至最低位列N
= BIN2DEC(右(DEC2BIN($ D2; 8); 1)& RIGHT(DEC2BIN($ E2; 8); 1)& RIGHT(DEC2BIN($ F2) ; 8); 1))

现在要将这个3位RGB转换为颜色序列,我在电子表格中有另一个名为“3bit sort”的标签。
在H列中,公式为= VLOOKUP(G2;'3bitsort'。$ B $ 62:$ C $ 69; 2; 0)
行b62至b69具有值0,1,3,2,7,5,4,6 行c62至c69具有值0,1,2,3,4,5,6,7 因此,公式将3位RGB值转换为黑色,蓝色,青色,绿色,白色,品红色,红色和黄色序列。 我对P到V列中的第7到第1位做了类似的事。

现在复制和粘贴作为值来对这些序列颜色进行排序是可以的,但往往会在颜色之间产生明显的截止。由H by I by J ...进行的简单排序将导致顶部位绿色第7黄色排序,位于顶部位白色第7位黑色旁边。如果顶部位绿色第7位白色在最高位白色第7位绿色旁边排序,则可以实现更平滑的过渡。所以我做了第二级翻译。这需要根据较高位的颜色转换为不同的顺序  对于每种颜色,在“3位排序”的列中,我根据下一个较高位的颜色创建其他翻译序列 Colum W = VLOOKUP(H2; OFFSET('3bit sort'。$ E $ 62; 0; 3 * O2; 8; 2); 2; 0)
偏移量在b62:c59的右侧看起来在之前用于设置我想要的序列的位置 O2是顶部位的平移颜色,绿色是3,因此b62:b69右侧的9列是列n62:n69,其包含序列3,1,2,6,4,0,5,7
o62:o69包含翻译的序列0,1,2,3,4,5,6,7 因此,如果第7位是白色,则最白的绿色最后排序 对于q62:q69包含2,1,3,7,0,6,4,5,因此最绿的白色可以在最白的绿色旁边排序。
复制和粘贴为值,然后按8位排序,然后由第8位指示的第7位表和第7位指示的第6位转换,因此可以进行平滑过渡。

但我不止于此。

当颜色分布在多次迭代中时,Fractal Extreme可以插入颜色。上面的图片具有12939的最小迭代次数和最大值27609次,因此来自228索引调色板表的每种颜色都被涂抹了数十次迭代。 Fractal Extreme还具有一个功能,其中每个奇数颜色索引都可以来自第二个调色板表。这给出了条纹效果。我将条纹调色板偏移16个位置,这使得插值在颜色之间有一点差别可以使用。

这就是遗留数据库黑客攻击mandelbrot的方式,他使用电子表格。

答案 1 :(得分:1)

50次迭代非常非常粗糙,你不会得到太多细节。

获得光谱的最简单方法是使用多个双色渐变。因此,50-41次迭代可能是蓝色阴影,41-30次可能是蓝红色,29-10次可能是红绿色,9-0可能是绿白色。

RGB显示器的色域是三角形的,所以这样的方案几乎跟在“色轮”的外面。

search for HSV RGB library可能会提供工具来帮助您使用更简单的HSV颜色系统。

答案 2 :(得分:0)

当我完成生成mandelbrot设置图片的任务时,我使用了HSL/HSV colour spectrum。您可以根据规范化的迭代(意味着current iteration/max iteration = colour)来选择颜色。

答案 3 :(得分:0)

只有50次迭代,对于一个独立的颜色调色板有一些东西可以说 - 选择(比方说)10并简单地将每个像素绘制为调色板[itercount%palettesize]。调整调色板,使其不那么流眼。但是,如果稍后转换为需要连续调色板的平滑迭代计数,则此操作无效。如果您稍后再进行更深入的迭代计算,您可能还想调整它。

你可以使用HSV着色来产生连续的彩虹效果 - 设置S = 1.0,V = 1.0(或者你认为看起来不错的任何东西)并在Hue角度周围绘制迭代(或迭代的某些函数)。转换为RGB非常简单,可以用Google搜索。

多阶段渐变怎么样?基于离散的调色板构思,而不是仅仅从一个调整到下一个,您可以在一些合适的迭代范围内从一个渐变到下一个。这更适合更大的潜在迭代计数。

答案 4 :(得分:0)

我知道有点旧,但我所谓的循环方案在缩放的Mandelbrot零件上只需256-512-1024次迭代即可得到有趣的结果。

https://github.com/nmmmnu/MandelDroid/blob/master/src/nu/nmmm/android/fractal/color/FColorCyclic.java

public class FColorCyclic  implements FColor{
    final private static int SIZE2 = 64;
    final private static int SIZE = SIZE2 >> 1;

    @Override
    public RGB convertColor(int color, int maxcolor, RGB rgb) {
        // bounded color
        if (color == maxcolor)
            return rgb.setColorZero();

        int a = color % SIZE2;

        if (a > SIZE)
            a = SIZE2 - a;

        return rgb.setColor(a, SIZE2);
    }
}