gpt4 book ai didi

Java-创建一个离散的彩虹色数组

转载 作者:搜寻专家 更新时间:2023-11-01 01:04:55 24 4
gpt4 key购买 nike

很难描述我正在尝试做的事情。我基本上想创建一个离散的彩虹渐变,这样对于 i 个 JButton 的任何一行,它们之间的颜色渐变看起来都是彩虹。

我已经完成了以下操作,但它实际上只创建了一个红色渐变,然后是绿色渐变,然后是蓝色渐变:

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));
}

最佳答案

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

假设您从绿色开始:

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 或其他数学来使事情复杂化。

关于Java-创建一个离散的彩虹色数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22973532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com