我正在迭代多边形标志。我有128个独特的tham。我想知道如何获得每种可以抵抗的颜色(这样每个旗帜都会有或多或少的可叠加颜色)?如何从一个int获得这样的RGB int?
拥有像rand()%255, rand()%255, rand()%255
这样的基于框架的模型材料并不会产生任何影响,而每个可靠的商店颜色都不是我想要的。 255-i
变体不会提供难以消除的结果。所以我寻找一种算法来从给定的i
获得可混淆的颜色。
我有一个迭代器i
和unsigned long long
128位掩码(0001
,0010
,0100
...)。
答案 0 :(得分:3)
128个数字是7位数据。我将7位分成(2,2,3)并使用它们(按某种顺序)作为红色,绿色和蓝色的高位。这应该在RGB颜色空间中尽可能地分散颜色。
答案 1 :(得分:2)
简单地使用网格r = 4,g = 8,b = 4很容易,但不一定产生最佳输出,因为暗色中应该有较少的不同色调。
Lab-space中的处理在每个单元之间具有最相等的感知距离,但我相信可以从YUV或HSV中找到合理的替代方案。
仅仅从评估其他答案的启发式/结果(我会尝试找到最好的duplicate from gamedeveloper网站),我认为最好的结果是其他格子而不是立方体。
X X X
X X X X <-- e.g. sampling points from hexagonical grid in HSV cone
X x X for some intensity level L.
X X X X
X X X
典型的错误 IMO,是将下一级L + -1与L对齐;相反,如果下一个强度等级L + -1中的采样点旋转(45度),则附近颜色的色调和强度都会有差异。这个想法的另一个名称是为附近的颜色提供良好的汉明距离。
x x L&1==0, x L&1==1
* x x
x x x
同样在HSV锥体中,将有一个黑色,一个白色,三种颜色的深色,三种色调的鲜艳色彩,6或12种颜色在下一个强度等级。
游戏开发回答中的第二个优秀评论是文化偏见。我会陈述这个概念而不是我们给某些颜色赋予意义,并且可以很好地区分 sage 的颜色与橄榄或 lavender 来自 fuchsia 。
编辑该链接中的第一个答案有173个投票,即使例如我无法区分颜色5和6.而且只有10种颜色。但该理论声称是合理的。
答案 2 :(得分:1)
这取决于您希望如何区分。
如果您发现在运行时创建颜色太困难了,那么在您知道的托盘中创建预定颜色的查找怎么样呢?
答案 3 :(得分:1)
生成最佳色彩的调色板并不容易。既然你说你需要固定数量的颜色,你可以预先生成一个颜色,例如:
答案 4 :(得分:1)
如果你真的需要生成这些,而不是使用预先生成的调色板,我至少建议不要使用RGB。
例如,Lab颜色空间与人类视觉系统的关系更密切,因此在尝试查找感知上不同的颜色时可能更合适。
因此,您可能会尝试生成Lab中相距很远的颜色,然后转换回RGB。
答案 5 :(得分:0)
怎么样:
int get_red(int rep){
int x,r=0,i,temp;
i=0;
temp=rep;
while(temp!=0){
i++;
if(i==3) r=temp%2;
temp=temp/2;
}
if(i>3) x=(long long int)255/(i-2);
else x=255;
temp=r*x;
return temp;
}
int get_green(int rep){
int x,g=0,i,temp;
i=0;
temp=rep;
while(temp!=0){
i++;
if(i==2) g=temp%2;
temp=temp/2;
}
if(i>3) x=(long long int)255/(i-2);
else x=255;
temp=g*x;
return temp;
}
int get_blue(int rep){
long long int x,b=0,i,temp;
i=0;
temp=rep;
while(temp!=0){
i++;
if(i==1) b=temp%2;
temp=temp/2;
}
if(i>3) x=(int)255/(i-2);
else x=255;
temp=b*x;
return temp;
}