美文网首页
罗德里格旋转公式

罗德里格旋转公式

作者: 光能蜗牛 | 来源:发表于2022-06-14 12:21 被阅读0次

一般我们要将四元数表示为旋转矩阵的时候,用的就是这个方法
这里简单描述一下
本文参考链接

微信截图_20220516115842.png
重新详细推一遍加深印象
其中向量v是原始向量,向量v_{rot}是旋转后的向量,旋转轴是k,k为单位向量,旋转 角度为\theta,问题是如何求解旋转矩阵R

如上图所示.首先对V做正交分解,
v=v_{||}+v_{\perp}
有根据点积的投影原理
v_{||}=(v\cdot k)k
通过做减法
v_{\perp}=v-v_{||}=v-(v\cdot k)k
通过外积找到垂直于vk所在平面的法向量w
于是
w=k\times v_{\perp}=k\times (v-v_{||})=k\times v----(注:因为kv_{||}平行,外积为0)
这里我们检验一下w的向量长度w=k\times v_{\perp}
它的具体数值=|k|\cdot | v_{\perp}|\cdot sin(\pi/2)= |k|\cdot | v_{\perp}|
又因为k为单位向量,所以|w|= | v_{\perp}|

接下来要找的是v_{\perp}旋转\theta之后的v_{rot\perp }
v_{rot\perp }我们不知道如何表示,但是我们对v_{rot\perp }分别作向量 w和向量 v_{\perp} 的垂线 ,如下图,
1.首先旋转不改变v_{\perp}的长度,所以向量|v_{rot\perp }| =|v_{\perp }|
2.根据对称性原则,v_{rot\perp }v_{\perp }上的投影长度等价于v_{\perp }v_{rot\perp }上的投影长度
v_{rot\perp }w上的投影长度等价于wv_{rot\perp }上的投影长度
换言之,v_{rot\perp }可以由向量wv_{\perp }进行线性组合表示
我们直接写结论了
v_{rot\perp } =cos(\theta)v_{\perp }+sin(\theta)w=cos(\theta)(v-(v\cdot k)k)+sin(\theta)(k\times v)

image.png
于是最终的
v_{rot}=v_{rot\perp }+v_{||}
=cos\theta(v-(v\cdot k)k)+sin\theta(k\times v)+(v\cdot k)k
=cos\theta\cdot v+(1-cos\theta)(v\cdot k)k+sin\theta (k\times v)

图形学里面,一般我们会把上面的一长串用一个矩阵表示
v_{rot}=Rv
假设转轴k=\begin{bmatrix}k_x\\k_y\\k_z\end{bmatrix} 旋转向量v=\begin{bmatrix}v_x\\v_y\\v_z\end{bmatrix}

要将上面的等式写成矩阵,有两个部分需要注意分解(v\cdot k)k(k\times v)
其中(v\cdot k)k=(k_xv_x+k_yv_y+k_zv_z)\begin{bmatrix}k_x\\k_y\\k_z\end{bmatrix}
=\begin{bmatrix}(k_xv_x+k_yv_y+k_zv_z)k_x\\(k_xv_x+k_yv_y+k_zv_z)k_y\\(k_xv_x+k_yv_y+k_zv_z)k_z\end{bmatrix}
=\begin{bmatrix}k_xk_x&k_xk_y&k_xk_z\\k_yk_x&k_yk_y&k_yk_z\\k_zk_x&k_zk_y&k_zk_z\end{bmatrix}\begin{bmatrix}v_x\\v_y\\v_z\end{bmatrix}
=\begin{bmatrix}k_x\\k_y\\k_z\end{bmatrix}\begin{bmatrix}k_x&k_y&k_z\end{bmatrix}\begin{bmatrix}v_x\\v_y\\v_z\end{bmatrix}
=\begin{bmatrix}k_x\\k_y\\k_z\end{bmatrix}\begin{bmatrix}k_x&k_y&k_z\end{bmatrix}\cdot v

