参考资料
- wiki百科罗德里格斯旋转公式;
- 世界第一本具有完全交互式图形的线性代数书;
- opencv相关函数
有同学提了一个问题:下面这个公式是怎么推导出来的?
首先介绍旋转矩阵集合的概念:
SO(n) = { R ∈ R n × n ∣ R R T , det ( R ) = 1 } \text{SO(n)}=\{R\in\mathbb{R}^{n×n}|RR^T,\text{det}(R)=1\} SO(n)={R∈Rn×n∣RRT,det(R)=1}
SO(n) \text{SO(n)} SO(n)表示特殊正交群(Special Orthogonal Group), SO(3) \text{SO(3)} SO(3)表示三维空间旋转矩阵。定义 k \pmb{\text{k}} kkk是一个单位方向向量, v \pmb{\text{v}} vvv表示一个在三维实数空间 R 3 \mathbb{R}^3 R3的一个方向向量, v \pmb{\text{v}} vvv绕着 k \pmb{\text{k}} kkk转了 θ \text{θ} θ角度,用罗德里格斯公式表达旋转之后的向量 v rot \pmb{\text{v}_{\text{rot}}} vrotvrotvrot,表示为:
v rot = vcos ( θ ) + ( k × v ) sin ( θ ) + k ( k ⋅ v ) ( 1 − cos ( θ ) ) \pmb{\text{v}_{\text{rot}}}=\pmb{\text{v}}\text{cos}(θ)+(\pmb{\text{k}}×\pmb{\text{v}})\text{sin}(θ)+\pmb{\text{k}}(\pmb{\text{k}}·\pmb{\text{v}})(1-\text{cos}(θ)) vrotvrotvrot=vvvcos(θ)+(kkk×vvv)sin(θ)+kkk(kkk⋅vvv)(1−cos(θ))
上面的公式可以表示成三个元素加和的形式,我觉得光看下面两张图已经可以想明白是如何计算出结果的了,佩服大神的解算方法,甚是玄妙。
罗德里格斯公式表示的是如何通过定角度将原始空间矢量旋转后的矢量值表达出来,下一步就是如何转换成旋转矩阵
R
\pmb{\text{R}}
RRR,遵循下列公式:
如果想自己在三维空间进一步验证,我还画了一个3维图,如下图所示:
感兴趣的朋友可以加入星球下载源文件自己深入验证研究: