阅读本文需要一些前置知识,需理解向量点积与叉积的基本知识。以下给出大致定义(因为矩阵在这里用不到,就不写矩阵形式了)以帮助理解
- 向量点积
- v⋅j=∣∣v∣∣∣∣j∣∣cosθ
- 几何解释为 向量 v 在 向量 j 上投影的模长乘以向量 j 的模长
- 向量叉积
- v×j=∣∣v∣∣∣∣j∣∣sinθ
- 叉积只有在三维下才有几何意义,其解释为同时与向量 v 与向量 j 垂直的向量,且该向量模长为向量 v 与向量 j 构成的平行四边形的面积
另外需要注意的是,本文基于右手系分析,旋转方向正负可由右手定则判断。
罗德里格旋转公式#
已知旋转轴 f ,此时有向量 v 绕旋转轴旋转 θ 角,求旋转后的 v′。如下图
因为旋转轴的长度并不影响旋转,为了方便求解,定义 ∣∣f∣∣=1。此时分解 v 至平面( v∥ )与旋转轴( v⊥ )上。如下图
由于 v∥ 可视为 v 在 f 上的投影,显然可以使用点积来表示
即 v∥=∣∣f∣∣v⋅f∣∣f∣∣f
这里解释一下为什么这么写,上面对于点积的介绍已经很明确了即点积的结果表示为向量 v 在 向量 f 上投影的模长乘以向量 f 的模长,也就说我们如果需要单独获得 ∣∣v∥∣∣ 时需要将结果除以 ∣∣f∣∣ ,而此时我们得到的是一个值而非向量,且 v∥∥f 也就是两者同向,于是我们可通过将值乘以 f 的方向即可得到 v∥。而又因为 ∣∣f∣∣ 为 1,则可化简为
v∥=(v⋅f)f
此时也可以得到 v⊥
v⊥=v−v∥=v−(v⋅f)f
目前已经得到的结果
{v∥=(v⋅f)fv⊥=v−(v⋅f)f
现在我们对 v′ 进行分解,可发现 v∥=v∥′ ,唯一的不同在平面上的分解。
此时我们引入辅助向量 w 该向量垂直于 v⊥
∵⎩⎨⎧w⊥fw⊥v⊥∣∣f∣∣=1∣∣w∣∣=∣∣v⊥∣∣
∴w=f×v⊥
因为我们最终的目标是通过 v⊥′ 求解 v′ ,那么接下来需要分解 v⊥′ 为 v1 与 v2 ,通过已知的 w 与 v⊥ 来表达(求解思路和上面的 v 平行是一样的)
v1=∣∣w∣∣v⊥′⋅w∣∣w∣∣w=∣∣w∣∣∣∣v⊥′∣∣∣∣w∣∣cos(90°−θ)∣∣w∣∣w=wsinθ
v2=∣∣v⊥∣∣v⊥′⋅v⊥∣∣v⊥∣∣v⊥=∣∣v⊥∣∣∣∣v⊥′∣∣∣∣v⊥∣∣cos(θ)∣∣v⊥∣∣v⊥=v⊥cosθ
v⊥′=v1+v2=wsinθ+v⊥cosθ
∵w=f×v⊥
∴v⊥′=v⊥cosθ+(f×v⊥)sinθ
v′=v⊥′+v∥′=v⊥cosθ+(f×(v−v∥))sinθ+v∥
∵f∥v∥∴f×v∥=0
v′=v∥+cosθv⊥+(f×v)sinθ
∵{v∥=(v⋅f)fv⊥=v−(v⋅f)f
∴v′=(1−cosθ)(f⋅v)f+cosθv+sinθ(f×v)
求证结束,此时我们得到了轴角式的旋转公式。
参考资料#
《动手学机器人学》(5)(一般形式旋转矩阵公式)或(罗德里格旋转公式)或(轴角法)证明 and 齐次坐标变换