【问题标题】:Processing doesn't draw complete curves using while loop处理不使用while循环绘制完整的曲线
【发布时间】:2020-08-05 15:01:31
【问题描述】:

我正在研究 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 是输出。如您所见,只有少数曲线是完整绘制的。

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

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

【问题讨论】:

  • 您可以(也应该)将此循环放在setup 方法中,因为它只需要运行一次。 draw 方法实际上只是一个每秒运行约 60 次的循环(您可以更改),您不需要这样做,尤其是在保存到文件时。

标签: loops while-loop processing curve generative-art


【解决方案1】:

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

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

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

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

这给了我们这个结果:

玩得开心!

【讨论】:

  • 漂亮!我不希望曲线具有背景颜色。谢谢你。 :)
猜你喜欢
  • 2019-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-11
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
相关资源
最近更新 更多