Java 行旋转:处理

Java 行旋转:处理,java,rotation,drawing,line,processing,Java,Rotation,Drawing,Line,Processing,下面给出的代码用于围绕窗口中心旋转一条线。问题是程序的输出很奇怪。我哪里做错了?我包括代码和不同的输出来说明这个问题 void setup() { size(500,500); translate(width/2, height/2); line(0,0,200,0); line(0,0,0,200); line(0,0,-200,0); line(0,0,0,-200); pushMatrix(); float x=200*cos(degrees(30));

下面给出的代码用于围绕窗口中心旋转一条线。问题是程序的输出很奇怪。我哪里做错了?我包括代码和不同的输出来说明这个问题

void setup()
{
  size(500,500);
  translate(width/2, height/2);
  line(0,0,200,0);
  line(0,0,0,200);
  line(0,0,-200,0);
  line(0,0,0,-200);
  pushMatrix();
  float x=200*cos(degrees(30));
  float y=200*sin(degrees(30));
  line(0,0,x,y);
  popMatrix();
}

将角度更改为45时,我得到:

当我将角度改为60时,我得到:


这里的角度是如何工作的?

您使用了错误的函数来获取弧度

转换度-->弧度

转换弧度-->度


以下代码运行良好:

float x, y, radius;

void setup () {
  size(500, 500);
  radius = 200;
}

void draw () {
  background(255);

  pushMatrix();
  translate(width/2, height/2);
  line(-200, 0, 200, 0);
  line(0, -200, 0, 200);

  x = radius*cos(radians(30));
  y = radius*sin(radians(30));

  line(0, 0, x, y);
  popMatrix();
}

让我澄清另一件事:

转换是累积的,适用于发生的一切 对函数的after和后续调用会累积效果。 […]如果在draw()中调用translate()或rotate(),则 当循环再次开始时,转换被重置

pushMatrix()和popMatrix()对于封装不希望应用于整个代码的矩阵变换非常有用。在你的例子中,它们是无用的