专栏首页吹弹牛皮之unity程序设计吹弹牛皮之Unity 引擎基础 - 四元数(二)

吹弹牛皮之Unity 引擎基础 - 四元数(二)

上一篇的四元数内容,简单的介绍了四元数的一些基础运算,继续前篇的内容,继续扩充如下内容:

1).四元数-旋转矩阵的互相转换

2).四元数-欧拉角的互相转换

四元数到旋转矩阵的转换

在之前的矩阵学习中有一个简略介绍过的一个不实用的绕任意轴旋转的旋转矩阵,结合四元数在任意轴上的旋转公式。

最终经过推导变换成有:

惯性坐标系-物体坐标系旋转矩阵:

编码有:

根据旋转矩阵是正交矩阵,满足矩阵的逆=矩阵的转置。且惯性坐标系-物体坐标系与物体坐标系-惯性坐标系是一个矩阵互逆的过程。

旋转矩阵到四元数的转换

再来讨论上面的四元数转换到矩阵的公式:

因此可以轻松计算的四元数的w值。同样的将m11、m22、m33的符号根据x、y、z的情况变换下(取x值则保留m11为正,其余为负),也可以推导得四元数x、y、z的值。

但不能直接使用上面的公式计算所有的四元数w、x、y、z值,这是由于上面公式开平方的结果永远都是正值。

还是由四元数变换到矩阵的公式得来有:

如果先前已经计算得到4xx中的任何一个值,就可以反计算出另外一个值来。

在《图形图像编程精粹》书中讲解告知,开平方的方式和4xx求值的方式,不能依赖一种来计算结果。例如使用开平方的方式计算得x的值,就必须使用4xx的方式来计算剩余的w、y、z的值。

书中还提及一个技巧是,先用开平方的方式计算出w、x、y、z哪个值比较大,哪个值大就使用哪一个,然后再利用4xx的形式求得剩余值。

编码有:

欧拉角到四元数的转换

将四元数的旋转表达以欧拉角h,p,b的形式表现有:

将h-p-b角依次做乘法有:

编码有:

上面展示的公式是从物体坐标系-惯性坐标系的,如果从惯性坐标系-物体坐标系,实际就等同于四元数的共轭,就是将四元数的虚部i j k取反。

编码有:

四元数到欧拉角的转换

四元数的欧拉角的变换相对要复杂一些,结合之前的欧拉角-矩阵和矩阵-四元数的过程,两部分结合起来,共同来推导四元数-欧拉角的转换。

先从欧拉角-矩阵开始探讨,可以轻松的计算的p,h,b角。

p角的计算

h角的计算

b角的计算

之前矩阵变换到四元数的推导中有如下公式,将矩阵中的m31, m33, m12, m22利用下面的公式抵消化简。

最终化简得到:

将得到的m的值带入到之前矩阵表示b,h,p中。

最终得到:

涉及到欧拉角就一定要注意万向锁的判断处理:

编码有:

惯性坐标系-物体坐标系,属于四元数的共轭关系。

编码有:

本文分享自微信公众号 - 吹弹牛皮之unity程序设计(gh_4f97f8f53f59),作者:赵晋伟

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-08-15

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 吹弹牛皮之Unity 引擎基础 - 欧拉角

    结束了小菜整整介绍的四篇关于矩阵的内容,可以说是又臭又长啊。然而噩梦还在延续,本篇内容将还会持续和矩阵打交道。

    用户7698595
  • 吹弹牛皮之Unity 引擎基础 - 四元数(一)

    复数对(a,b)定义了数a + bi。其中a称为实部,b称为虚部,i称为虚数,满足i² = -1。对于任意实数都能表示为复数(k, v)= k + vi。

    用户7698595
  • 吹弹牛皮之Unity 引擎基础 - 矩阵(一)

    沉迷于硬笔的练习偷懒了很长时间。过去的7月份仅仅更新了一篇文章,实在是深表遗憾。接着之前的向量篇小菜继续向下探索。谢谢大家长久来的鼓励和支持。

    用户7698595
  • 四旋翼姿态解算之理论推导

    对于每个像我一样入坑四轴飞行器不久的新手来说,最初接触也颇为头疼的东西之一就是四轴的姿态解算。由于涉及较多的数学知识,很多人也是觉得十分头疼。所以,我在这里分享...

    努力努力再努力F
  • 坐标转换与姿态描述

    为了能够科学的反映物体的运动特性,会在特定的坐标系中进行描述,一般情况下,分析飞行器运动特性经常要用到以下几种坐标系统1、大地坐标系统;2、地心固定坐标系统;3...

    小飞侠xp
  • python django web项目的

    在 Django 中,当一个 URL 被请求时,所调用的 Python 方法称为一个视图(view),这个视图所加载并呈现的页面称为模板(template)。由...

    py3study
  • 由sqlplus中的一个小细节所做的折腾(r5笔记第11天)

    sqlplus是Oracle DBA每天都要用到烂的工具了。如果没有sqlplus还真不知道怎么和oracle对话了。转念一想,自己已经很久没使用过toad了。...

    jeanron100
  • 沪江:React Native三端融合应用实践

    摘要 ReactNative给前端提供了一套两端共用代码和快速实现热更新的框架,但在实际落地中,需要进行大量的保障工作和优化工作来让业务能够平稳上线,另一方面,...

    IT大咖说
  • React Native 截屏组件

    截取当前屏幕,跟系统自带的截图一致,只会截取当前屏幕显示的页面内容。如果是ScrollView,那么未显示的部分是不会被截取的。

    forrest23
  • 精品教学案例 | 金融交易反欺诈案例研究

    本案例适合作为大数据专业数据清洗或Pandas数据分析课程的配套教学案例。通过本案例,能够达到以下教学效果:

    数据酷客

扫码关注云+社区

领取腾讯云代金券