Как центрировать эту сетку квадратов? - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь просто создать сетку из 5 повернутых прямоугольников.Но сетка не выйдет по центру.Кто-нибудь может мне помочь?

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);
for (int x =  margin+rectW; x <= width - margin; x += (width-2*(margin+rectW))/n_rectangles) {
  for (int y =  margin+rectH; y <= height - margin; y += (height-2*(margin+rectH))/n_rectangles) {
     fill(255);
     //now rotate matrix 45 degrees
     pushMatrix();
     translate(x, y);
     rotate(radians(45));
     // draw rectangle at x,y point
     rect(0, 0, rectW, rectH);
     popMatrix();

  }
}

1 Ответ

0 голосов
/ 28 января 2019

Я рекомендую рисовать отдельные "центрированные" прямоугольники, начало координат прямоугольника (-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();
    }
}
...