2

我正在调查 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");
    }

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

此外,当我从循环中绘制一条“断”曲线时,它工作正常。

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

4

1 回答 1

1

它按预期工作。看看当你改变背景颜色时会发生什么(顺便说一句很棒的帖子,这个工作示例足以让我想要调试它!):

背景(190)

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

填充(随机(255),随机(255),随机(255))

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

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

这给了我们这个结果:

填充(0, 0, 0, 0)

玩得开心!

于 2020-08-06T00:23:21.587 回答