我想创建一个基于int变量创建唯一颜色的函数。问题是这些变量的范围(从1到10 000)。
所以我有一个包含10 000个字段的数组,每个字段都有自己的ID。现在我需要根据该ID设置每个字段的颜色;
void setColor(int ID); // set R G B
有什么建议吗?
答案 0 :(得分:4)
您有10,000个可能的输入选项,而256 x 256 x 256 = 1600万个输出选项。 假设你想要平均地改变RGB值,你可以最多使用R,G,B的21个diff值,因为它会产生21.5 ^ 3~10000。
所以你需要采取256/21~12的步骤来达到你的目的。
所以,基本上我的观点是:
int RGB value
1 0,0,0
2 0,0,12
3 0,0,24
.
..
22 0,0,253
23 0,12,0
.
.
.
10000 255,255,255
答案 1 :(得分:0)
您可以省略表并构建哈希函数。 一个简单的问题是:
rgb(unsigned x) {
b = x & 0xFF;
x >>= 8
g = x & 0xFF;
x >>= 8
r = x & 0xFF;
}
这里的分布并不好:2 ^ 24 - 10000 = 16767216
替代哈希可以计算distributed = id * 2 ^ 24/10000。
答案 2 :(得分:0)
最简单的解决方案是直接将ID转换为RGB值。然而,它肯定不会产生视觉上独特的颜色范围。