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

这是我编写的代码,我打算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)));

使用-, =键改变峰值计数。


繁星coding
浏览 114回答 2
2回答

慕哥9229398

您的问题是您不会为每个手臂旋转相同的矩阵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();

幕布斯7119047

用 push 和 pop 围绕你的 for 循环内的旋转,这样你每次迭代都重置旋转,我试过了,它在这里工作是结果代码&nbsp; &nbsp;int n;void setup(){&nbsp; size(displayWidth, displayHeight);&nbsp; n = 7;}void draw(){&nbsp; &nbsp; background(0);&nbsp; &nbsp; push();&nbsp; &nbsp; translate(displayWidth/2, displayHeight/2);&nbsp; &nbsp; strokeWeight(4);&nbsp; &nbsp; for (int i=0; i < n; i++){&nbsp; &nbsp; &nbsp; stroke(random(255), random(255), random(255));&nbsp; &nbsp; &nbsp; //println(i);&nbsp; &nbsp; &nbsp; //println("theta is", i*(2*PI/n));&nbsp; &nbsp; &nbsp; //println("theta in deg is", i*(2*PI/n)*180/PI);&nbsp; &nbsp; &nbsp; push();&nbsp; &nbsp; &nbsp; rotate(i*(2.0*PI)/n);&nbsp; &nbsp; &nbsp; line(0, 0, 400, 0);&nbsp; &nbsp; &nbsp; pop();&nbsp; &nbsp; }&nbsp; &nbsp; pop();}void keyPressed(){&nbsp; if (key == '='){&nbsp; &nbsp; n++;&nbsp; } else if (key == '-'){&nbsp; &nbsp; n--;&nbsp; &nbsp; if (n <= 0) n = 1;&nbsp; }&nbsp;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java