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

发布于 2024-08-02 11:50:12 字数 294 浏览 1 评论 0原文

这是我的情况。假设我有两列包含不同元素的数据。我想用不同的颜色突出显示这两列之间的所有匹配元素。每个元素都有一个 ID,因此我正在考虑创建一个映射函数,将 ID 与十六进制颜色联系起来。有什么建议吗?

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

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

谢谢,
迈克尔

Here's my situation. Say I have two columns of data containing different elements. I'd like to highlight with a different color, all matching elements between those two columns. Each of those elements has an ID, so I was thinking of creating a mapping function to tie an ID to a hex color. Any suggestions?

This is what I was thinking: Add an arbitrary number, say 111, to each hex number to generate the new color (and mod it take care of overflow)... so 111*id + Starting hex number.

Is this reasonable? Does anyone have a suggestion for the 111 so that the colors are diverse early on, but don't mod to the same value that quickly? Say I'd like 50 unique colors, as diverse as possible.

Thanks,
Michael

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

葬﹪忆之殇 2024-08-09 11:50:12

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

您可以让 Red、Green 和 Blue 为 {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 之间的数字。

While the HSV colour space is probably better in terms of giving you "different-looking" colours, RGB is probably "good enough".

You could just let Red, Green and Blue be one of {0, 40, 7F, FF}. This gives 4x4x4 = 64 colours. Something like this:

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

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

The human eye is supposed to detect changes in Green more readily than Red/Blue. So if you need some more colours you can let Red and Blue take on 4 possible values and Green take on 5 (giving 80 colours).

If you don't want consecutive IDs to be too close together in colour you can create an array that maps IDs to a shuffled set of numbers.

Also if your IDs aren't all nicely consecutive from 0 to 63 then you could make your program find all the IDs that are actually used and map them to numbers between 0 and 63.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文