1.Vector3是啥?

representation of .... (表示...) --- 相对应的vector2就是2d的

Vector3是UnityEngine类下的一个静态结构体,这个结构体中有许多成员方法以及三个最重要的成员变量 : x ,y ,z 均为单精度浮点型float

创建vector3类型的变量的时候有三种初始化方式,一种是什么都不加,如下图

一种是加两个参数 x ,y,还有种是加三个参数x,y,z

2.通过vector3类型创建的变量可以表示为一个向量,也可以表示为一个坐标(点),还可以表示为一个旋转(表示旋转的时候括号内的参数是旋转角),还还可以表示缩放(x,y,z)三个方向上的缩放

3.在c#中创建一个浮点数的时候,默认为双精度浮点数,如果是想创建一个单精度浮点数的话,我们要在这个浮点数后面加上一个 f ,比如 : 0.5f

4.Vector3结构体中提供了很多静态的属性来帮助我们给vector3变量初始化:比如

vector.zero(把这个赋值给变量,可以直接把变量的参数初始化为(0,0,0))

vector.one ---- (1 , 1, 1 )

还有back,right,left,up,down等等,到时候可以自己去看看

5.也可以直接通过结构体变量名+ 点操作符 + 成员参数民来访问和操作成员参数

6.通过结构体名调用Vector结构体中的静态方法angle --- 传两个vector变量作为参数 ,方法的返回值是将这两个作为向量时的向量夹角。

如果是调用distance方法的话,传的两个参数会被当作坐标(点),返回值是两个点之间的距离

用Dot方法的话,就是当向量求点乘,返回点乘后的值

如果是Cross方法的话,当向量求叉乘,返回叉乘后得到的新Vector变量

调用Lerp方法的话,要传三个参数,插值中的t参数的范围是0到1,通过这个方法我们可以获得一个沿着固定起点向固定终点不断移动的向量/点/刻度/旋转

7.直接通过变量调用magnitude(向量模长)属性,可以获得当前向量的模长

调用normalized属性我们可以获得将变量规范化后(单位长度化)的新变量


欧拉角 --- 与旋转有关 

这个面板中的Rotation中的每一个参数都是欧拉角,范围是0到360°

通过欧拉角控制物体旋转并不是有三个旋转角度参数就足够了,我们还需要一个参数来表示x,y,z三个旋转角度的旋转顺序

原因是通过欧拉角体系来描述旋转时,不同的旋转顺序带来的旋转结果是不一样的

人们认为归定了这个顺序参数是X - Y - Z

然后欧拉角旋转时一个很重要的特点是:

顺序在前的轴转动时会带动顺序在后的轴转动,这是因为欧拉角的旋转原理是相对于改变前的自身坐标系进行旋转的,但是顺序在后的轴转动时顺序在前的轴不会跟着转动

欧拉角的转动其实就是新的自身坐标系(整体)相对于旧的自身坐标系顺/逆时针转动一定的角度(欧拉角:0~360°),比如下面这个:

第一次欧拉角旋转:新的自身坐标系Y轴顺时针相对于旧的自身坐标系Y轴转动(一个轴的转动会带动整个坐标系转动,因为相互垂直的关系要保持)

第二次欧拉角转动:原本是新的坐标系的Y轴转化为旧的坐标系Y轴,然后在转动的时候生成一个新的坐标系Y轴顺时针相对于旧坐标系Y轴旋转一个欧拉角

( 上面这个描述的是动态定义下的欧拉角,还有一种静态定义下的欧拉角,即相对于世界坐标系转动,但此处我们只讨论动态定义下的欧拉角)

继续回到欧拉角的特征上:即顺序在前的轴转动时会带着顺序在后的轴一起转动,但是顺序在后的轴转动时不会带动顺序在前的轴转动

根据这个特征我们就能够知道万向死锁出现的原因了:

如果我们先转Y轴(X轴和Z轴相互垂直),转动90°,根据上面的特性我们可以得知:X轴不会跟着转动,Z轴会跟着转动90°,此时就会出现一个现象:

Z轴和X轴重合了!!!,此时我们无论是绕X轴转还是绕Z轴转,得到的旋转结构都是一样的

由于发生了重合,三个旋转轴变成了两个,我们的物体丢失了一个旋转角度,或者说丢失了一个自由度

但是,这种论述只是方便解释的假设情况,真正的事实是:无论那个轴发生旋转都会带动另外两个轴发生旋转,那么在这种现实情况下又为什么会发生万向死锁呢?

