当前位置: 首页 > 面试题库 >

Java如何自动生成N种“独特”颜色?

裴钧
2023-03-14
问题内容

我在下面编写了两种方法来自动选择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);
}

问题答案:

你可以使用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);
}


 类似资料:
  • 我在java编程方面有一些问题。这是我第一次遇到java,所以请耐心等待,因为我可能会错过绝对的基础知识。无论如何,长话短说,我有数独要做,我遇到了一些问题。我需要随机数来制作数独板,或者更确切地说是它的值。 如果您不知道数独是关于什么的,则必须只有1-9的数字,并且它们不能在行列和3x3正方形中重复。板本身是9x9,因此可以分为9个3x3正方形。 主要问题是随机生成的值有时会使模式难以解决。因此

  • 问题内容: 我正在寻找一种基于类中定义的字段为现有Java源代码文件中的新方法自动生成源代码的方法。 本质上,我希望执行以下步骤: 读取并解析 遍历源代码中定义的所有字段 添加源代码方法 保存(理想情况下,保留现有代码的格式) 哪些工具和技术最适合完成此任务? 编辑 我不想在运行时生成代码;我想扩充现有的Java 源代码 问题答案: 用自动生成的代码修改相同的Java源文件是维护的噩梦。考虑生成一

  • 问题内容: 我有一个带有id(guid)列的sql表。如何强制数据库为每条新记录自动生成新的Guid? 问题答案: 添加。

  • 问题内容: 我正在尝试检查目录是否存在,如果发生这种情况,我想给它另一个数字,例如,如果“ folderX”存在,那么我想创建一个新的名为“ FolderX1”的文件夹这样做一次,因为我在这样的if / else语句中拥有它: 我要递归地执行此操作,如果程序检测到“ folderX”存在,则应跳转并检查其他文件夹(folderX,FolderX1,FolderX2等),直到找到可以创建的文件夹,但

  • 我有一个白色的图像,我用作为一个div的背景,我想颜色匹配的主题主色。我知道我能做到: 并循环遍历以查找颜色,但是否可以提前计算此值?鉴于指定的十六进制值相当暗,我想我还需要包含过滤器。 给定十六进制值为 我需要执行哪些数学运算来计算所需的和值,以将白色背景图像转换为相同的颜色? 这是一个的片段,其中白色背景图像被过滤为绿色。这里的技巧是,正在过滤的是整个,而不仅仅是图像。如果我要在中输入一些文本

  • 问题内容: 有人知道如何从1开始生成,以便下一个对象具有2,依此类推吗? 我尝试了以下方法,但不起作用: 问题答案: 您需要一个 静态的 类成员来跟踪上次使用的索引。确保还实现一个复制构造函数: 更新: 正如@JordanWhite建议的那样,您可能希望使static计数器成为 atomic ,这意味着可以安全地同时使用(即一次在多个线程中使用)。为此,将类型更改为: 增量读取和复位操作变为: