【问题标题】:Color-coding numbers dynamically动态地对数字进行颜色编码
【发布时间】:2016-03-15 22:31:58
【问题描述】:

我有一个元素序列,每个元素都有自己的 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");
}

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

有什么建议吗?

【问题讨论】:

  • @LuigiCortese int.Max ...
  • 所以你需要... 0x7fffffff 不同的颜色?或者你可以同时拥有多少个不同的值?
  • 好吧,如果你这样说..那么是的..但是重复相同的颜色是可以的......我可以处理一半甚至 1/4 的 int.MAX .. .
  • 您可以有一个不同颜色的列表(红色、绿色、蓝色等)和一个字典,以将它们分配给某个 id(Dictionary<int,int>,id 和颜色索引)。当 id 太多时,您可以开始重用颜色,可能会有一些变化(样式或稍微改变给定颜色的 rgb)。考虑为用户提供选择颜色或跟踪特定 id 的可能性(选择时将其绘制得更粗)等。
  • 首先,你将如何表示颜色?整数?整数的范围是多少?

标签: javascript java c# algorithm colors


【解决方案1】:

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

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

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

  • col0ID0 的颜色)可以是 (16777215/#ID)*0
  • col1ID1 的颜色)可以是 (16777215/#ID)*1
  • col2ID2 的颜色)可以是 (16777215/#ID)*2

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

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

  • col0ID0 的颜色)可能是 0
  • col1ID1 的颜色)可以是 col0+colorJump
  • col2ID2 的颜色)可以是 col1+colorJump

等等

【讨论】:

  • 使用模不是更简单吗?喜欢id % number_of_different_colors = colord_id
  • 好吧,这样如果你有两个id,ID0=0和ID1=1,颜色就会相邻,几乎一样
  • 这取决于ID的显示顺序,我真的不知道问题中是否暗示了这一点。如果它是排序的,确实如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-04
  • 2023-03-07
  • 1970-01-01
  • 2020-01-27
  • 2019-10-03
  • 1970-01-01
相关资源
最近更新 更多