Unity 四元数与物体旋转

这篇具有很好参考价值的文章主要介绍了Unity 四元数与物体旋转。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

为什么要使用四元数

欧拉角是什么

由三个角度(x,y,z)组成
在特定坐标系下用于描述物体的旋转量
空间中的任意旋转都可以分解成绕三个互相垂直轴的三个旋转角组成的序列

欧拉角旋转约定——heading-pitch-bank
这是一种最常用的旋转序列约定——Y-X-Z约定
heading:物体绕自身的对象坐标系的Y轴旋转的角度
pitch:物体绕自身的对象坐标系的X轴旋转的角度
bank:物体绕自身的对象坐标系的Z轴,旋转的角度
unity四元数旋转,Unity引擎,c#,游戏程序,unity
欧拉角优缺点
优点:①直观、易理解 ②存储空间小(三个数表示)③可以进行从一个方向到另一个方向旋转大于180度的角度
缺点:①同一旋转的表示不唯一 ②万向节死锁

万向节死锁

当某个特定轴达到某个特殊值时,绕一个轴旋转可能会覆盖住另一个轴的旋转 ,从而失去一维自由度。Unity中X轴达到90度时会产生万向节死锁。

因为欧拉角存在一些缺点 ①同一旋转的表示不唯一 ②万向节死锁。 而四元数旋转不存在万向节死锁问题。因此在计算机中我们往往使用四元数来表示三维空间中的旋转信息。

四元数是什么

四元数的构成

(1)四元数概念
四元数是简单的超复数,由实数加上三个虚数单位组成,主要用于在三维空间中表示旋转。
四元数原理包含大量数学相关知识,较为复杂 比如:复数、四维空间等等。因此此处我们只对其基本构成和基本公式进行讲解,如想深入了解数学原理请从数学层面去查找资料了解它。

(2)四元数构成
一个四元数包含一个标量和一个3D向量 。
[w,v], w为标量,v为3D向量。可表示为[w, (x,y,z)]。
对于给定的任意一个四元数都可以表示3D空间中的一个旋转量。

(3)轴-角对
在3D空间中,任意旋转都可以表示绕着某个轴旋转一个旋转角得到。
注意:该轴并不是空间中的x,y,z轴,而是任意一个轴。

对于给定旋转,假设为绕着n轴,旋转β度,n轴为(x,y,z) 那么可以构成四元数为
四元数Q = [cos(β/2), sin(β/2)n]
四元数Q = [cos(β/2), sin(β/2)x, sin(β/2)y, sin(β/2)z]
四元数Q则表示绕着轴n,旋转β度的旋转量

Unity中的四元数

(1)Quaternion
Quaternion是Unity中表示四元数的结构体
Unity中四元数初始化方法
unity四元数旋转,Unity引擎,c#,游戏程序,unity

//用计算原理 初始化一个围绕着轴(1,0,0)旋转60度的旋转量
Quaternion q=new Quaternion(Mathf.Sin(30*Mathf.Deg2Rad),0,0,Mathf.Cos*Mathf.Deg2Rad));
//用轴角对初始化
Quaternion q1=Quaternion.AngleAxis(60,Vector3.right);
//创建一个立方体
GameObject obj=GameObject.CreatePrimitive(PrimitiveType.Cube);
obj.transform.rotation=q1;

(2)欧拉角和四元数的转换
欧拉角转四元:Quaternion.Euler(x,y,z)
四元数转欧拉角
Quaternion q;
q.eulerAngles
3.2.3 四元数弥补的欧拉角的缺点
1. 同一旋转的表示不唯一。四元数旋转后,转换后的欧拉角始终是 -180~180度
2. 万向节死锁。通过四元数旋转对象可以避免万向节死锁

四元数的计算

(1)四元数相乘
q3 = q1 * q2
两个四元数相乘得到一个新的四元数,它代表两个旋转量的叠加,相当于旋转。
注意:旋转相对的坐标系 是物体自身坐标

//用轴角对的形式初始化要旋转的角度
Quaternion q=Quaternion.AngleAxis(20,Vector3.up);
this.transform.rotation*=q;//让物体绕着y轴旋转20度

(2)四元数乘向量
v2 = q1 * v1
四元数乘向量返回一个新向量。
四元数乘以向量,相当于把向量旋转相应的四元数
注意:四元数写在前面,向量写在后面,顺序是不能改变的

Vector3 v=Vector3.forward;
print(v);
v=Quaternion.AngleAxis(45, Vector3.up) * v;//让v绕着y轴旋转45度
print(v);

总结:
1.四元数构成——[cos(β/2), sin(β/2)x, sin(β/2)y, sin(β/2)z]
2.Unity中的四元数——Quaternion
3.四元数弥补了欧拉角的缺点—— 同一旋转的表示不唯一 、万向节死锁
4.四元数相乘——角度叠加
5.四元数乘向量——旋转向量文章来源地址https://www.toymoban.com/news/detail-799946.html

