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

标签 java processing

这是我编写的代码,我打算从一个点开始绘制 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)));

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

最佳答案

你的问题是你没有为每个 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();

关于java - 旋转变换在处理循环时不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57094648/

相关文章:

java - 打印内存地址而不是字符串值

java - 处理游戏: Gif images not respawning as intended

java - 如何让多个物体随机移动?

processing - 处理中的新窗口

java - 为什么在使用空引用访问静态时不出现 NullPointerException?

java - 如何对对象 java 的数组列表进行排序?

Java JDBC : MySQLNonTransientConnectionException when trying to connect with IP address

java - 仅在一个 JTable 单元格中的复选框

java - Spring独立应用程序的全局错误处理

java - 从处理中的文本中读取值