罗德里格斯旋转公式
罗德里格斯旋转公式是用来计算一个向量绕某一单位轴旋转给定角度后得到的新向量的公式:
R(n,α)=cos(α)I+(1−cos(α))nnT+sin(α)(0−nznynz0−nx−nynx0)\mathbf{R}(\mathbf{n}, \alpha) = \cos(\alpha)\mathbf{I} + (1 - \cos(\alpha))\mathbf{nn}^T + \sin(\alpha)\begin{pmatrix} 0 & -n_z & n_y \\ n_z & 0 & -n_x \\ -n_y & n_x & 0 \end{pmatrix}R(n,α)=cos(α)I+(1−cos(α))nnT+sin(α) 0nz−ny−nz0nxny−nx0
其描述的是给定一个单位向量轴 n和一个旋转角度 α\alphaα,如何用向量形式直接写出绕 n 旋转 α\alphaα 后的结果 R(n,α)\mathbf{R}(\mathbf{n}, \alpha)R(n,α)
I表示原向量
那么这个公式是怎么推导出来的呢?
罗德里格斯旋转公式的推导
第一步:向量分解

如图所示:
- a^\hat{a}a^ 表示旋转轴,是一个单位向量 ;
- S⃗\vec{S}S 表示待处理的原向量。
拆分 “平行分量”:(平行于旋转轴的部分)
proj(S~,a^)\text{proj}_{(\tilde{S}, \hat{a})}proj(S~,a^) 是 S⃗\vec{S}S 在 a^\hat{a}a^ 方向上的投影, 就是 S⃗\vec{S}S 中平行于旋转轴 a^\hat{a}a^ 的部分
计算方式:
用 S⃗\vec{S}S 和 a^\hat{a}a^ 的点积 (S⃗\vec{S}S · a^\hat{a}a^) 得到投影长度, 再乘以轴的方向 a^\hat{a}a^ ,就得到了平行部分S~∥\tilde{S}_{\parallel}S~∥
S~∥=proj(S~,a^)=a^(S~⋅a^)=a^a^TS~\tilde{S}_{\parallel} = \text{proj}_{(\tilde{S}, \hat{a})} = \hat{a}(\tilde{S} \cdot \hat{a}) = \hat{a}\hat{a}^T \tilde{S}S~∥=proj(S~,a^)=a^(S~⋅a^)=a^a^TS~
最后一行 a^a^TS~\hat{a}\hat{a}^T \tilde{S}a^a^TS~ 是由于向量的
外积等价于点积
拆分完 “平行分量” 后, 拆分 “垂直分量”,
根据平行四边形法则, 垂直分量的值为:
S~⊥=S~−S~∥\tilde{S}_{\perp} = \tilde{S} - \tilde{S}_{\parallel}S~⊥=S~−S~∥
对垂直部分 (垂直于旋转轴) 进行归一化
b^=normalize(S~⊥)=S~⊥∥S~⊥∥\hat{b} = \text{normalize}(\tilde{S}_{\perp}) = \frac{\tilde{S}_{\perp}}{\|\tilde{S}_{\perp}\|}


817

被折叠的 条评论
为什么被折叠?



