Вместо того, чтобы выяснить, как перемещать координаты для ваших прямоугольников, "переместите систему координат", используя translate :
final int rectSize = ...
void setup() {
...
noLoop();
strokeWeight(4);
stroke(127);
}
На рисовании, а не выяснение x /координаты y для каждого прямоугольника, вместо этого мы «рисуем ряд плиток», начиная с (0,0), а затем мы изменяем значение (0,0) с помощью translate
, перемещая его внизодин ряд и вправо или влево немного в зависимости от того, в каком ряду мы находимся;мы хотим двигаться вправо для строк 1 и 2, затем влево для строк 3 и 4, затем вправо для 5 и 6 и т. д., поэтому мы хотим двигаться влево, если (номер строки / 2) округляется до четного числа, и вправо, еслионо округляется до нечетного числа.
void draw() {
int steps = 4;
for(int row=0; row < 1 + height/rectSize; row++) {
drawTileRow();
int step = rectSize / steps;
if ((row / 2) % 2 == 0) {
step = -step;
}
translate(step, rectSize);
}
}
Затем вы можете написать гораздо более простой код в функции drawTileRow, просто рисуя ректы, начинающиеся с (0,0) и заканчивающиеся на (width, 0), хотя вы действительнохотите начинать с -rectSize
и заканчивать width+rectSize
, чтобы компенсировать тот факт, что вся глобальная система координат получает смещение:
void drawTileRow() {
boolean negative = false;
for(int x=-rectSize; x<width+rectSize; x+=rectSize) {
fill(negative ? 255 : 0);
rect(x,0,rectSize,rectSize);
negative = !negative;
}
}
Результат является должным образом триптическим.