在计算机图形学里,我们时常有这种需求,求一个向量绕任意轴旋转 θ 后的向量是多少。我们可以使用罗德里格公式解得。
罗德里格公式:
vrot=cosθv+(1−cosθ)(v⋅k)k+sinθk×v
其中,θ 为旋转角度,v为待旋转向量,k为旋转轴(单位向量),vrot为旋转后的向量。
![]()
推导:
先看图,v为待旋转向量,k为旋转轴,v∥ 为与k平行的v分量,v⊥为与k垂直的v分量,v∥、v⊥、v、k在同一平面上(由v和k确定的平面),w是该平面的法向量。vrot是旋转后的向量。
由以上可知,
{v=v⊥+v∥v∥=(v⋅k)k⇒v⊥=v−v∥=v−(v⋅k)kw=k×vvrot⊥=cosθv⊥+sinθw
敲黑板(划重点):vrot⊥是vrot在v⊥与w构成的平面上的分量,cosθv⊥是vrot⊥在v⊥上的分量(为叙述方便记为 a),sinθw是vrot⊥在w上的分量(记为 b),a 很好理解,b 可以这样看:vrot⊥的模等于v⊥的模等于w的模,相信有些人疑问为什么等于w的模?
因为
k×v⊥=w∣k∣⋅∣v⊥∣⋅sin2π=∣w∣∣v⊥∣=∣w∣
所以
∣b∣=sinθ∣vrot⊥∣∣b∣=sinθ∣w∣
而
b=∣b∣⋅∣w∣w
即
b=sinθ∣w∣⋅∣w∣w=sinθw
综上所述,我们可知
vrot=v∥+vrot⊥⇓vrot=(v⋅k)k+cosθv⊥+sinθw⇓vrot=(v⋅k)k+cosθ(v−(v⋅k)k)+sinθk×v
化简
vrot=cosθv+(1−cosθ)(v⋅k)k+sinθk×v
上述是第一种公式,还有第二种公式,不过换汤不换药,只是将v⊥用叉乘来表示,即v⊥=−k×(k×v),感兴趣的朋友可以自行推导一番,结果为
v+(1−cosθ)k×(k×v)+sinθk×v