四元素与旋转矩阵

2023-11-18

如何描述三维空间中刚体的旋转,是个有趣的问题。具体地说,就是刚体上的任意一个点P(x, y, z)围绕过原点的轴(i, j, k)旋转θ,求旋转后的点P\'(x\', y\', z\')。

旋转矩阵

旋转矩阵乘以点P的齐次坐标,得到旋转后的点P',因此旋转矩阵可以描述旋转,

⎡⎣⎢⎢⎢⎢xyz1⎤⎦⎥⎥⎥⎥=R⎡⎣⎢⎢⎢⎢xyz1⎤⎦⎥⎥⎥⎥

绕x,y,或z轴旋转θ的矩阵为:

Rx(θ)=⎡⎣⎢⎢1000cosθsinθ0sinθcosθ⎤⎦⎥⎥

Ry(θ)=⎡⎣⎢⎢cosθ0sinθ010sinθ0cosθ⎤⎦⎥⎥

Rz(θ)=⎡⎣⎢⎢cosθsinθ0sinθcosθ0001⎤⎦⎥⎥

所以,绕任意轴旋转的矩阵为

Rx(p)Ry(q)Rz(θ)Ry(q)Rx(p)

这表示:

1. 绕x轴旋转角度p使指定的旋转轴在xz平面上
2. 绕y轴旋转角度q使指定的旋转轴与z轴重合
3. 绕z轴旋转角度θ
4. 绕y轴旋转角度-q
5. 绕x轴旋转角度-p

其中,p和q的值需要用i,j,k计算出来。

欧拉角

欧拉角也可以描述三维刚体旋转,它将刚体绕过原点的轴(i,j,k)旋转θ,分解成三步(蓝色是起始坐标系,而红色的是旋转之后的坐标系。)。

 

1. 绕z轴旋转α,使x轴与N轴重合,N轴是旋转前后两个坐标系x-y平面的交线
2. 绕x轴(也就是N轴)旋转β,使z轴与旋转后的z轴重合
3. 绕z轴旋转γ,使坐标系与旋转后的完全重合

按照旋转轴的顺序,该组欧拉角被称为是“zxz顺规”的。对于顺规的次序,学术界没有明确的约定。

欧拉角的旋转矩阵为:

Rz(α)Rx(β)Rz(γ)

在旋转矩阵一节中,最先进行的旋转其矩阵在最右侧,说明该矩阵最先与点的齐次坐标相乘,旋转矩阵按照旋转的次序从右向左排列。而在欧拉角中,最先进行的旋转其旋转矩阵在最左边。这是因为,**对于前者(旋转矩阵),我们始终是以绝对参考系为参照来的,对于后者(欧拉角),我们每一次旋转的刻画都是基于刚体的坐标系。**比如,在欧拉角中的第2步,绕x轴旋转β,这里的x轴实际上是N轴了(而不是蓝色的x轴)。

为什么旋转参考系的不同会导致旋转矩阵次序的差异呢?细想一下便知,旋转矩阵左乘叠加用以描述三维变换效果的叠加,这本身就是基于绝对坐标系的,所以旋转矩阵一节没有疑问;而对于欧拉角一节的这种旋转方式,这样考虑:

1. 如果有一个“影子坐标系3”与原坐标系重合,然后首先进行了第3步(绕z轴旋转γ);
2. 然后有一个“影子坐标系2”也与原坐标系重合,然后与“影子坐标系3”一起(视作同一个刚体)进行了第二步;
3. 最后一个“影子坐标系1”,与前两个坐标系一起进行了第一步。

此时,考察“影子坐标系”1和2,他们就分别落在了欧拉角旋转的两个“快照”上,而“影子坐标系3”就落在旋转后的位置上(红色的)。而在上述过程中,“影子坐标系3”就是相对于绝对坐标系依次进行了第三步,第二步,和第一步。所以欧拉角的旋转矩阵写成那样,也是行得通的。

这个想法,我猜在很多第一人称游戏中,已经得到了广泛应用了。这样,玩家对人物的控制就可以绕开人物的实时状态(位置,角度等)直接对人物的模型矩阵产生影响。

万向节死锁是欧拉角的一个弊端,这是一个直观的例子

四元数

四元数是今天的主角,它能够很方便的刻画刚体绕任意轴的旋转。四元数是一种高阶复数,四元数q表示为:

q=(x,y,z,w)=xi+yj+zk+w

