Обработка не рисует полные кривые с использованием цикла while - PullRequest
1 голос
/ 05 августа 2020

Я исследую возможности, которые дает Processing относительно генеративного искусства, и наткнулся на проблему:

Я хотел бы сгенерировать несколько кривых Безье, используя while l oop. Однако программа пропускает части некоторых кривых, а другие рисуются правильно.

Вот рабочий пример:

<pre><code>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");
    }
</code>

И здесь - вывод. Как видите, только несколько кривых нарисованы в полной форме.

Кроме того, когда я рисую одну из «ломаных» кривых из l oop, она работает нормально.

Буду признателен за любую помощь. Я хорошо провожу время, изучая концепции кодирования с визуальным выводом, который обеспечивает обработка.

1 Ответ

1 голос
/ 06 августа 2020

Работает по назначению. Посмотрите, что происходит, когда вы меняете цвет фона (отличный пост, кстати, рабочий пример сделал его достаточно хорошим, чтобы я захотел его отладить!):

background(190)

If you're clever, you'll notice that the "inside" of the curve has a color. Except that for now it's white. That's why only the topmost are "invisible": you're drawing them one after the other, starting topmost, so every new curve eats the last one by painting over it, but only "inside the curve". See what happens when I apply some color to differentiate the fill and the background better:

fill(random(255), random(255), random(255))

Now that the problem is obvious, here's the answer: transparency.

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

Which gives us this result:

заполнить (0, 0, 0, 0)

Удачи!

...