在 Processing 中创建填充 window 的彩虹

Creating a Rainbow filled window in Processing

这是一项学校作业。 我是 Processing 软件的新手,我想创建一个充满彩虹的 window,就像下面的图片(在中心)一样。

左边的程序是我现在的程序。 中心的程序是我想要的样子。 右边是我正在使用的代码。我会复制粘贴到这里。

void setup() {
  size(255, 255);
}
void draw() {
noStroke();
colorMode(RGB, 255,255,255);
for (int i = 0; i <255; i++) {
  for (int j = 0; j < 255; j++) {
    stroke(j,i,128);
    point(i, j);
  }
}
}

任何对代码的帮助、建议和调整,我们将不胜感激。提前致谢。

您将从一些伪代码中获益。永远不要低估伪代码的力量。

在这张图片中,您需要做的一切都写得一清二楚:

因为我们在 RGB 中工作,并且图像告诉您如何处理红色、绿色和蓝色,所以您已经是金色的了,但是为了使事情更透明,我们将稍微更改代码.让我们暂时忘记循环。以下是图片告诉您的操作:

R -> vertical slider, the closer to the bottom the more red you have
G -> horizontal slider, left is less and right is more
B -> vertical slider, the opposite to the red slider

现在,知道您的值在 [0-255] 范围内,但您的图像也是一个 256 像素宽的正方形,您只需使用循环索引来获取 RGB 值:

for (int i = 0; i <255; i++) {
  for (int j = 0; j < 255; j++) {
    int r = j;        // up == more red
    int g = i;        // right == more green
    int b = 255 - j;  // down == less blue
    stroke(color(r, g, b));
    point(i, j);
  }
}

此外,只是为了好玩,因为这是静态图像而不是动画,您可以将这段代码放在 setup() 方法中,它会得到相同的结果:

void setup() {
  size(255, 255);

  for (int i = 0; i <255; i++) {
    for (int j = 0; j < 255; j++) {
      int r = j;        // up == more red
      int g = i;        // right == more green
      int b = 255 - j;  // down == less blue
      stroke(color(r, g, b));
      point(i, j);
    }
  }
}

void draw() {}  // you still need this method even if it's empty

这给你这个结果:

玩得开心!