Как изменить значения, которые уже используются в цикле while? - PullRequest
2 голосов
/ 10 ноября 2019

Я пытаюсь написать программу, которая отображает сферы с фиксированным интервалом "d = 19" в прямоугольнике. Я только заставил это работать в направлении оси x и y или в диагональной оси, но не на всей области прямоугольника. Я знаю, что решение должно быть довольно простым, но я не могу его получить.

void setup() {
   size(600, 500);
   background(255);
}

void draw() {

    int x = 50;
    int y = 100;
    int r = 5;
    int d = 19;

    background(255);
    rect(x, y, mouseX-x, mouseY-y);

    while (y <= mouseY) {                 
        ellipse(x, y, 2*r, 2*r);

        while (x <= mouseX) {
          ellipse(x, y, 2*r, 2*r);
          x = x+d;
        }
        y = y+d;
    }
}

1 Ответ

1 голос
/ 10 ноября 2019

Вы должны сбросить координату x перед внутренним циклом вложенных циклов. Круги должны начинаться в каждой строке 1-го столбца:

void draw() {
    int x=50;
    int y=100;
    int r =5;
    int d =19;

    background(255);
    rect(x, y, mouseX-x, mouseY-y);

    while (y <= mouseY) {      

        x = 50; // <--- start at the begin in each row

        while (x <= mouseX) {
            ellipse(x, y, 2*r, 2*r);
            x=x+d;
        }
        y=y+d;
    }
}

Обратите внимание, что для рисования объектов в двумерной сетке достаточно 2 вложенных циклов.

...