We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
阅读本文需要一些前置知识,需理解向量点积与叉积的基本知识。以下给出大致定义(因为矩阵在这里用不到,就不写矩阵形式了)以帮助理解
另外需要注意的是,本文基于右手系分析,旋转方向正负可由右手定则判断。
已知旋转轴 $\vec{f}$ ,此时有向量 $\vec{v}$ 绕旋转轴旋转 $\theta$ 角,求旋转后的 $\vec {v^{\prime}}$。如下图
因为旋转轴的长度并不影响旋转,为了方便求解,定义 $||\vec {f}|| = 1$。此时分解 $\vec {v}$ 至平面( $\vec {v_\parallel}$ )与旋转轴( $\vec {v_\perp}$ )上。如下图
由于 $\vec{v_\parallel}$ 可视为 $\vec{v}$ 在 $\vec{f}$ 上的投影,显然可以使用点积来表示
即 $\vec {v_\parallel} = \frac{\vec {v} \cdot \vec {f}}{||\vec {f}||} \frac {\vec {f}}{||\vec {f}||}$
这里解释一下为什么这么写,上面对于点积的介绍已经很明确了即点积的结果表示为向量 v 在 向量 f 上投影的模长乘以向量 f 的模长,也就说我们如果需要单独获得 $|| \vec {v_\parallel} ||$ 时需要将结果除以 $||\vec {f}||$ ,而此时我们得到的是一个值而非向量,且 $\vec {v_\parallel} \parallel \vec {f}$ 也就是两者同向,于是我们可通过将值乘以 $\vec {f}$ 的方向即可得到 $\vec {v_\parallel}$。而又因为 $||\vec {f}||$ 为 1,则可化简为
$$ \vec {v_\parallel} = (\vec {v} \cdot \vec {f})\vec {f} $$
此时也可以得到 $\vec {v_\perp}$
$$ \vec {v_\perp} = \vec {v} - \vec {v_\parallel} = \vec {v} - (\vec {v} \cdot \vec {f})\vec {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} $$
现在我们对 $\vec {v^{\prime}}$ 进行分解,可发现 $\vec {v_\parallel} = \vec {v^{\prime}_\parallel}$ ,唯一的不同在平面上的分解。
此时我们引入辅助向量 $\vec {w}$ 该向量垂直于 $\vec {v_\perp}$
$$ \because \begin{cases} \vec {w} \perp \vec {f} \\ \vec {w} \perp \vec {v_\perp} \\ || \vec {f} || = 1 \\ || \vec {w} || = || \vec {v_\perp} || \\ \end{cases} $$
$$ \therefore \vec {w} = \vec {f} \times \vec {v_\perp} $$
因为我们最终的目标是通过 $\vec {v一撇垂直}$ 求解 $\vec {v^{\prime}}$ ,那么接下来需要分解 $\vec {v一撇垂直}$ 为 $\vec {v_1}$ 与 $\vec {v_2}$ ,通过已知的 $\vec {w}$ 与 $\vec {v_\perp}$ 来表达(求解思路和上面的 v 平行是一样的)
$$ \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 $$
$$ \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 $$
$$ \vec {v^{\prime}\perp} = \vec {v_1} + \vec {v_2} = \vec {w} \sin\theta + \vec {v\perp} \cos\theta $$
$$ \because \vec {w} = \vec {f} \times \vec {v_\perp} $$
$$ \therefore \vec {v^{\prime}\perp} = \vec {v\perp} \cos\theta + (\vec {f} \times \vec {v_\perp}) \sin \theta $$
$$ \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} $$
$$ \because \vec {f} \parallel \vec {v_\parallel} \therefore \vec {f} \times \vec {v_\parallel} = 0 $$
$$ \vec {v^{\prime}} = \vec {v_\parallel} + \cos \theta \vec {v_\perp} + (\vec {f} \times \vec {v}) \sin \theta $$
$$ \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} $$
$$ \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 齐次坐标变换
The text was updated successfully, but these errors were encountered:
说明一下出处呗
Sorry, something went wrong.
已添加链接
No branches or pull requests
罗德里格旋转公式(轴角法)
前言
阅读本文需要一些前置知识,需理解向量点积与叉积的基本知识。以下给出大致定义(因为矩阵在这里用不到,就不写矩阵形式了)以帮助理解
另外需要注意的是,本文基于右手系分析,旋转方向正负可由右手定则判断。
罗德里格旋转公式
已知旋转轴$\vec{f}$ ,此时有向量 $\vec{v}$ 绕旋转轴旋转 $\theta$ 角,求旋转后的 $\vec {v^{\prime}}$ 。如下图
因为旋转轴的长度并不影响旋转,为了方便求解,定义$||\vec {f}|| = 1$ 。此时分解 $\vec {v}$ 至平面( $\vec {v_\parallel}$ )与旋转轴( $\vec {v_\perp}$ )上。如下图
由于$\vec{v_\parallel}$ 可视为 $\vec{v}$ 在 $\vec{f}$ 上的投影,显然可以使用点积来表示
即$\vec {v_\parallel} = \frac{\vec {v} \cdot \vec {f}}{||\vec {f}||} \frac {\vec {f}}{||\vec {f}||}$
这里解释一下为什么这么写,上面对于点积的介绍已经很明确了即点积的结果表示为向量 v 在 向量 f 上投影的模长乘以向量 f 的模长,也就说我们如果需要单独获得$|| \vec {v_\parallel} ||$ 时需要将结果除以 $||\vec {f}||$ ,而此时我们得到的是一个值而非向量,且 $\vec {v_\parallel} \parallel \vec {f}$ 也就是两者同向,于是我们可通过将值乘以 $\vec {f}$ 的方向即可得到 $\vec {v_\parallel}$ 。而又因为 $||\vec {f}||$ 为 1,则可化简为
此时也可以得到$\vec {v_\perp}$
目前已经得到的结果
现在我们对$\vec {v^{\prime}}$ 进行分解,可发现 $\vec {v_\parallel} = \vec {v^{\prime}_\parallel}$ ,唯一的不同在平面上的分解。
此时我们引入辅助向量$\vec {w}$ 该向量垂直于 $\vec {v_\perp}$
因为我们最终的目标是通过$\vec {v一撇垂直}$ 求解 $\vec {v^{\prime}}$ ,那么接下来需要分解 $\vec {v一撇垂直}$ 为 $\vec {v_1}$ 与 $\vec {v_2}$ ,通过已知的 $\vec {w}$ 与 $\vec {v_\perp}$ 来表达(求解思路和上面的 v 平行是一样的)
$$ \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 $$
$$ \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 $$
$$ \vec {v^{\prime}\perp} = \vec {v_1} + \vec {v_2} = \vec {w} \sin\theta + \vec {v\perp} \cos\theta $$
$$ \therefore \vec {v^{\prime}\perp} = \vec {v\perp} \cos\theta + (\vec {f} \times \vec {v_\perp}) \sin \theta $$
$$ \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} $$
求证结束,此时我们得到了轴角式的旋转公式。
参考资料
《动手学机器人学》(5)(一般形式旋转矩阵公式)或(罗德里格旋转公式)或(轴角法)证明 and 齐次坐标变换
The text was updated successfully, but these errors were encountered: