【问题标题】:How can I generate a list of semi-random colours?如何生成半随机颜色列表?
【发布时间】:2014-04-14 16:23:44
【问题描述】:

我想查看随机生成的颜色列表并检查它们是否彼此不同。不像colour1 == colour2,但要确保生成的颜色不太相似。

我的意思是使用此代码(或类似代码)来生成颜色列表:

Random randomGenerator = new Random();
ArrayList<Color> colours = new ArrayList<Color>();
while(true) {
    int red = randomGenerator.nextInt(255);
    int green = randomGenerator.nextInt(255);
    int blue = randomGenerator.nextInt(255);
    Color randomColour = new Color(red,green,blue);
    if(!colours.contains(randomColour)) {
        colours.add(randomColour);
    }
    if(colours.size() >= 100) {
        break;
    }
}

【问题讨论】:

  • 那么当前的实现有什么问题??
  • 你有没有想过颜色相似度的定义?例如,当一种颜色的绝对 rgb 差异之和小于 15 时,一种颜色与另一种颜色相似。
  • 应该是 nextInt(256)
  • 正如 reto 所指出的,这完全取决于您对“相似性”的衡量。 (不是在谈论尝试创建 16777217 种“不太相似”的颜色......)

标签: java list random colors generator


【解决方案1】:

我的第一个想法是这样的,它是伪随机的

    Random randomGenerator = new Random();
    ArrayList<Color> colours = new ArrayList<Color>();
    int k1 = 0, k2=0,  k3 = 0;
    while(true) {
        k1 = k1 +1 <= 4 ? k1 +1 : (k1+1)%4;
        k2 = k2 +2 <= 4 ? k2 +2 : (k2+2)%4;
        k3 = k3 +3 <= 4 ? k3 +3 : (k3+3)%4;
        int red = randomGenerator.nextInt(255/4*k1);
        int green = randomGenerator.nextInt(255/4*k2);
        int blue = randomGenerator.nextInt(255/4*k3);
        Color randomColour = new Color(red,green,blue);
        System.out.println("R:" +randomColour.getRed()+"G:" +randomColour.getGreen()+"B:" +randomColour.getBlue());
        if(!colours.contains(randomColour)) {
            colours.add(randomColour);
        }
        if(colours.size() >= 100) {
            break;
        }

    }

【讨论】:

  • 算法完成后,我会将颜色保存在一个集合中,并将其转换为一个列表。
猜你喜欢
  • 2023-01-05
  • 1970-01-01
  • 2010-12-07
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 2012-02-21
  • 2014-12-04
  • 2013-01-21
相关资源
最近更新 更多