给定最大迭代次数 = 1000 给我一些关于如何着色(红色、绿色、蓝色)的想法。我现在能想到的只是蹩脚的 2 种颜色渐变 :(
真的有可能想出像这样美丽的东西吗?
给定最大迭代次数 = 1000 给我一些关于如何着色(红色、绿色、蓝色)的想法。我现在能想到的只是蹩脚的 2 种颜色渐变 :(
真的有可能想出像这样美丽的东西吗?
该死的,他们不会让我一个新手发布图片,但要查看我的着色效果,请尝试此链接
我的技术是将颜色立方体的所有可用颜色用于 Fractalextreme 的 228 个调色板索引。我使用电子表格 (OpenOffice) 对 24 位值进行线性采样。我从每个 RGB 分量(即最高位)中切出 1 位以形成 3 位 RGB 值。使用 vlookup 将 8 种 3 位颜色转换为白色、洋红色、红色、黄色、黑色、蓝色、青色和绿色等序列。然后我复制并粘贴为值,这样我就可以按第 7 位对最高位序列进行排序......
想知道详情?
合成 24 位 RGB 值很简单。
A 列的数字从 0 到 227,=ROW()-2
这在 B 列中转换为 24 位 =ROUND(A2*16777215/227)。
C 列转换为十六进制 =DEC2HEX(B2;6)
D 列提取红色分量并转换为十进制 =HEX2DEC(LEFT(C2;2))
与 E 列类似绿色 =HEX2DEC(MID(C2;3;2)) 和F blue =HEX2DEC(RIGHT(C2;2))
G 切片最高位并转换为 3bit 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 位 slice
=BIN2DEC(MID(DEC2BIN($D2;8);3;1)&MID(DEC2BIN($E2;8);3;1) &MID(DEC2BIN($F2;8);3;1))
依此类推,直到最低位列 N
=BIN2DEC(RIGHT(DEC2BIN($D2;8);1)&RIGHT(DEC2BIN($E2;8);1)&RIGHT(DEC2BIN($F2;8);1))
现在要将这个 3 位 RGB 转换为颜色序列,我在电子表格中有另一个选项卡,称为“3 位排序”。
在 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
所以公式转换了 3bit RGB 值按顺序排列成黑色、蓝色、青色、绿色、白色、品红色、红色和黄色。
我对 P 到 V 列中的第 7 位到第 1 位执行类似操作。
现在复制和粘贴作为值来对这些排序的颜色进行排序是可以的,但往往在颜色之间有一个明显的截止点。一个简单的按 H 由 I 由 J... 排序将导致在最高位白色 7 位黑色旁边排序的最高位绿色第 7 位黄色。如果顶部位绿色第 7 位白色被排序在顶部位白色第 7 位绿色旁边,则将实现更平滑的过渡。所以我做了二级翻译。这需要根据更高位的颜色转换为不同的序列。
对于每种颜色,在“3 位排序”的列中,我根据下一个较高位的颜色创建额外的翻译序列。
列 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 个位置,这使插值在可使用的颜色之间产生了一些差异。
这就是遗留数据库黑客如何为曼德布罗着色,他使用电子表格。
50 次迭代非常非常粗略,你不会得到太多细节。
获得光谱的最简单方法是使用多个双色渐变。因此,50-41 次迭代可能是蓝色阴影,41-30 可能是蓝红色,29-10 可能是红绿色,9-0 可能是绿白色。
RGB 显示器的色域是三角形的,因此这种方案几乎遵循“色轮”的外部。
搜索 HSV RGB 库可能会找到有助于使用更简单的 HSV 颜色系统的工具。
当我有生成曼德布罗集图片的任务时,我使用了HSL/HSV 色谱。您可以根据归一化的迭代(含义current iteration/max iteration = colour
)选择颜色。
只有 50 次迭代,对于离散的颜色调色板有一些话要说 - 选择(比如说)10 并简单地将每个像素绘制为调色板 [itercount%palettesize]。摆弄调色板以减少眼睛流血。但是,如果您稍后过渡到需要连续调色板的平滑迭代计数,这将不起作用。如果您稍后进行更深的迭代计数,您可能还需要对其进行调整。
您可以使用 HSV 着色来产生连续的彩虹效果 - 设置 S=1.0、V=1.0(或任何您认为看起来不错的东西)并围绕色相角绘制迭代(或迭代的某些函数)。转换为 RGB 非常简单,可以用谷歌搜索。
多级渐变呢?基于离散调色板的想法,您可以在一些合适的迭代范围内从一个渐变到下一个,而不仅仅是从一个到下一个;这更适合更大的潜在迭代次数。
我知道这有点老了,但我所谓的循环方案仅用 256-512-1024 次迭代就在缩放的 Mandelbrot 零件上给出了有趣的结果。
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);
}
}