旋转向量解法(罗德里格公式推导及理解)

在计算机图形学里,我们时常有这种需求,求一个向量绕任意轴旋转θ后的向量是多少。我们可以使用罗德里格公式解得。

罗德里格公式:V_{rot}=cos\Theta V +(1-cos\Theta ) (V\cdot K)K+sin\Theta K\times V

其中,θ为旋转角度,V为待旋转向量,K为旋转轴(单位向量),V_{rot}为旋转后的向量。

旋转向量解法(罗德里格公式推导及理解)_第1张图片

(上图来自百度)

推导:

先看图,v为待旋转向量,k为旋转轴,v_{\parallel }为与k平行的v分量,v_{\perp }为与k垂直的v分量,v_{\parallel }v_{\perp }、v、k在同一平面上(由v和k确定的平面),w是该平面的法向量。V_{rot}是旋转后的向量。

由以上可知,

v=v_{\perp }+v_{\parallel }

v_{}\parallel =(v\cdot k)k

v_{}\perp =v-v_{}\parallel=v-(v\cdot k)k

w=k\times v

{\color{Red}v_{rot\perp }=cos\Theta v_{}\perp +sin\Theta w}

敲黑板(划重点):{\color{Red} v_{rot\perp }}{\color{Red} v_{rot}}{\color{Red} v_{}\perp }{\color{Red} w}构成的平面上的分量,{\color{Red} cos\Theta v_{\perp }}{\color{Red} v_{rot\perp }}{\color{Red} -v_{\perp }}上的分量(为叙述方便记为a),{\color{Red} sin\Theta w}{\color{Red} v_{rot\perp }}{\color{Red} w}上的分量(记为b),a很好理解,b可以这样看:{\color{Red} v_{rot\perp }}的模等于{\color{Red} v_{}\perp }的模等于{\color{Red} w}的模,相信有些人疑问为什么等于{\color{Red} w}的模?

因为

{\color{Red} k\times v_{}\perp =w}

{\color{Red} \left | k \right |\cdot \left | v_{\perp } \right |\cdot sin \frac{\pi }{2}= \left | w \right | }

{\color{Red} \left | v_{\perp} \right |=\left | w \right |}

所以

{\color{Red} \left | b \right |=sin\Theta \left | v_{rot \perp}\right |}

{\color{Red} \left | b \right |=sin\Theta \left | w \right |}

{\color{Red} b=\left | b \right |\cdot \frac{w}{\left | w \right |}}

{\color{Red} b=sin\Theta \left | w \right |\cdot \frac{w}{\left | w \right |}}

{\color{Red} b=sin\Theta w}

综上所述,我们可知

v_{rot}=v_{}\parallel +v_{rot \perp}

v_{rot}=(v\cdot k)k+cos\Theta v_{\perp}+sin\Theta w

v_{rot}=(v\cdot k)k+cos\Theta (v-(v\cdot k)k)+sin\Theta k \times v

化简

v_{rot}=cos \Theta v+(1-cos \Theta)(v\cdot k)k+sin\Theta k \times v


上述是第一种公式,还有第二种公式,不过换汤不换药,只是将v_{\perp }用叉乘来表示,即v_{\perp}=-k \times(k \times v),感兴趣的朋友可以自行推导一番,结果为v+(1-cos \Theta)k \times (k \times v)+sin \Theta k \times v

你可能感兴趣的:(计算机图形学)