如果给出转换,则需要那些脏的三角函数 与角度 。但是,如果您知道笛卡尔单位向量的图像,则可以轻松构造矩阵。
如果形象 [1; 0; 0] 是 r , [0; 1; 0] 是 u 和 [0; 0; 1] 是 n 那么矩阵的效果就会如此
[1; 0; 0]
r
[0; 1; 0]
u
[0; 0; 1]
n
M * [1; 0; 0] == 1*r + 0*u +0*n == r M * [0; 1; 0] == 0*r + 1*u +0*n == u M * [0; 0; 1] == 0*r + 0*u +1*n == n
如果您的矩阵是,那正是您需要的转换 M=[r u n] 。
M=[r u n]
请注意,这通常会给你一个仿射变换,如果你的向量是正交的,它只会是一个刚性旋转。
只有当您想要从角度表示转换为矢量表示时,才使用正弦和余弦。但我们首先分析是什么使矩阵成为旋转矩阵。
旋转矩阵是正常的并且具有行列式+1。这意味着它们的列向量具有单位长度并且它们彼此垂直。正交矩阵的一个很好的特性是你可以通过转置它们来反转它们。但这只是一个很好的功能。
如果我们有2D旋转矩阵
M = / cos a sin a \ \ -sin a cos a /
,我们看到情况就是这样。第一列向量是 (cos a, -sin a) 。根据毕达哥拉斯定理,我们得到该向量具有单位长度。此外,它垂直于第二列向量(它们的点积为零)。
(cos a, -sin a)
到现在为止还挺好。该矩阵是旋转矩阵。但我们可以解释列向量吗?的确,我们可以。第一列向量是向量的图像 (1, 0) (即右矢量)。第二列向量是向量的图像 (0, 1) (即向上矢量)。
(1, 0)
(0, 1)
所以你看到使用正弦和余弦只是另一种计算方向向量的方法。这样做会自动确保它们具有单位长度并且它们彼此正交。但这只是一种方式。您还可以使用叉积或任何其他方案计算方向向量。关键点是满足旋转矩阵属性。