banner
IWSR

IWSR

美少女爱好者,我永远喜欢芳泽瑾。另外 P5 天下第一!

罗德里格旋转公式(轴角法)

前言#

阅读本文需要一些前置知识,需理解向量点积与叉积的基本知识。以下给出大致定义(因为矩阵在这里用不到,就不写矩阵形式了)以帮助理解

  • 向量点积
    • vj=vjcosθ\vec {v} \cdot \vec {j} = ||\vec {v}|| ||\vec {j}|| \cos \theta
    • 几何解释为 向量 v 在 向量 j 上投影的模长乘以向量 j 的模长
  • 向量叉积
    • v×j=vjsinθ\vec {v} \times \vec {j} = ||\vec {v}|| ||\vec {j}|| \sin \theta
    • 叉积只有在三维下才有几何意义,其解释为同时与向量 v 与向量 j 垂直的向量,且该向量模长为向量 v 与向量 j 构成的平行四边形的面积

另外需要注意的是,本文基于右手系分析,旋转方向正负可由右手定则判断。

右手系 右手定则

罗德里格旋转公式#

已知旋转轴 f\vec{f} ,此时有向量 v\vec{v} 绕旋转轴旋转 θ\theta 角,求旋转后的 v\vec {v^{\prime}}。如下图

IMG_ECC68942A572-1

因为旋转轴的长度并不影响旋转,为了方便求解,定义 f=1||\vec {f}|| = 1。此时分解 v\vec {v} 至平面( v\vec {v_\parallel} )与旋转轴( v\vec {v_\perp} )上。如下图

IMG_D190DB86E9D2-1

由于 v\vec{v_\parallel} 可视为 v\vec{v}f\vec{f} 上的投影,显然可以使用点积来表示

v=vffff\vec {v_\parallel} = \frac{\vec {v} \cdot \vec {f}}{||\vec {f}||} \frac {\vec {f}}{||\vec {f}||}

这里解释一下为什么这么写,上面对于点积的介绍已经很明确了即点积的结果表示为向量 v 在 向量 f 上投影的模长乘以向量 f 的模长,也就说我们如果需要单独获得 v|| \vec {v_\parallel} || 时需要将结果除以 f||\vec {f}|| ,而此时我们得到的是一个值而非向量,且 vf\vec {v_\parallel} \parallel \vec {f} 也就是两者同向,于是我们可通过将值乘以 f\vec {f} 的方向即可得到 v\vec {v_\parallel}。而又因为 f||\vec {f}|| 为 1,则可化简为

v=(vf)f\vec {v_\parallel} = (\vec {v} \cdot \vec {f})\vec {f}

此时也可以得到 v\vec {v_\perp}

v=vv=v(vf)f\vec {v_\perp} = \vec {v} - \vec {v_\parallel} = \vec {v} - (\vec {v} \cdot \vec {f})\vec {f}

目前已经得到的结果

{v=(vf)fv=v(vf)f\begin{cases} \vec {v_\parallel} = (\vec {v} \cdot \vec {f})\vec {f} \\ \vec {v_\perp} = \vec {v} - (\vec {v} \cdot \vec {f})\vec {f} \end{cases}

现在我们对 v\vec {v^{\prime}} 进行分解,可发现 v=v\vec {v_\parallel} = \vec {v^{\prime}_\parallel} ,唯一的不同在平面上的分解。

IMG_8ADF34270E8C-1

此时我们引入辅助向量 w\vec {w} 该向量垂直于 v\vec {v_\perp}

{wfwvf=1w=v\because \begin{cases} \vec {w} \perp \vec {f} \\ \vec {w} \perp \vec {v_\perp} \\ || \vec {f} || = 1 \\ || \vec {w} || = || \vec {v_\perp} || \\ \end{cases}
w=f×v\therefore \vec {w} = \vec {f} \times \vec {v_\perp}

因为我们最终的目标是通过 v\vec {v^{\prime}_\perp} 求解 v\vec {v^{\prime}} ,那么接下来需要分解 v\vec {v^{\prime}_\perp}v1\vec {v_1}v2\vec {v_2} ,通过已知的 w\vec {w}v\vec {v_\perp} 来表达(求解思路和上面的 v 平行是一样的)

v1=vwwww=vwcos(90°θ)www=wsinθ\vec {v_1} = \frac {\vec {v^{\prime}_\perp} \cdot \vec {w}}{||\vec {w}||} \frac {\vec {w}}{||\vec {w}||} = \frac {||\vec {v^{\prime}_\perp}|| || \vec {w} || \cos(90° - \theta)}{|| \vec {w} ||} \frac {\vec {w}}{||\vec {w}||} = \vec {w} \sin\theta

v2=vvvvv=vvcos(θ)vvv=vcosθ\vec {v_2} = \frac {\vec {v^{\prime}_\perp} \cdot \vec {v_\perp}}{||\vec {v_\perp}||} \frac {\vec {v_\perp}}{||\vec {v_\perp}||} = \frac {||\vec {v^{\prime}_\perp}|| || \vec {v_\perp} || \cos(\theta)}{|| \vec {v_\perp} ||} \frac {\vec {v_\perp}}{||\vec {v_\perp}||} = \vec {v_\perp} \cos\theta

v=v1+v2=wsinθ+vcosθ\vec {v^{\prime}_\perp} = \vec {v_1} + \vec {v_2} = \vec {w} \sin\theta + \vec {v_\perp} \cos\theta

w=f×v\because \vec {w} = \vec {f} \times \vec {v_\perp}

v=vcosθ+(f×v)sinθ\therefore \vec {v^{\prime}_\perp} = \vec {v_\perp} \cos\theta + (\vec {f} \times \vec {v_\perp}) \sin \theta

v=v+v=vcosθ+(f×(vv))sinθ+v\vec {v^{\prime}} = \vec {v^{\prime}_\perp} + \vec {v^{\prime}_\parallel} = \vec {v_\perp} \cos\theta + (\vec {f} \times (\vec {v} - \vec {v_\parallel})) \sin \theta + \vec {v_\parallel}

fvf×v=0\because \vec {f} \parallel \vec {v_\parallel} \therefore \vec {f} \times \vec {v_\parallel} = 0

v=v+cosθv+(f×v)sinθ\vec {v^{\prime}} = \vec {v_\parallel} + \cos \theta \vec {v_\perp} + (\vec {f} \times \vec {v}) \sin \theta

{v=(vf)fv=v(vf)f\because \begin{cases} \vec {v_\parallel} = (\vec {v} \cdot \vec {f})\vec {f} \\ \vec {v_\perp} = \vec {v} - (\vec {v} \cdot \vec {f})\vec {f} \end{cases}

v=(1cosθ)(fv)f+cosθv+sinθ(f×v) \therefore \vec {v^{\prime}} = (1 - \cos \theta)(\vec {f} \cdot \vec {v}) \vec {f} + \cos \theta \vec {v} + \sin \theta (\vec {f} \times \vec {v})

求证结束,此时我们得到了轴角式的旋转公式。

参考资料#

《动手学机器人学》(5)(一般形式旋转矩阵公式)或(罗德里格旋转公式)或(轴角法)证明 and 齐次坐标变换

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.