针对对于任意轴的旋转矩阵,思路同样是求基本向量在旋转后的结果。
向量v在绕任意轴 n 旋转θ角度后变为 v′,表达式为:
v′=vR(n^,θ)
为了方便计算,将向量 v 拆成两部分 v∥ 和 v⊥,分别表示平行于和垂直于旋转轴 n 的分量。在旋转过程中,平行于旋转轴 n 的分量 v∥ 是不会发生变化的,因此要求的只是旋转后的 v⊥′ 。示意图如下:
- v∥可以通过点积求得,即v∥=(v⋅n^)n^
- v⊥可以通过v减去v∥得到,即 v⊥=v−v∥
- w 向量是为了与向量 v⊥ 构成一个平面,w 向量的长度与v⊥ 相同,且垂直于n^和v⊥,所以可得w=n^×v⊥
- 此时,w 和 v⊥ 构成了一个二维平面,根据二维平面的旋转可得,v⊥′=cosθv⊥+sinθw
如果两个坐标轴是单位向量,则旋转 θ 角度的结果为 (cosθ,sinθ)。而这里两个坐标轴分别是 v⊥ 和 w ,因此结果为:cosθv⊥+sinθw
- 结合上面所有的式子,可推导出v′的公式,即
v′=v⊥′+v∥=cosθv⊥+sinθw+(v⋅n^)n^=cosθ(v−(v⋅n^)n^)+sinθ(n^×v⊥)+(v⋅n^)n^=cosθ(v−(v⋅n^)n^)+sinθ(n^×(v−v∥))+(v⋅n^)n^=cosθ(v−(v⋅n^)n^)+sinθ(n^×v−n^×v∥)+(v⋅n^)n^=cosθ(v−(v⋅n^)n^)+sinθ(n^×v−0)+(v⋅n^)n^=cosθ(v−(v⋅n^)n^)+sinθ(n^×v)+(v⋅n^)n^
即最终用n^,θ,v表达v′的式子为:
v′=cosθ(v−(v⋅n^)n^)+sinθ(n^×v)+(v⋅n^)n^
首先将 v 以数值 [100] 代入,可得:
v′=cosθ(100T−nxnxnynzT)+sinθ0n_z−n_yT+nxnxnynzT
其中:n^=nxnynzT,且 n^×v=0nz−nyT
原式可继续简化得:
v′=cosθ(100T−nxnxnynzT)+sinθ0nz−nyT+nxnxnynzT=cosθ(1−nx2)+0+nx2cosθ(0−nxny)+sinθnz+nxnycosθ(0−nxnz)−sinθny+nxnzT=nx2(1−cosθ)+cosθnxny(1−cosθ)+nzsinθnxnz(1−cosθ)−nysinθT
该结果即为最终求得矩阵的一行,使用相同的步骤可以求得剩下两行,即
当 v 以数值 [010] 代入,可得
v′=nxny(1−cosθ)−nzsinθny2(1−cosθ)+cosθnynz(1−cosθ)+nxsinθT
当 v 以数值 [001] 代入,可得
v′=nxnz(1−cosθ)+nysinθnynz(1−cosθ)−nxsinθnz2(1−cosθ)+cosθT
至此,得到了绕任意轴 n 旋转 θ 角度矩阵的三行数据,合并在一起可得:
R(n^,θ)=nx2(1−cosθ)+cosθnxny(1−cosθ)−nzsinθ nxnz(1−cosθ)+nysinθnxny(1−cosθ)+nzsinθny2(1−cosθ)+cosθnynz(1−cosθ)−nxsinθnxnz(1−cosθ)−nysinθnynz(1−cosθ)+nxsinθnz2(1−cosθ)+cosθ