Bri*_*ell 26 language-agnostic algorithm colors
我正在寻找一种能够生成一系列颜色的算法,以便颜色尽可能广泛地分布(因此它们不会轻易混淆).
我有一系列具有从1开始计数的ID的对象.我想用不同的,美学上令人愉悦的颜色来表示每个对象,这些颜色不容易与其邻居混淆.颜色不一定是随机的.我想每次输入相同的ID时都会得到相同的颜色.
Tat*_*ize 24
我已经检查了所有这些方法,解决了很多方法.最后用CIEde2000蛮力,真的,你最好的选择只是一个静态列表.无论你做什么,你都不能获得超过30种颜色,并且具有良好的清晰度.色盲的因素和混乱的线条,你真的在做一些阻碍.使用查找表并使用除颜色之外的其他一些特征修改数据点.

#000000
#00FF00
#0000FF
#FF0000
#01FFFE
#FFA6FE
#FFDB66
#006401
#010067
#95003A
#007DB5
#FF00F6
#FFEEE8
#774D00
#90FB92
#0076FF
#D5FF00
#FF937E
#6A826C
#FF029D
#FE8900
#7A4782
#7E2DD2
#85A900
#FF0056
#A42400
#00AE7E
#683D3B
#BDC6FF
#263400
#BDD393
#00B917
#9E008E
#001544
#C28C9F
#FF74A3
#01D0FF
#004754
#E56FFE
#788231
#0E4CA1
#91D0CB
#BE9970
#968AE8
#BB8800
#43002C
#DEFF74
#00FFC6
#FFE502
#620E00
#008F9C
#98FF52
#7544B1
#B500FF
#00FF78
#FF6E41
#005F39
#6B6882
#5FAD4E
#A75740
#A5FFD2
#FFB167
#009BFF
#E85EBE
Run Code Online (Sandbox Code Playgroud)
Pat*_*ney 20
您可以将id乘以黄金比率(phi)得到数字0 <= n <1.您生成的所有数字将趋于均匀分布.
PHI = (1 + sqrt(5))/2
n = id * PHI - floor(id * PHI)
Run Code Online (Sandbox Code Playgroud)
那么这是将该数字转换为颜色的问题,例如
hue = floor(n * 256)
Run Code Online (Sandbox Code Playgroud)
Nor*_*sey 10
图形设计人员知道,如果在信息显示中要将许多颜色彼此靠近使用,则颜色空间中的颜色应该相对接近.饱和度或色调的微小变化通常比大跳跃更好 - 当涉及许多颜色时,人眼实际上发现当颜色距离不是很大时更容易吸收信息.
此外,不要忘记您的一些用户将是色盲.由于色盲的种类繁多,很难知道要避免哪种组合.也许其他人可以解决这个问题?
mar*_*nus 10
我写了一篇关于同一主题的文章:
基本上你可以使用HSV颜色空间,设置固定的饱和度和值,并修改Hue.当您知道所需的颜色数量时,只需将Hue的范围分开即可[0,1[.如果您不知道所需颜色的数量,您仍然可以使用黄金比例从该空间中选择颜色.
可能元素的数量是否具有合理的下限?一种快速简便的解决方案是使用项目的ID存储一系列颜色值.这假设您的颜色数量相对较少,而且您确定不会超过一定数量的项目.
如果你想生成颜色而不是使用列表,那么使它们具有一致和正常外观的一个技巧就是使用HSB生成它们.预先定义亮度和饱和度,然后将色调值基于ID的某个函数(这可能是各种各样的事情,具体取决于您计划拥有多少ID,但将ID乘以某个量(并且当它超过时进行修改) 255!)是一个很好的粗略方法.使用这种方法,颜色将在饱和度和亮度方面全部"对齐",但它们每个都具有不同的颜色.
我在工作上有点无聊,所以我掀起了一个快速的解决方案:
class HsbColor
{
public int Hue { get; set; }
public int Saturation { get; set; }
public int Brightness { get; set; }
public Color ToRGB
{
// left as exercise to the reader...
}
}
public class Item
{
public int Id { get; set; }
private static const byte EXPECTED_MAX = 15;
private static int HUE_FACTOR = 255 / EXPECTED_MAX;
public HsbColor Color
{
get {
var color = new HsbColor() { Saturation = 175, Brightness = 175 };
color.Hue = (Id * HUE_FACTOR) % 255;
return color;
}
}
}
Run Code Online (Sandbox Code Playgroud)