(k\times v)可以将k\times写成反对称矩阵的形式
(k\times v)=\begin{bmatrix}0&-k_z&k_y\\k_z&0&-k_x\\-k_y&k_x&0\end{bmatrix}\begin{bmatrix}v_x\\v_y\\v_z\end{bmatrix}=\begin{bmatrix}0&-k_z&k_y\\k_z&0&-k_x\\-k_y&k_x&0\end{bmatrix}\cdot v

于是上面的等式
v_{rot}=v_{rot\perp }+v_{||}
=cos\theta(v-(v\cdot k)k)+sin\theta(k\times v)+(v\cdot k)k
=cos\theta\cdot v+(1-cos\theta)(v\cdot k)k+sin\theta (k\times v)
=cos\theta\cdot I \cdot v+(1-cos\theta)\cdot \begin{bmatrix}k_x\\k_y\\k_z\end{bmatrix}\begin{bmatrix}k_x&k_y&k_z\end{bmatrix}\cdot v+sin\theta \cdot \begin{bmatrix}0&-k_z&k_y\\k_z&0&-k_x\\-k_y&k_x&0\end{bmatrix}\cdot v
=\Big(cos\theta\cdot I+(1-cos\theta)\cdot \begin{bmatrix}k_x\\k_y\\k_z\end{bmatrix}\begin{bmatrix}k_x&k_y&k_z\end{bmatrix}+sin\theta \cdot \begin{bmatrix}0&-k_z&k_y\\k_z&0&-k_x\\-k_y&k_x&0\end{bmatrix}\Big)\cdot v

所以矩阵R=cos\theta\cdot I+(1-cos\theta)\cdot \begin{bmatrix}k_x\\k_y\\k_z\end{bmatrix}\begin{bmatrix}k_x&k_y&k_z\end{bmatrix}+sin\theta \cdot \begin{bmatrix}0&-k_z&k_y\\k_z&0&-k_x\\-k_y&k_x&0\end{bmatrix}
=cos\theta\cdot I+(1-cos\theta)\cdot kk^T+sin\theta \cdot k\times

相关文章

  • 罗德里格旋转公式

    一般我们要将四元数表示为旋转矩阵的时候,用的就是这个方法这里简单描述一下本文参考链接[https://www.pi...

  • (六)旋转体的体积公式

    绕X轴旋转的旋转体体积公式 绕y轴旋转的旋转体的体积公式

  • 证明罗德里格斯公式和四元数旋转等效

    证明旋转矩阵是正交矩阵。 答:首选明白旋转矩阵如何定义。旋转矩阵是描述同一个点在不同基坐标系下的坐标变换,两个坐标...

  • 推导坐标旋转公式(转)

    最终公式 该公式仅仅针对旋转中心在坐标原点的情况。 推导过程 从数学上来说,此公式可以用来计算某个点绕另外一点旋转...

  • excel中统计非空单元格时如何排除掉含有公式的单元格

    在统计非空单元格时使用COUNTA函数会将有公式的单元格也算在内排除含有公式的单元格可使用下列公式1.使用数组公式...

  • 第六课 函数与公式

    一、在单元格中输入公式 1、用VBA在单元格中输入普通公式 2.使用循环输入公式 3.用VBA在单元格输入带引号的...

  • 输入与编辑公式

    输入公式首先选中需要输入公式的单元格,然后输入“=”,接着依次输入(单击)需要参加计算的单元格,单元格与单元格之间...

  • Org-mode的电子表格的简明教程

    序言 熟悉引用 第一个公式 列公式和单元格公式 交互的编辑公式 Calc和Elisp公式 调试公式 很多, 还有更...

  • Excel使用技巧积累

    1. 单元格内容拼接: 公式中使用 & 来拼接2个单元格,例如,我使用下边公式完成了几个单元格的拼接:

  • 41/100  M.M

    旋转面的面积,三个公式,记记总是好的

网友评论

      本文标题:罗德里格旋转公式

      本文链接:https://www.haomeiwen.com/subject/iuaiurtx.html