【发布时间】:2011-02-26 14:54:27
【问题描述】:
这里我们有一个有趣的现实世界算法要求,涉及颜色。
-
N漂亮的颜色:为了绘制漂亮的图表(即饼图),我们需要随机选择一组“足够不同”并且看起来不错的N颜色。这可以通过固定亮度和饱和度并以360/N的步长逐步调整色调来实现。 - 稳定的颜色分配:给定 Pie_1 的扇区标记为 ('A','B','C') 和 Pie_2 的扇区标记为 ('B','C','D'),它会如果 Pie_1 和 Pie_2 上扇区 B 和 C 的颜色相同,那就太好了。如果随着时间的推移将扇区删除或添加到图表中,这将有助于防止混淆。标签是唯一稳定的东西。
- 允许硬编码颜色:算法应允许硬编码标签->颜色关系作为输入,但会计算其余标签的颜色(根据规则 1 和 2)。
我认为这个算法,即使它看起来很临时,也将在不止一种情况下有用。
有什么想法吗?
更新: Eric 是对的,即随着新标签的出现和消失,不可能保证每个标签的颜色稳定性。但如果它“足够稳定”我很高兴,即颜色变化最小化。
我在想这样的事情:
- 每个标签都使用 hash(label)%360 获得一个随机色调值
- 为了保证生成的色调足够不同,我们将色调圈划分为固定数量的步骤(即:
2*N)并尝试将之前的色调值“四舍五入”为新的差异化值。 - 如果不同的标签具有相同的圆形色调值,我们会以某种方式打破平局并将点移动到其他位置。
但这撇开硬编码颜色的问题。
【问题讨论】:
标签: algorithm colors gdi rgb hsv