为了账号安全,请及时绑定邮箱和手机立即绑定

旋转变换在处理循环时不起作用

旋转变换在处理循环时不起作用

繁星coding 2023-03-31 16:32:04
这是我编写的代码,我打算n从一个点开始画线。各自相隔一个角度2*PI / n。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);      rotate(i*(2*PI/n));      line(0, 0, 400, 0);    }    //noLoop();    pop();}void keyPressed(){  if (key == '='){    n++;  } else if (key == '-'){    n--;    if (n <= 0) n = 1;  } }由于某种原因这是错误的,因为它不适用于n=3,5,6,7,9,10...它仅在 n 为1,2,4,8,16,32...2 的倍数时有效。我一定做错了什么。任何帮助表示赞赏。而如果我做正常的三角函数,它就可以工作。即通过替换      rotate(i*(2*PI/n));      line(0, 0, 400, 0);经过      line(0, 0, 400 * cos(i*(2*PI/n)), 400 * sin(i*(2*PI/n)));使用-, =键改变峰值计数。
查看完整描述

2 回答

?
慕哥9229398

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();


查看完整回答
反对 回复 2023-03-31
?
幕布斯7119047

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;

  } 

}


查看完整回答
反对 回复 2023-03-31
  • 2 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信