2 回答
TA贡献1877条经验 获得超6个赞
您的问题是您不会为每个手臂旋转相同的矩阵n。您可以通过简单地删除旋转命令中的 来修复代码i*。
所以
rotate(i*(2*PI/n));
line(0, 0, 400, 0);
应该是
rotate(2*PI/n);
line(0, 0, 400, 0);
如果你想与你一起工作,i*你必须在每次画线时推入和弹出一个矩阵,而不仅仅是在开始和结束时draw():
push();
rotate(i*(2*PI/n));
line(0, 0, 400, 0);
pop();
TA贡献1794条经验 获得超8个赞
用 push 和 pop 围绕你的 for 循环内的旋转,这样你每次迭代都重置旋转,我试过了,它在这里工作是结果代码
int n;
void setup(){
size(displayWidth, displayHeight);
n = 7;
}
void draw(){
background(0);
push();
translate(displayWidth/2, displayHeight/2);
strokeWeight(4);
for (int i=0; i < n; i++){
stroke(random(255), random(255), random(255));
//println(i);
//println("theta is", i*(2*PI/n));
//println("theta in deg is", i*(2*PI/n)*180/PI);
push();
rotate(i*(2.0*PI)/n);
line(0, 0, 400, 0);
pop();
}
pop();
}
void keyPressed(){
if (key == '='){
n++;
} else if (key == '-'){
n--;
if (n <= 0) n = 1;
}
}
添加回答
举报