在非标准2d平面中旋转矩阵

时间:2014-07-10 11:57:55

标签: matrix rotation geometry 2d

我在如何在2d平面中旋转矩阵时遇到一些问题,因为我的坐标系不是标准的数学坐标系,我的平面有一个倒y轴,这意味着屏幕上的y值越高越好。我还想顺时针旋转矩阵而不是逆时针旋转标准。

因此,如果我试图说明我希望它如何工作:

O =原产地 X =要旋转的点

然后0度看起来像这样:

XXX
 O      

我希望90度看起来像这样:

  X
 OX
  X

180度应如下所示:

 O
XXX

270度应如下所示:

X
XO
X

关于如何在此平面中旋转后计算点的新x和y的任何想法?

1 个答案:

答案 0 :(得分:2)

顺时针而不是逆时针只意味着在角度上翻转标志。

要获得完整的结果,我们只需转换为'标准坐标',进行旋转,然后转换回来:

坐标变换及其反转是:

(x') = ( 1  0 ) (x)
(y')   ( 0 -1 ) (y)

逆时针旋转:

(x') = (  cos(angle) -sin(angle) ) (x)
(y')   (  sin(angle)  cos(angle) ) (y)

顺时针旋转是:

(x') = (  cos(angle)  sin(angle) ) (x)
(y')   ( -sin(angle)  cos(angle) ) (y)

总而言之:

(x') = ( 1  0 )(  cos(angle)  sin(angle) ) ( 1  0 )(x)
(y')   ( 0 -1 )( -sin(angle)  cos(angle) ) ( 0 -1 )(y)

将矩阵乘以得到:

(x') = (  cos(angle)  sin(angle) ) (x)
(y')   ( -sin(angle)  cos(angle) ) (y)

现在,正如您现在已经意识到的那样,这实际上是与旋转标准坐标相同的矩阵'在逆时针方向。

或代码:

// Angle in radians
double x2 =  cos(angle) * x1 - sin(angle) * y1;
double y2 =  sin(angle) * x1 + cos(angle) * y1;

例如,如果角度为180度,cos(angle)-1sin0,则为:

double x2 =  -x1;
double y2 =  -y1;