当前位置: 首页 > 知识库问答 >
问题:

Java-创建离散彩虹颜色阵列

令狐高洁
2023-03-14

很难描述我在做什么。我基本上想要创建一个离散的彩虹渐变,这样对于I个JButtons的任何一行,它们上的颜色渐变都将看起来是彩虹的。

我做了以下操作,但它只创建了一个红色渐变,然后是绿色渐变,然后是蓝色渐变:

Color[] c = new Color[i];
    for(int n = 0; n < i; n++) {
        if(n < i/3) {
            c[n] = new Color(255, 255/(n+1), 255/(n+1));
        } else if(n < 2*i/3) {
            c[n] = new Color(255/(n-(i/3)), 255, 255/(n-(i/3)));
        } else {
            c[n] = new Color(255/(n+1), 255/(n+1), 255);
        }
    }

你知道我怎样才能得到某种彩虹效果吗?

谢谢

编辑:

我使用了一个正弦函数,它似乎工作的稍微好一点,但不知道如何定义它,所以我得到了一个“彩虹波”在我想要的区域:

for(int n = 0; n < i; n++) {
        c[n] = new Color((int)(Math.sin(n) * 127 + 128), (int)(Math.sin(n + Math.PI/2) * 127 + 128), (int)(Math.sin(n + Math.PI) * 127 + 128));
    }

共有1个答案

汪阳飇
2023-03-14

您的代码具有正确的思想,但是您需要以不同的方式运行您的颜色。

假设你从绿色开始:

Color(  0, 255,   0)

慢慢地开始加入一些红色,变成黄色:

Color( 51, 255,   0)
Color(102, 255,   0)
Color(153, 255,   0)
Color(204, 255,   0)
Color(255, 255,   0)

然后,把绿色拿出来弄到红色:

Color(255, 204,   0)
Color(255, 153,   0)
Color(255, 102,   0)
Color(255,  51,   0)
Color(255,   0,   0)

现在,添加蓝色以得到紫色:

Color(255,   0,  51)
Color(255,   0, 102)
Color(255,   0, 153)
Color(255,   0, 204)
Color(255,   0, 255)

然后,删除红色以获得蓝色:

Color(204,   0, 255)
Color(153,   0, 255)
Color(102,   0, 255)
Color( 51,   0, 255)
Color(  0,   0, 255)

将绿色重新添加到青色中:

Color(  0,  51, 255)
Color(  0, 102, 255)
Color(  0, 153, 255)
Color(  0, 204, 255)
Color(  0, 255, 255)

最后移除蓝色以返回绿色:

Color(  0, 255, 204)
Color(  0, 255, 153)
Color(  0, 255, 102)
Color(  0, 255,  51)
Color(  0, 255,   0)

在这个圈子里,当然,你可以从任何地方开始,也可以往任何方向走。

在代码中,它看起来就像这样简单:

List<Color> colors = new ArrayList<Color>();
for (int r=0; r<100; r++) colors.add(new Color(r*255/100,       255,         0));
for (int g=100; g>0; g--) colors.add(new Color(      255, g*255/100,         0));
for (int b=0; b<100; b++) colors.add(new Color(      255,         0, b*255/100));
for (int r=100; r>0; r--) colors.add(new Color(r*255/100,         0,       255));
for (int g=0; g<100; g++) colors.add(new Color(        0, g*255/100,       255));
for (int b=100; b>0; b--) colors.add(new Color(        0,       255, b*255/100));
                          colors.add(new Color(        0,       255,         0));

在这里,100是每个淡色的步骤数,您可以调整它。

如果需要数组中的颜色,请在末尾执行以下操作:

Color[] c = colors.toArray(new Color[colors.size()]);

需要注意的一点是:人眼对绿色的敏感度远高于对红色和蓝色的敏感度。因此您可能希望添加和删除绿色的步骤比添加红色和蓝色的步骤要小。只是玩不同的步长,直到你得到的东西看起来均匀。

PS:对于我用它做的事情,上面描述的线性褪色是完全足够的,看起来和预期的一样。我个人认为你不需要通过使用sin和cos或其他数学来使事情复杂化。

 类似资料:
  • 问题内容: 我目前正在将数据读入如下所示的数据框中。 我想根据此数据创建一个欧几里得距离矩阵,该矩阵显示所有城市对之间的距离,因此我得到一个结果矩阵,如下所示: 我的实际数据框中还有更多城市和坐标,因此我需要能够以某种方式遍历所有城市对并创建一个距离矩阵,就像上面显示的那样,但是我不确定如何配对所有城市一起引用并应用欧几里德距离公式?任何帮助,将不胜感激。 问题答案: 我认为您对distance_

  • 我正在尝试使用 中的 和 制作地图,其中一组点数据使用连续比例(-1 到 1)着色,一组线数据使用离散比例(a,b,c,d)着色。但是,当我在同一张地图中同时使用离散和连续美学时,我遇到了麻烦。这里发布了一个类似的问题,但它没有涉及映射美学。 下面是一个简化的示例: 很明显,连续(点数据)和离散(线数据)美学之间存在冲突,但我如何每次调用为每个数据集使用不同的颜色美学?使用<code>inheri

  • 我需要生成一个梯度位图,显示彩虹渐变之间的两种颜色,这是由用户选择的。生成彩虹很容易。下面的代码是我从Wiki获得的,并对其进行了稍微的修改。它具有快速、简单的优点。 这个算法的问题是它不能在两种颜色之间显示部分彩虹。嗯,当然可以,但你必须接近每种颜色的分数,我不喜欢这样的解决方案。我试着把颜色分解成r、g、b通道,但这不起作用。事后看来,原因相当明显。假设您需要在FF0000和0000ff之间的

  • 按下按钮,灯环显示如下效果,行如彩虹。 1. 添加事件类积木 当按钮被按下时。 2. 添加灯光类积木 显示(),让灯环亮起彩虹图案。 3. 按下光环板的按钮看看吧! 下载代码

  • 本文向大家介绍python绘制彩虹图,包括了python绘制彩虹图的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了python绘制彩虹图的具体代码,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 这件事我会坦白的;这是一个家庭作业,但有人能引导我走上正确的方向,并向我解释代码的某些部分应该是如何工作的吗?说明在代码和问题下面。 这是我到目前为止的代码: 我的问题:FILARC到底是如何工作的;我理解参数中的内容,但必须做什么每个弧都是不同的?如何为每个弧线设置一种颜色?我试着这样做,最后我用最接近结尾的颜色显示出来,并覆盖其他颜色。我可能会有更多,我继续编码。 这些是指示: ![在此处输入