javascript - 动态颜色编码数字

标签 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");
}

但是,这会产生相同颜色的多次重复。

有什么建议吗?

最佳答案

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

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

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

  • col0 (color if ID0) 可以是 (16777215/#ID)*0
  • col1(ID1 的颜色)可以是 (16777215/#ID)*1
  • col2(ID2 的颜色)可以是 (16777215/#ID)*2

以此类推,保证相邻颜色之间的差异最大。

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

  • col0 (color if ID0) 可以是 0
  • col1(ID1的颜色)可以是col0+colorJump
  • col2(ID2的颜色)可以是col1+colorJump

等等

关于javascript - 动态颜色编码数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34199355/

相关文章:

javascript - 在 Chrome 中以编程方式重新加载 javascript 资源

javascript - 创建 jquery 函数以从另一个函数中创建的 html 运行

java - 使用我们自己的附加参数为 Google Cloud Storage 生成签名 URL

java - 解密位图的像素

c# - 解决应用程序失去焦点时桌面崩溃的问题

c# - 如何将多个进度 div 添加到基于 List<T> 对象项的 div

javascript - CHROME ext/app - 单击即可下载图像

javascript - jQuery 无法在 chrome 扩展的 background.js 中工作

java - 添加密码字段 - GUI

c# - 如何阅读文本框中的最后一行?