处理不使用 while 循环绘制完整的曲线

Processing doesn't draw complete curves using while loop

我正在研究 Processing 提供的关于生成艺术的可能性,我偶然发现了一个问题:

我想使用 while 循环生成多条贝塞尔曲线。但是,程序会跳过部分曲线,而其他曲线会正确绘制。

这是一个工作示例:

void setup() {
  size(1000,500);
  background(#ffffff);
    }
      float[] i_x = {1,1};
      float[] i_y = {1,1};

    void draw() {
      
      while (i_y[0] < height)  
      {  
      bezier(0,i_y[0],100,height-100,width - 100,height-100,width, i_y[0]);
      i_y[0] = i_y[0] * 1.1;
      } 
       save("bezier.jpg");
    }

和here是输出。如您所见,只有少数曲线以完整形状绘制。

此外,当我在循环外绘制其中一条 'broken' 曲线时,它工作正常。

如有任何帮助,我将不胜感激。我很高兴通过 Processing 提供的视觉输出来学习编码概念。

它按预期工作。看看当你改变背景颜色时会发生什么(很棒 post 顺便说一句,这个工作示例已经足够好了,我想调试它!):

如果你够聪明,你会注意到曲线的“内部”有颜色。除了现在它是白色的。这就是为什么只有最上面的是“不可见的”:你一个接一个地绘制它们,从最上面开始,所以每条新曲线都会通过在它上面绘画来吃掉最后一条曲线,但只是“在曲线内部”。看看当我应用一些颜色来更好地区分填充和背景时会发生什么:

既然问题很明显,那就是答案:透明度。

  while (y < height)  
  {
    fill(0, 0, 0, 0); // this is the important line, you can keep your algo for the rest
    bezier(0, y, offset, height-offset, width - offset, height-offset, width, y);
    y *= 1.1;
  }

这给了我们这个结果:

玩得开心!