变换和运动是不相同的!!

从A变为B,我们称为变换,这是两个状态的转变,是没有过程的,上一秒在起点下一秒在终点,这就是变换

而运动是有过程的,是连续的。在现实中,运动是由无数个变换组成的,从A到B的运动过程中我们执行了无数个变换,将这无数个变换的空间积分就成了宏观的距离,无数个时间积分就成了宏观的时间

电脑中的动画就是在模拟现实中的变换来实现运动。在电脑中所有的动画都可以在一定时间里拆分为有限数量的图片,这些图片都在一定的时间间隔内播放(这个时间间隔被称为帧)

上一帧的图片A变为下一帧的图片B,这就是一种变换而不是运动!!!当这些变换在一定时间内积累的足够多的时候就形成了运动(即连续)的假象

而欧拉角描述的就是变换而不是运动!

一个欧拉角变换过程是由三个分变换按照X-Y-Z的顺序组成的一个总变换,这三个分变换分别是:X轴变换,Y轴变换和Z轴变换,这三个变换组成一个总的变换后,得到一个结果姿态,然后我们会将初始姿态直接变为结果姿态

每一次的欧拉角变换都是在给定变换参数和顺序的情况下,将初始姿态变为结果姿态

而每一次的欧拉角变换的初始姿态都是固定的,即参数为0,0,0的情况


四元数 --- 欧拉角进化版

在系统中表示旋转的一般不是欧拉角而是四元数

四元数是一个四维空间的高阶复数,它的效率很高,而且不会造成万向节死锁问题

WoW,看了半天,哎,先记个四元数旋转计算公式吧:

具体的公式可以自己上网找找


Unity引擎带给我们的便利

在unity中,提供给了我们一个方法,当我们向这个方法传一个欧拉角的时候,它会放回一个对应的四元数给我们

Quaternion --- 四元数

创建一个四元数对象的方式有很多种,和Vector对象很类似

1.直接用new创建 - new Quaternion(传四个参数,分别是四元数的实部和三个虚部)

2.直接通过类/结构体名来调用四元数类/结构体中的静态属性来直接赋值创建:

identity : 通过这个赋值得到的四元数坐标如下

3.通过方法转换将一个欧拉角转换为四元数,然后用这个四元数来赋值

方法是Quaternion中的静态方法Euler(欧拉)括号里面可以传三个角度参数,也可以直接传一个欧拉角进去。这个方法的返回值就是通过传进来的欧拉角转换而成的四元数

4.

调用这个LookRotation方法可以获得一个四元数

在括号里我们可以只传一个参数也可以传两个参数,当我们只传一个参数forward(向前)向量的时候,我们可以生成一个用来进行旋转的四元数,将这个四元数用于旋转的时候可以让物体的z轴与forward向量重合

也就是说forward向量影响的是Z轴的指向,而另一个upward向量影响的是Z轴的旋转

当我们只传一个upward向量的时候,就会返回一个用于旋转物体的y轴使得其与我们指定的upward向量平行/重合(对齐)的四元数

如果传两个参数的话,返回的就是一个能让物体Z轴和forward向量对齐的同时,让物体的y轴与upward向量对齐的四元数

注意上面进行旋转的都是物体的本地坐标系

LookRotation详解


5.通过四元数转为欧拉角

rotate是一个欧拉角,quaternion是一个四元数变量名,直接通过这个变量名调用Quaternion中euleAngles静态方法后,会将调用这个方法的四元数转换为对应的欧拉角,并将这个欧拉角返回。

