Я рекомендую рисовать отдельные "центрированные" прямоугольники, начало координат прямоугольника (-rectW/2, -rectH/2)
:
rect(-rectW/2, -rectH/2, rectW, rectH);
Рассчитать расстояние от центра первого прямоугольника до центра последнего прямоугольника для строки и столбца:
int size_x = margin * (n_rectangles-1);
int size_y = margin * (n_rectangles-1);
Перевести в центр экрана (width/2, height/2)
,
в положение верхнего левого прямоугольника (-size_x/2, -size_y/2)
и, наконец, каждый прямоугольник в свою позицию (i*margin, j*margin)
:
translate(width/2 - size_x/2 + i*margin, height/2 - size_y/2 + j*margin);
См. Окончательный код:
int margin = 150; //padding to sides and top/bottom
int rectH = 60; // height of rectangle
int rectW = 20; // width of rectangle
int n_rectangles = 5; // 5 rectangles to draw
size(800,800);
int size_x = margin * (n_rectangles-1);
int size_y = margin * (n_rectangles-1);
for (int i = 0; i < n_rectangles; ++i ) {
for (int j = 0; j < n_rectangles; ++j ) {
fill(255);
pushMatrix();
translate(width/2 - size_x/2 + i*margin, height/2 -size_y/2 + j*margin);
rotate(radians(45));
rect(-rectW/2, -rectH/2, rectW, rectH);
popMatrix();
}
}