其中,i,j,k满足:

i2=j2=k2=1

ij=k,jk=i,ki=j

由于i,j,k的性质和笛卡尔坐标系三个轴叉乘的性质很像,所以可以将四元数写成一个向量和一个实数组合的形式:

q=(v⃗ +w)=((x,y,z),w)

可以推导出四元数的一些运算性质,包括:

* 四元数乘法

q1q2=(v1×v2+w1v2+w2v1,w1w2v1v2)

* 共轭四元数

q=(v⃗ ,w)

* 四元数的平方模

N(q)=N(v⃗ )+w2

* 四元数的逆

q1=qN(q)

四元数可以看做是向量和实数的一种更加一般的形式,向量可以视作为实部为0的四元数,而实数可以是作为虚部为0的四元数。上述四元数的运算性质也是实数或向量的运算性质的更一般的形式。

四元数可用来刻画三维空间中的旋转,绕单位向量(x,y,z)表示的轴旋转θ,可令:

q=((x,y,z)sinθ2,cosθ2)

刚体坐标系中的点p(P,0)(写成四元数的形式),旋转后的坐标p'为:

p=qpq1

接下来我们来证明这一点。

首先,我们证明

qpq1=(sq)p(sq)1

其中s为实数。显然

(sq)p(sq)1=sqpq1s1=sqp1

此时,我们可以将q看做是单位矩阵,因为如果q不是单位矩阵,我们就可以乘以一个常数s将其化为单位矩阵。

然后,我们证明qpq^{-1}和p的模长相等

下面将q视为单位四元数:

q1=q

四元数q的标量:

S(q)=(q+q)/2

那么:

2S(qpq1)=2S(qpq)=qpq+(qpq)=qpq+qpq=q(p+p)q=q2S(p)q=2S(p)

最后,我们证明

p=qpq

如图所示,u为旋转轴,旋转角度为σ,向量v旋转到w处。旋转到σ/2处为k(图中未标出)。

下面也用相同的字母指代四元数,如u就表示向量u的四元数形式((ux,uy,uz),0)。

首先,令u方向上的单位向量为u(为了方便,命名不变,后面的u都是指旋转轴方向的单位四元数),那么根据q的定义,参见四元数乘法法则:

q=(u⃗ sinθ2,cosθ2)=(v⃗ ×k⃗ ,v⃗ k⃗ )=(v⃗ ,0)(k⃗ ,0)=kv

现在令

w=qvq

如果能证明w与v的夹角是σ,那么就说明w确实是v旋转σ得到的,整个命题就得证了。

注意v,k和w都是实部为0的单位四元数,表示单位向量,我们有:

wk=(qvq1)k=qvqk=qvvkk=q

所以

wk=kv

上面的式子拆分成实部和虚部,虚部表明w与-k的平面和k与-v的平面重合,实部表明w和-k之间的夹角与k和-v之间的夹角相等,都是π-σ/2。这就说明了w与v的夹角是σ,原命题就得证了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

四元素与旋转矩阵 的相关文章