到了这里,关于Unity 四元数与物体旋转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Unity --- quaternion(四元数)类API

    1.欧拉角转四元数 --- 调用方法 ; 四元数转欧拉角 --- 调用属性  2.上面这个方法是绕给定轴/角进行旋转  1.第三个方法 --- LookRotation() --- 该方法需要一个Vector3类对象(以向量的形式)作为参数 --- 该方法会返回一个四元数 ,返回的这个新的四元数能够使物体自身坐标系的Z轴

    2023年04月09日
    浏览(39)
  • Unity --- 三维数学 --- 欧拉角与四元数

      1.Transfrom中的Rotation中的x,y,z三个值就是对应着三个方向上的欧拉角 2.注意物体沿Y轴方向旋转时,是沿世界坐标系的Y轴旋转,而不是沿自身的Y轴旋转 3.一个物体三个方向上的欧拉角是用一个Vector3三维向量对象来表示的 --- (x,y,z)分别对应三个方向上的欧拉角 1.接下来开始

    2024年01月15日
    浏览(44)
  • 数学概率 | 旋转矩阵、欧拉角、四元数

    目录 一,旋转矩阵 二维旋转矩阵 三维旋转矩阵 二,欧拉角 三,四元数 四,矩阵、欧拉角、四元数相互转换 四元数转矩阵 矩阵转四元数 欧拉角转矩阵 矩阵转欧拉角 欧拉角转四元数 四元数转欧拉角 二维旋转矩阵 R() =  推导,以二维平面为例旋转:  = cos( + ) = coscos - si

    2024年02月06日
    浏览(49)
  • 【Unity3D】游戏物体操作 ③ ( 旋转操作 | 旋转工具 | 基本旋转 | 设置旋转属性 | 增量旋转 | 缩放操作 | 轴向缩放 | 整体缩放 | 操作工具切换 | 操作模式切换 )

    选中 Scene 场景 中的 游戏物体 GameObject , 点击 工具栏 中的 转换工具 , 此时在该 游戏物体 会被 4 个 圆圈 环绕 ; 红圈 : 拖动该圈 , 绕 X 轴旋转 ; 绿圈 : 拖动该圈 , 绕 Y 轴旋转 ; 蓝圈 : 拖动该圈 , 绕 Z 轴旋转 ; 最外层还有一个 白圈 ; 鼠标左键按住旋转 : 在 Unity 旋转 游戏物体

    2023年04月08日
    浏览(73)
  • 四元数,欧拉角和旋转矩阵相互转换

    打印输出: 在线转换网站:1、三维在线旋转变换网站 https://www.andre-gaschler.com/rotationconverter/ 2、 Rotation Conversion Tool https://danceswithcode.net/engineeringnotes/quaternions/conversion_tool.html 3、角度、弧度在线转换工具 https://www.osgeo.cn/app/sc210 参考链接:https://www.jianshu.com/p/4fda4c34b829 https://

    2024年02月14日
    浏览(43)
  • 四元数,旋转矩阵,欧拉角互转(python)

    运行代码之前需要安装pyquaternion和scipy。 pip install pyquaternion pip install scipy 代码之前放下面,main函数有使用的方式

    2024年02月12日
    浏览(46)
  • 【学习笔记】空间坐标系旋转与四元数

      最近在学惯性器件,想着先把理论知识脉络打通,于是便开始学习空间坐标系旋转和四元数,正好结合刚刚结课的课程《机器人控制技术》,记录一下学习心得。 旋转矩阵和齐次变换矩阵部分主要参考自教材 《机器人学导论》 中的第2章 【有需要的可以去z-library上免费

    2024年02月01日
    浏览(42)
  • COLMAP中将旋转矩阵转为四元数的实现

          instant-ngp中执行scripts/colmap2nerf.py时,在colmap_text目录下会生成cameras.txt、images.txt、points3D.txt三个文件:       1.cameras.txt:       (1).该文件包含数据集中所有重构相机(all reconstructed cameras)的内在参数(intrinsic parameters),每个相机占用一行;       (2).参数的长度是可变的,

    2024年02月07日
    浏览(40)
  • 【Eigen库使用】角轴、旋转矩阵、欧拉角、四元数转换

    在slam中经常用到的四种描述机器人orientation的变量,他们之间可以相互转化,使用Eigen库可以很容易的做到这一点, 需要特别关注的是:欧拉角与其余量之间的转换关系 : 1)首先要明确的是, 必须要明确欧拉角的旋转次序 ,你可以选择RPY、YPR等方式,在相同的orientation下,

    2024年01月18日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包