p5.js 中的独立对象
Independent objects in p5.js
我的意图是在 p5.js 中创建一个 8x8 网格,其中包含编号的矩形,其中每个矩形与其左侧上方的相比,在其中心轴上略微旋转。
下面的代码表示我目前的阶段。我的下一步是了解如何以简单明了的方式用 64 个对象矩形填充数组。这样我就可以根据需要独立编辑每一个的旋转。
任何资源或可逆向工程代码都会很棒。
代码:
function setup() {
createCanvas(700, 700);
colorMode(HSB);
background(120, 40, 50, 0.6);
rectMode(CENTER);
textAlign(CENTER)
//positioning values
posX = width/9;
posY = height/9;
//function to consecutively count to 64, with eight numbers on each column and row
for (num=1; num<9; num++){
for (row=1;row<9; row++){
text(str(num-8 + row*8),num*posX,posY*row);
};
};
noFill();
for (num=1; num<9; num++){
for (row=1;row<9; row++){
rect(num*posX,row*posY,50,50);
};
};
};
您可以使用 push()
/ pop()
来隔离坐标空间:每个矩形一个。在每个局部矩形坐标系中,您可以 translate()
到网格中的位置 然后 rotate()
。请记住转换的顺序很重要(先旋转,然后平移会产生不同的结果。
有关详细信息,请参阅 Processing 2D Transformations 教程
(同样的逻辑适用于 p5.js(只需将 pushMatrix()
换成 push()
/popMatrix()
换成 pop()
)):
function setup() {
createCanvas(700, 700);
colorMode(HSB);
background(120, 40, 50, 0.6);
rectMode(CENTER);
textAlign(CENTER)
//positioning values
posX = width/9;
posY = height/9;
//function to consecutively count to 64, with eight numbers on each column and row
for (num=1; num<9; num++){
for (row=1;row<9; row++){
text(str(num-8 + row*8),num*posX,posY*row);
};
};
noFill();
for (num=1; num<9; num++){
for (row=1;row<9; row++){
push();
translate(num*posX,row*posY);
rotate(radians(row + num));
rect(0, 0,50,50);
pop();
};
};
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/p5.min.js"></script>
(随意将 rotate()
参数替换为对您的目的有意义的(增加的)角度)
我的意图是在 p5.js 中创建一个 8x8 网格,其中包含编号的矩形,其中每个矩形与其左侧上方的相比,在其中心轴上略微旋转。
下面的代码表示我目前的阶段。我的下一步是了解如何以简单明了的方式用 64 个对象矩形填充数组。这样我就可以根据需要独立编辑每一个的旋转。
任何资源或可逆向工程代码都会很棒。
代码:
function setup() {
createCanvas(700, 700);
colorMode(HSB);
background(120, 40, 50, 0.6);
rectMode(CENTER);
textAlign(CENTER)
//positioning values
posX = width/9;
posY = height/9;
//function to consecutively count to 64, with eight numbers on each column and row
for (num=1; num<9; num++){
for (row=1;row<9; row++){
text(str(num-8 + row*8),num*posX,posY*row);
};
};
noFill();
for (num=1; num<9; num++){
for (row=1;row<9; row++){
rect(num*posX,row*posY,50,50);
};
};
};
您可以使用 push()
/ pop()
来隔离坐标空间:每个矩形一个。在每个局部矩形坐标系中,您可以 translate()
到网格中的位置 然后 rotate()
。请记住转换的顺序很重要(先旋转,然后平移会产生不同的结果。
有关详细信息,请参阅 Processing 2D Transformations 教程
(同样的逻辑适用于 p5.js(只需将 pushMatrix()
换成 push()
/popMatrix()
换成 pop()
)):
function setup() {
createCanvas(700, 700);
colorMode(HSB);
background(120, 40, 50, 0.6);
rectMode(CENTER);
textAlign(CENTER)
//positioning values
posX = width/9;
posY = height/9;
//function to consecutively count to 64, with eight numbers on each column and row
for (num=1; num<9; num++){
for (row=1;row<9; row++){
text(str(num-8 + row*8),num*posX,posY*row);
};
};
noFill();
for (num=1; num<9; num++){
for (row=1;row<9; row++){
push();
translate(num*posX,row*posY);
rotate(radians(row + num));
rect(0, 0,50,50);
pop();
};
};
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/p5.min.js"></script>
(随意将 rotate()
参数替换为对您的目的有意义的(增加的)角度)