旋转矩阵推导

来源:互联网 发布:非p2p下载软件 编辑:程序博客网 时间:2024/05/22 13:16
在左手坐标系中,设P(x, y, z)是旋转之前的点,Q(x`, y`, z)为绕z轴顺时针旋转o度后的点,M为旋转矩阵。则有:
(x`, y`, z`) = (x, y, z) * M

如下图,从z轴正向看旋转:


角POX = a,  角QOX = b,则有b = a + o
已知P的极坐标方程为:
x = r * cos(a)
y = r * sin(a)
Q的极坐标方程为:
x` = r * cos(b)
y` = r * sin(b)

因为cos(b) = cos(a + o) = cos(a)*cos(o) - sin(a)*sin(o),
sin(b) = sin(a + o) = sin(a)*cos(o) + cos(a)*sin(o)。
所以,
x` = r * cos(a)*cos(o) -  r * sin(a)*sin(o) = x * cos(o) - y * sin(o)
y` = r * sin(a)*cos(o) + r * cos(a)*sin(o) = x * sin(o) + y * cos(o)

此时可以得出
         | cos(o)     sin(o)    0 |
M =  | -sin(o)    cos(o)    0 |
         | 0             0            1 |
使得
Q(x`, y`, z`) = P(x, y, z) * M。

同理,可以推出其他轴的旋转矩阵。

求旋转矩阵的逆矩阵M`,使得P = Q * M`

将Q点向相反的方向旋转o度,即可得出逆矩阵。
o` = -o
将o`带入M中,可以得到M的逆矩阵
         | cos(-o)      sin(-o)   0 |
M` = |- sin(-o)     cos(-o)   0 |
         | 0               0             1 |
已知,
cos(-o) = cos(o)
sin(-o) = -sin(o)
所以,最终的逆矩阵为,
         | cos(o)     -sin(o)      0 |
M` = | sin(o)     cos(o)       0 |
         | 0               0             1 |