将数字映射到十六进制颜色的算法

标签 algorithm colors hex

这是我的情况。假设我有两列包含不同元素的数据。我想用不同的颜色突出显示这两列之间的所有匹配元素。这些元素中的每一个都有一个 ID,因此我正在考虑创建一个映射函数以将 ID 绑定(bind)到十六进制颜色。有什么建议么?

这就是我的想法:向每个十六进制数添加一个任意数字,比如 111,以生成新颜色(并对其进行修改以处理溢出)...所以 111*id + 起始十六进制数。

这合理吗?有没有人对 111 有什么建议,这样颜色在早期就不同了,但不要那么快地修改到相同的值?假设我想要 50 种独特的颜色,尽可能多样化。

谢谢,
迈克尔

最佳答案

虽然 HSV 颜色空间在为您提供“不同外观”的颜色方面可能更好,但 RGB 可能“足够好”。

您可以让红色、绿色和蓝色成为 {0, 40, 7F, FF} 之一。这给出 4x4x4 = 64 种颜色。像这样:

Red = ID % 4
Grn = (ID / 4) % 4
Blu = (ID / 16) % 4

print hex(floor(Red * 255 / 3)) //etc

人眼应该比红色/蓝色更容易检测到绿色的变化。因此,如果您需要更多颜色,可以让红色和蓝色取 4 个可能的值,让绿色取 5 个(提供 80 种颜色)。

如果您不希望连续的 ID 在颜色上靠在一起,您可以创建一个数组,将 ID 映射到一组打乱的数字。

此外,如果您的 ID 不是从 0 到 63 之间完全连续,那么您可以让您的程序找到所有实际使用的 ID,并将它们映射到 0 到 63 之间的数字。

关于将数字映射到十六进制颜色的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1280612/

相关文章:

algorithm - 可视化水平面

shell - 将 ANSI 彩色代码文本发送到 3 个输出 : screen, 文件和文件过滤 ANSI 代码

html - 背景颜色整页

python - 如何将 "b'\\xfe\\xff\\x002\\x000\\x001\\x00 9'"转换为python中的字符

algorithm - 识别这个算法 : Slots and Pegs

c - 如果所有数据都放入内存,那么执行 "SELECT ...WHERE ..."操作的最快方法是什么?

c - 查找并替换十六进制

java - 这是一个有效的十六进制值吗?

python - 查找模式是否在两个字符串中的任何一个中的最短方法

shell - 在术语哑绘图模式下在 gnuplot 生成的图形中注入(inject)颜色