处理,使用矩阵旋转矩形?

时间:2013-12-10 15:49:23

标签: matrix rotation processing

我试图在不使用旋转功能的情况下旋转矩形,而是使用矩阵..我知道如何使用矩阵旋转线但是我所有尝试旋转矩形都失败了。

我不认为这是完全使用但是heres是我的代码旋转线。

float[][] rotation;
float[] position;
float theta = 180;
float pointX;
float pointY;
void setup() {

  frameRate(60);
  size(600, 600);

  pointX = 0;
  pointY = 0;

 rotation = new float[2][2];
 position = new float[8];
}

 void draw() {
 background(200);
 theta = mouseX;

 position[0] = mouseY;
 position[1] = mouseY;

 position[2] = -mouseY;
 position[3] = mouseY;

 rotation[0][0] = cos(radians(theta));
 rotation[0][1] = -sin(radians(theta));
 rotation[1][0] = sin(radians(theta));
 rotation[1][1] = cos(radians(theta));

 float newpos[] = new float[8]; 

 newpos[0] += position[0] * rotation[0][0];
 newpos[1] += position[1] * rotation[0][1];  

 translate(width/2, height/2);

 line(0, 0, pointX+newpos[0], pointY+newpos[1]);
 line(0, 0, pointX+newpos[0] * -1, pointY+newpos[1] * -1);

}

2 个答案:

答案 0 :(得分:1)

尽管线条表现正常,但它是偶然的......你有一个关键的部分,计算新点的x和y,而不是它本来应该的。正如您在wikipedia中所发现的那样,您需要正确地计算矩阵中的sin和cos,但在创建新点时,您并不完全这样做:

enter image description here

enter image description here

答案 1 :(得分:0)

首先看看pushMatrix() / popMatrix()并协调空格。

还要看看Daniel Shiffman's tutorial,它的解释非常好。

如果您需要降低此级别,请查看PMatrix2D课程。 请注意,有一个rotate()函数。旋转后,您可以简单地应用 矩阵(使用applyMatrix())但您也可以使用push / pop矩阵调用。 另一种选择是将向量(矩形角)乘以旋转矩阵并绘制结果/变换点。