随机推荐

  • ASP.NET三层架构详解

    实例截图 文件 590m com f 25127180 489402295 978e99 访问密码 551685 以下内容无关 分割线 在vue3里面 我们可以通过 reactive 来实现引用类型的响应性 那么基础类型的响应性如何来实现呢
  • C语言 在数组中找到和值为目标值的两个元素

    输入你的目标值target 就能找到相加为target的两个数了 自己输入一个数组 并且设定一个目标值 target 就能在数组中找到两个相加等于target的元素了 include
  • 基于linux的调试技术

    虽然使用printk函数可以很方便的将消息写入日志文件或者控制台 但是大量使用printk函数频繁的操作日志文件或者控制台文件会严重影响到linux驱动的开发性能 因此 这就需要linux驱动在开发阶段使用printk函数输出消息 在正式发
  • 解决“Pick up system reserved threshold 500ms because of config missing”

    skywalking启动日志一直刷 Pick up system reserved threshold 500ms because of config missing 如下图 原因缺少动态的配置项 skywalking支持动态配置的配置项如
  • 【总结】为什么对累积奖励减去baseline项能起到减小方差的作用?

    深度强化学习实验室 论坛 http deeprlhub com 来源 https zhuanlan zhihu com p 98506549 作者 风清云 很多论文的工作都专注于减少policy gradient的方差 以得到更加优质且稳定
  • TT100K数据集

    http cg cs tsinghua edu cn traffic sign data model code data zip
  • 字符转ASCLL码输出

    今天做EDA课程设计时 同学的串口通信程序涉及到字符和ASCLL码的转化 我看着他一个字符的对着ASCLL表 然后再敲进程序 真心急 想想都大三了 C语言都大一学的了 而现在经常遇到的问题 很多大学生都直接用非常笨的方法去弄 却不知道使用自
  • USB转串口那些事儿—USB转串口工作原理及应用

    一 简介 USB转串口即实现计算机USB接口到物理串口之间的转换 可以为没有串口的计算机或其他USB主机增加串口 使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备 USB虚拟串口应用特点 USB应用广泛 支持热插拔 传输速
  • Postman接口测试——我看过最详细+全面的文章教程了【转载】

    Postman简介 一般简单的接口测试我们可以直接在浏览器里面进行调试 但是涉及到一些权限设置的就无法操作了 因此我们需要接口测试的相关工具 Postman 是一个接口测试和 http 请求的工具 官网地址 https www getpos
  • Mac电脑花屏

    原因 GPU 加速导致 和电脑的独显有关 解决办法 打开谷歌浏览器 点击上图的三个点 选择设置 在高级设置中选择系统 关掉硬件加速模式
  • 十大优秀编程项目,让你的简历金光闪闪

    全文共3241字 预计学习时长6分钟 被问到如何学习编程时 最常听到的问题就是 有没有什么新项目的好点子 一些老套的答案有 做一个象棋游戏 或者 命令行界面 这些答案没有错 但这些例子不符合现代编程的需要 现代软件编写需要经常使用软件服务化
  • 【华为OD机试真题2023B卷 JAVA&JS】阿里巴巴找黄金宝箱(V)

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 阿里巴巴找黄金宝箱 V 知识点数组哈希表滑窗 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上 无意中发现了强盗集团的藏宝地 藏宝地
  • 尤克里里整理

    尤克里里 如何按弦 如何弹奏 带数字的四线谱 如何按弦 如何弹奏 带数字的四线谱 数字代表品格数 1就是1品 2就是2品 数字标记在几弦上面 就按住几弦的几品
  • 计算机毕设项目 大数据个性化音乐推荐算法分析

    文章目录 0 前言 1 研究目的 2 研究方法 2 1 传统推荐算法 2 2 基于LightGBM决策树模型的推荐算法 3 研究结论 0 前言 基于大数据个性化音乐推荐算法分析 提示 适合用于课程设计或毕业设计 工作量达标 源码开放 项目分
  • 告别卡顿,教你正确清理手机APP缓存垃圾,释放空间

    智能手机已经成为我们生活中不可或缺的重要工具 让我们随时随地保持联系 获取信息和娱乐 但是 使用过多的应用程序可能会导致手机变得缓慢并占用存储空间 这些应用程序产生大量的缓存和垃圾文件 如果不及时清理 将会影响手机的性能和速度 今天 我们将
  • 集团如何实现数字化转型?永洪BI助力由由集团

    随着 互联网 的边界不断拓宽 生活性服务业正驶入数字化转型快车道 中国信息通信研究院发布的 中国数字经济发展报告 2022 显示 2021年 我国数字经济发展取得新突破 数字经济规模达到45 5万亿元 占 GDP 比重达到39 8 三大产业
  • Chrome中安装扩展的三种方式

    chrome浏览器安装扩展有多种方式 请看以下介绍 1 从chrome网上应用商店安装 优雅法 在google chrome中打开chrome网上应用商店 https chrome google com webstore 搜索需要的扩展 在
  • 详解list.toArray(new String[0])

    List
  • 使用树莓派(raspberry pi)搭建网站(nginx+php+mysql+ddclient)

    标签 树莓派 raspberrypi php 网站 mysql 分类 Linux技术 最近在研究学习PHP 有时候想随时就学习 所以就决定搭建一个网站 随时可以进行学习 因为要24小时在线 要低功耗和安静 所以选择了树莓派 我们开始吧 ng
  • 四元素与旋转矩阵

    如何描述三维空间中刚体的旋转 是个有趣的问题 具体地说 就是刚体上的任意一个点P x y z 围绕过原点的轴 i j k 旋转 求旋转后的点P x y z 旋转矩阵 旋转矩阵乘以点P的齐次坐标 得到旋转后的点P 因此旋转矩阵可以描述旋转 x