I am trying to simply draw a centered grid of 5 rectangles but (1) the grid is not centered and (2) it draws 6. Can anyone help me out on what I’m doing wrong?
int margin = 150;
int rectH = 60;
int rectW = 20;
int n_rectangles = 5;
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);
pushMatrix();
translate(x, y);
rotate(radians(45));
rect(0, 0, rectW, rectH);
popMatrix();
}
}
Dennis
January 28, 2019, 7:21pm
2
Hi, you have miss the sign:
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);
pushMatrix();
translate(x, y);
rotate(radians(45));
rect(0, 0, rectW, rectH);
popMatrix();
}
}
seeing is believing…
keep us up to date.
Dennis
January 28, 2019, 7:36pm
3
Hops… I forgot to center the rectangles:
size(800, 800);
rectMode(CENTER);
for (int x = margin-rectW; x < width - margin/2; x += (width-2*(margin - rectW))/(n_rectangles-1)) {
for (int y = margin-rectH; y < height - margin/2; y += (height-2*(margin - rectH))/(n_rectangles-1)) {
fill(255);
pushMatrix();
translate(x, y);
rotate(radians(45));
rect(0, 0, rectW, rectH);
popMatrix();
}
}
I fixed up the centering with the instruction rectMode(CENTER)
and I correct the last part of expression (n_rectangles-1)
Now it should work properly…
1 Like
kll
January 29, 2019, 3:07am
4
also can add some mouse interaction:
int x = 100, y = x, w = 20, h = 10; // rectangle spec
int grid = 6, many = grid*grid; // grid spec
int offset = 30; // add offset between objects
float ang = 0;
void draw_rect(int i) {
offset = int(map(mouseY,0,height,0,100));
ang = map(mouseX,0,width,0,PI);
int posx = x+(i%grid)*(w+offset);
int posy = y+(floor(i/grid))*(h+offset);
push();
translate(posx,posy);
rotate(ang);
rect(0,0, w, h);
pop();
}
void setup() {
size(800, 800);
stroke(0,0,200);
fill(0,200,0);
rectMode(CENTER);
println("use: mouse");
}
void draw() {
background(200, 200, 0);
for (int i = 0; i < many; i++) draw_rect(i);
}