动态颜色编码

时间:2015-12-10 10:24:57

标签: javascript java c# algorithm colors

我有一系列元素,每个元素都有自己的ID。 ID从1 ... n开始运行。我希望所有共享ID的元素以相同的颜色显示。

我知道我可以为每个数字定义一系列颜色,但这将是静态的,我真的不知道我会有多少数字。

到目前为止,我已经这样做了:

private object getIntColorString(int IDNum)
{
    return IDNum.ToString("X6");
}

但我没有想到,因为颜色之间的差异太小了。那么我就这样做了:

private object getIntColorString(int eventTrainingProgramID)
{
    int colorCode = eventTrainingProgramID * 100; 
    return colorCode.ToString("X6");
}

然而,这会产生许多相同颜色的复发。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

好的,颜色可以从000000(黑色)到ffffff(白色),所以16777215个不同的值。 我们假设您需要映射[0,2147483647]范围内的int(0到Int.MAX) 到颜色范围[0,16777215]。

第一个问题:如果您同时拥有16777217个或更多元素,则会重复某些颜色。如果您有16777216个或更少的元素,则可以为每个ID映射不同的颜色。

如果你事先知道元素的数量(例如#ID = 100),你可以这样开始:

  • col0(颜色如果ID0)可能是(16777215 / #ID)* 0
  • col1ID1的颜色)可能是(16777215 / #ID)* 1
  • col2ID2的颜色)可能是(16777215 / #ID)* 2

等等,以保证相邻颜色之间可能存在的最大差异。

如果您事先不知道元素的数量,可以将colorJump定义为使两种颜色与您的眼睛不同的最小增量。就这样

  • col0(颜色,如果ID0)可能为0
  • col1ID1的颜色)可以是col0 + colorJump
  • col2ID2的颜色)可以是col1 + colorJump

等等