Unity --- Vector3的使用,欧拉角与四元数相关推荐

  1. 简单研究Unity中的万向锁和欧拉角以及四元数

    欧拉角是欧拉在17世纪发明引进的一个数学工具,在三维欧几里得空间内,欧拉角可以确定一个物体的朝向.在解决静态问题上,欧拉角是一个比较完美的解决方案,但在动态问题上,欧拉角有一个万向锁的瑕疵,数学界在后 ...

  2. 欧拉角、四元数与旋转

    欧拉角 使用三个角度来保存方位,如(0, 50, 0). X和Z沿自身坐标系旋转,Y沿世界坐标系旋转. 获取物体欧拉角:Vector3 eulerAngle = transform.eulerAngl ...

  3. creator中关于旋转所使用的欧拉角和四元数

    概念 四元数,欧拉角,变换矩阵,这三者是可以相互转化的,但并不是说变换矩阵等于欧拉角或者变换矩阵等于四元数,欧拉角或者说四元数他们只是旋转数据,而一个矩阵是一个空间坐标系,旋转的数据只是构造的它的一部 ...

  4. 车辆姿态表达:旋转矩阵、欧拉角、四元数的转换以及eigen、matlab、pathon方法实现

    目录 1 概述 2 原理 2.1 旋转矩阵 2.1.1 绕x轴旋转 2.1.2 绕y轴旋转 2.1.3 绕z轴旋转 2.2 欧拉角 2.2.1 基本思想 2.2.2 欧拉角的缺点 2.3 四元数 2. ...

  5. Games101计算机图形学入门基础之一:向量变换、矩阵变换、视图变换、欧拉角与四元数

    Games101计算机图形学入门基础之一:向量变换.矩阵变换.齐次坐标.欧拉角与四元数 目录 Games101计算机图形学入门基础之一:向量变换.矩阵变换.齐次坐标.欧拉角与四元数 前言 向量 向量加 ...

  6. 欧拉角与四元数互转,及四元数slerp球面线性插值算法

    欧拉角与四元数互转,及四元数slerp球面线性插值算法 1. 欧拉角与四元数是什么? 2. 源码 2.1 欧拉角类 2.2 四元数类 2.3 欧拉角与四元数互转及球面线性插值算法 参考 1. 欧拉角与 ...

  7. 旋转矩阵、欧拉角、四元数比较

    旋转矩阵.欧拉角.四元数主要用于:向量的旋转.坐标系之间的转换.角位移计算.方位的平滑插值计算. 不同的方位表示方法适用于不同的情况.下面是我们对合理选择格式的一些建议:  l 欧拉角最容易使用.当需 ...

  8. 深入浅出无人机姿态,欧拉角,四元数,指数表示及数据转换与程序实现

    很多朋友留言或私信问到书名和出版日期.先感谢这么多朋友的支持和信任,MR.城堡会努力为大家带来更多干货.另外,交稿日期是今年12月,出版要看机械工业出版社的安排,书名和出版情况确定后,会在专栏告知大家 ...

  9. 旋转矩阵、欧拉角、四元数理论及其转换关系

    旋转矩阵.欧拉角.四元数理论及其转换关系 author@jason_ql(lql0716) http://blog.csdn.net/lql0716 1.概述 旋转矩阵.欧拉角.四元数主要用于表示坐标 ...

最新文章

  1. 论文不公开代码,应该被直接拒稿?
  2. jackson.ObjectMapper里enableDefaultTyping方法过期
  3. Aix oracle 自动启动,AIX如何自动启动和关闭软件的运行
  4. 《王者荣耀》主策划Xavier分享腾讯游戏10年在职经历
  5. java 与 乱码问题_透彻分析和解决一切javaWeb项目乱码问题
  6. springboot超详细教程_超详细便当袋教程 || 特殊时期,自己带饭最安心!
  7. python的整数类型_Python int 数字整型类型 定义int()范围大小转换
  8. 09 Softmax回归+损失函数
  9. 使用PhoneNumberValidator判断用户输入的电话格式,并用PhoneFormatter对电话号码格式化。...
  10. 遗传算法(Genetic Algorithm)原理详解和matlab代码解析实现及对应gaot工具箱实现代码
  11. 产品经理常用的三款工具
  12. 香港部分超市因内地游客抢购奶粉发出限购令
  13. 洽谈国内单机游戏下载站
  14. Dockerfile指令详解镜像构建实例说明
  15. 如何把一篇Word文档里的所有换行符去掉?
  16. java中什么是结果集,Java中对数据库查询结果集进行操作的对象是()
  17. 招商信诺完成15例新冠病毒感染肺炎赔付;东呈减免湖北加盟酒店重大费用 | 美通企业日报...
  18. html中的div是什么意思
  19. SQL中变量赋初始值的重要性
  20. 服务器中如何查看sdb中文件,sdbtop使用介绍-dbc2000设置

热门文章

  1. HSV色彩空间筛选 2021-10-06
  2. 【Git常用】之回滚
  3. MCAL知识点(十九):SENT驱动详细配置
  4. vue语法、跨域报错等问题集合
  5. HTTPS证书认证过程(CA)
  6. Java isEmpty()方法
  7. 【C语言】C语言中赋值语句规则
  8. i2c信号的ACK与NACK
  9. 第三方登录之微信登录
  10. STM32L031 HAL库读写内部EEprom