为了账号安全,请及时绑定邮箱和手机立即绑定

如何自动生成N“不同”的颜色?

如何自动生成N“不同”的颜色?

largeQ 2019-07-27 15:11:57
如何自动生成N“不同”的颜我写下了两种方法来自动选择N种不同的颜色。它的工作原理是在RGB立方体上定义分段线性函数。这样做的好处是,如果这是你想要的,你也可以得到一个渐进的比例,但是当N变大时,颜色可以开始看起来相似。我还可以想象将RGB立方体均匀地细分为格子然后绘制点。有谁知道其他任何方法?我排除了定义一个列表然后只是循环通过它。我还应该说我一般不关心他们是否发生冲突或看起来不好看,他们只需要在视觉上截然不同。public static List<Color> pick(int num) {     List<Color> colors = new ArrayList<Color>();     if (num < 2)         return colors;     float dx = 1.0f / (float) (num - 1);     for (int i = 0; i < num; i++) {         colors.add(get(i * dx));     }     return colors;}public static Color get(float x) {     float r = 0.0f;     float g = 0.0f;     float b = 1.0f;     if (x >= 0.0f && x < 0.2f) {         x = x / 0.2f;         r = 0.0f;         g = x;         b = 1.0f;     } else if (x >= 0.2f && x < 0.4f) {         x = (x - 0.2f) / 0.2f;         r = 0.0f;         g = 1.0f;         b = 1.0f - x;     } else if (x >= 0.4f && x < 0.6f) {         x = (x - 0.4f) / 0.2f;         r = x;         g = 1.0f;         b = 0.0f;     } else if (x >= 0.6f && x < 0.8f) {         x = (x - 0.6f) / 0.2f;         r = 1.0f;         g = 1.0f - x;         b = 0.0f;     } else if (x >= 0.8f && x <= 1.0f) {         x = (x - 0.8f) / 0.2f;         r = 1.0f;         g = 0.0f;         b = x;     }     return new Color(r, g, b);}
查看完整描述

3 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

您可以使用HSL颜色模型来创建颜色。

如果您想要的是不同的色调(可能),以及亮度或饱和度的轻微变化,您可以像这样分配色调:

// assumes hue [0, 360), saturation [0, 100), lightness [0, 100)for(i = 0; i < 360; i += 360 / num_colors) {
    HSLColor c;
    c.hue = i;
    c.saturation = 90 + randf() * 10;
    c.lightness = 50 + randf() * 10;

    addColor(c);}


查看完整回答
反对 回复 2019-07-27
  • 3 回答
  • 0 关注
  • 742 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号