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

Matrix 处理,使用矩阵旋转矩形?,matrix,rotation,processing,Matrix,Rotation,Processing,我试图旋转一个矩形,但没有使用旋转函数,而是使用矩阵..我知道如何使用矩阵旋转一条线,但我所有旋转矩形的尝试都失败了 我不认为这是使用充分,但这里是我的代码,旋转线 float[][] rotation; float[] position; float theta = 180; float pointX; float pointY; void setup() { frameRate(60); size(600, 600); pointX = 0; pointY = 0;

我试图旋转一个矩形,但没有使用旋转函数,而是使用矩阵..我知道如何使用矩阵旋转一条线,但我所有旋转矩形的尝试都失败了

我不认为这是使用充分,但这里是我的代码,旋转线

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

首先查看/popMatrix()和坐标空间

再看看,解释得很好

如果你需要得到比这个更低的级别,看看这个类。 请注意,有一个rotate()函数。旋转后,您可以简单地应用 矩阵(使用applyMatrix())但也可以使用push/pop矩阵调用。
另一个选项是将向量(矩形角点)乘以旋转矩阵,并绘制结果/变换点。

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


你不使用android.graphics.Matrix的原因是什么?这是为了学校,老师没有提到任何关于它的事情……他不想让我们使用捷径……好吧(如果这是一门编程课程,我是你的老师,我会责怪你自己编写代码,而不是使用现有的课程)。你的矩形代码在哪里?嗯,它不在那里,因为我无法让它工作。我不确定从哪里开始。你可以旋转代表矩形边的四条线吗?问题是旋转函数…我以前有一个这样旋转的正方形,但我的老师说我们基本上没有旋转函数想让我们在后台编写旋转函数的代码,也可能是你的老师举办了关于变换矩阵的讲座?你有明确的作业要求吗?也许你的老师希望你从头开始学习一门3x3矩阵的基本课程,并实现你需要的功能(例如平移、旋转、缩放)。这些概念应该在你的课程材料中。你可能也会发现这本书很有用,而且这本书可能真的在你大学的图书馆里。在你的情况下,第一或第二并不重要……这本书写得很好,很容易理解……我在12年级,没有上大学:P和他我有一个正方形旋转,使用带旋转函数的推送和弹出矩阵,他说这是错误的。嗯,我把这个放在哪里?我认为应该实现的地方现在使我的线不旋转。nvm我让它工作了,非常感谢,我现在有一个正方形旋转的线框。但是我的老师当然想成为红色的……但我相信那是另一个话题