我在如何在2d平面中旋转矩阵时遇到一些问题,因为我的坐标系不是标准的数学坐标系,我的平面有一个倒y轴,这意味着屏幕上的y值越高越好。我还想顺时针旋转矩阵而不是逆时针旋转标准。
因此,如果我试图说明我希望它如何工作:
O =原产地 X =要旋转的点
然后0度看起来像这样:
XXX
O
我希望90度看起来像这样:
X
OX
X
180度应如下所示:
O
XXX
270度应如下所示:
X
XO
X
关于如何在此平面中旋转后计算点的新x和y的任何想法?
答案 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)
为-1
,sin
为0
,则为:
double x2 = -x1;
double y2 = -y1;