0

我想创建一个基于 int 变量创建独特颜色的函数。问题是这些变量的范围(从 1 到 10 000)。

所以我有一个包含 10 000 个字段的数组,每个字段都有自己的 ID。现在我需要根据该 id 设置每个字段的颜色;

void setColor(int ID); // set R G B 

有什么建议么?

4

3 回答 3

4

您有 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
于 2013-09-27T12:26:40.833 回答
0

最简单的解决方案就是直接将ID转换为RGB值。但是,它肯定不会产生视觉上独特的颜色范围。

于 2013-09-27T12:34:12.213 回答
0

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.

于 2013-09-27T12:24:57.710 回答