我想创建一个基于 int 变量创建独特颜色的函数。问题是这些变量的范围(从 1 到 10 000)。
所以我有一个包含 10 000 个字段的数组,每个字段都有自己的 ID。现在我需要根据该 id 设置每个字段的颜色;
void setColor(int ID); // set R G B
有什么建议么?
您有 10,000 个可能的输入选项,而 256 x 256 x 256 = 1600 万个输出选项。假设您想平均改变 RGB 值,您最多可以为 R、G、B 使用 21 个差异值,因为这将产生 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
最简单的解决方案就是直接将ID转换为RGB值。但是,它肯定不会产生视觉上独特的颜色范围。
You can omit the table and build a hash function. A simple one is:
rgb(unsigned x) {
b = x & 0xFF;
x >>= 8
g = x & 0xFF;
x >>= 8
r = x & 0xFF;
}
The distribution is not nice here: 2^24 - 10000 = 16767216
An alternative hash could calculate distributed = id * 2^24 / 10000.