我试图在不使用旋转功能的情况下旋转矩形,而是使用矩阵..我知道如何使用矩阵旋转线但是我所有尝试旋转矩形都失败了。
我不认为这是完全使用但是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);
}
答案 0 :(得分:1)
尽管线条表现正常,但它是偶然的......你有一个关键的部分,计算新点的x和y,而不是它本来应该的。正如您在wikipedia中所发现的那样,您需要正确地计算矩阵中的sin和cos,但在创建新点时,您并不完全这样做:
答案 1 :(得分:0)
首先看看pushMatrix() / popMatrix()并协调空格。
还要看看Daniel Shiffman's tutorial,它的解释非常好。
如果您需要降低此级别,请查看PMatrix2D课程。 请注意,有一个rotate()函数。旋转后,您可以简单地应用 矩阵(使用applyMatrix())但您也可以使用push / pop矩阵调用。 另一种选择是将向量(矩形角)乘以旋转矩阵并绘制结果/变换点。