Unity 四元数

【Unity中的数学】—— 四元数 四元数总忘 得看看嗷 阅读详情

 

2011-03-23

1,Quaterion 四元数

四元数可理解为一个旋转轴向量和一个旋转角度。注意:这里不是点绕轴旋转,而是一个矢量绕轴旋转。旋转后得到的也是一个矢量。因此,如果想要计算某个点P绕着某个固定的轴旋转一个角度后的点的坐标,那么首先需要在轴上固定一点S, 连接SP组成矢量。用四元数计算旋转后的矢量,再加上S点坐标,就得到了旋转后的坐标。

例:计算某点绕某一轴旋转一定的角度后的点的坐标

static function RotateAroundPoint(point : Vector3, pivot : Vector3, angle : Quaternion) : Vector3

{

     var finalPos : Vector3 = point - pivot;

     //Center the point around the origin

     finalPos = angle * finalPos;

     //Rotate the point.

     finalPos += pivot;

     //Move the point back to its original offset.

     return finalPos;

}

var newPos = SomeClass.RotateAroundPoint(Vector3.forward, Vector3.zero, Quaternion.Euler(0, 90, 0) );

Debug.Log(newPos);

//Prints (1, 0, 0) or is it (-1, 0, 0 )?  Something like 2.html

四元数其他网址

http://hi.baidu.com/czx_main/blog/item/71468e3690f438390a55a992.html

http://oulehui.blog.163.com/blog/static/796146982011273184592/

http://www.cnblogs.com/softimagewht/archive/2010/11/16.html

一般来说,三维空间上没有顺时针或者逆时针的概念。只有当我们确定了一个视线方向时,才区分顺时针和逆时针。大部分四元数规定都是,从旋转轴的反方向看过去,逆时针的角度为正。比如你的旋转轴为z轴正方向(例如从屏幕伸出来的那个轴),那么我向屏幕望去(也就是z轴反方向)看去,逆时针旋转的角度为正,顺时针为负。除非你用的四元数做了特殊规定,否则大部分都是这样的。

2,Gimbal Lock万向锁和EulerAngle欧拉角

Gimbal Lock 视频:http://www.cnblogs.com/mavaL/articles/1860354.html

 

2011-03-24

Transform

1,.transform.forward 物体在世界坐标系下z轴的方向,如下图所示

transform.forward = (1,0,0)而Vector3.forward则表示世界坐标系z轴的方向,即:(0,0,1)

测试实例:

transform.Translate(transform.forward*Time.deltaTime);//

物体每秒钟将相对自身坐标系移动(1,0,0)个单位,即:向下移动。

transform.Translate(Vector3.forward*Time.deltaTime);//

物体每秒钟将相对自身坐标系移动(0,0,1)个单位,即:向右移动。

2,transform. Rotate (eulerAngles : Vector3, relativeTo : Space = Space.Self)

       注意eulerAngle的旋转是有顺序的。Unity中是按照z-x-y的顺序旋转的。

3,transform.RoateAround (point : Vector3, axis : Vector3, angle : float)

可以实现一个物体绕另一个物体旋转. 例:

transform.RotateAround(_target.transform.position,Vector3.up,Time.deltaTime*_speed);// 绕_target物体旋转,旋转轴为y轴

(Vector3.up, Time.deltaTime*_speed);//绕y轴旋转,注意区分:

transform.RotateAround(transform.up, Time.deltaTime*_speed);

4,function TransformDirection (direction : Vector3) : Vector3

//将局部坐标转换为世界坐标,例:

Vector3 vecRet = transform.TransformDirection(Vector3.right);//将局部坐标系下(1,0,0)点转换为世界坐标系下的点。vecRet的值为(0,0,-1).该值和transform.right的值等价,

5,InverseTransformDirection(Vector3.right)返回值为(0,0,-1),如下图所示:

例:

relativePosition = cameraTransform.InverseTransformDirection(transform.position - cameraTransform.position);

6,transform.TransformPoint(2,0,0);//

Let's say that if you hold your right arm straight out to the side, the local-space coordinate (2, 0, 0) is at the tips of your fingers. No matter where you go or how you orient yourself, as long as you keep your arm straight out, the tips of your fingers will still be at exactly the same location in local space.

However, as you move and re-orient yourself, the world-space position of the tips of your fingers is constantly changing. This is what TransformPoint() does; it takes the local-space coordinate ((2, 0, 0) in this case) and converts it to a world-space coordinate based on the current transform for the object (the object being you in our example).

例:在距离当前物体的右侧2个单位的距离的位置处创建一个_target物体。

Instantiate(_target, transform.TransformPoint(Vector3.right*2), transform.rotation);

.InverseTransformPoint()将世界坐标系下的点转化成相对坐标系下的点,如:在Inspector面板上显示的物体的坐标为世界坐标系下的点,如果调用该函数的话,则返回值为(0,0,0)

transform.InverseTransformPoint(new Vector3(2630.192f, 763.5179f,1161.068f));

7, static function FromToRotation (fromDirection : Vector3, toDirection : Vector3)

将物体的fromDirection方向旋转到toDirection方向,例:将物体x、z的角平分线的方向(1,0,1)旋转至世纪坐标系z轴的方向。

public Vector3 _fromDir;

public Vector3 _toDir;

Quaternion q = Quaternion.identity;

q.SetFromToRotation(_fromDir, _toDir);

//等价于 q = Quaternion.FromToRotation(_fromDir, _toDir);

transform.rotation = q;

print(transform.right.ToString());

旋 转 前

旋 转 后

8,Quaternion.()

         建立一个旋转使z轴朝向view  y轴朝向up.其功能与LookRotation一样

9,Quaternion.AngleAxis(angle : float, axis:Vector3)

Create a rotation which rotates angle degrees around axis

创建一个绕着axis旋转angle度的旋转,例:

transform.rotation = Quaternion.AngleAxis(30.0f, Vector3.up);//将物体的旋转角度设置成绕Y轴旋转30度。无论物体以前的旋转如何,最终的旋转就是上面代码所设置的旋转。如图所示:

转 前

旋 转 后

10,Quaternion.Angle()

计算两个旋转之间的夹角。跟Vector3.Angle(a : Quaternion, b : Quaternion) 作用一样。

参考网址:http://www.cnblogs.com/softimagewht/archive/2010/11/16.html

 

11,Unity3D 使用的是左手坐标系,即:Z轴方向),握向右方(X轴方向),

大拇指的方向即为Y轴方向。

 

【Unity编程】四元数(Quaternion)与欧拉角 四元数是高阶复数的数学,它用在游戏中的作用主要是计算三维矢量的旋转,它使用先将矢量映射到纯虚四元数,再应用旋转四元数的方式进行映射。最后可以达成旋转目的。 阅读详情

相关推荐

【Unity编程】Unity中关于四元数的API详解

Unity中关于四元数的API详解Quaternion类Quaternion(四元数)用于计算Unity旋转。它们计算紧凑高效,不受万向节锁的困扰,并且可以很方便快速地进行球面插值。 Unity内部使用四元数来表示所有的旋转。

Andrew的游戏世界 1万+

Unity-四元数

0.0

qq_42705793的博客 1445

【Unity技巧】四元数(Quaternion)和旋转

四元数介绍旋转,应该是三种坐标变换——缩放、旋转和平移,中最复杂的一种了。大家应该都听过,有一种旋转的表示方法叫四元数。按照我们的习惯,我们更加熟悉的是另外两种旋转的表示方法——矩阵旋转和欧拉旋转。矩阵旋转使用了一个4*4大小的矩阵来表示绕任意轴旋转的变换矩阵,而欧拉选择则是按照一定的坐标轴顺序(例如先x、再y、最后z)、每个轴旋转一定角度来变换坐标或向量,它实际上是一系列坐标轴旋转的组合。那...

weixin_34367257的博客 1万+

Unity——四元数

万向节死锁 可以理解为有两个轴重合在了起,导致只能对物体两个方向进行旋转 实数:有理数和无理数 虚数:I^2 = -1 复数:实数+虚数 四元数<x,y,z>theta 超复数:(x,y,z,w) X = n x * sin(theta/2) Y = n y * sin(theta/2) Z = n z * sin(theta/2) W = cos(theta/2) //通过四元数,让cu...

m0_51743362的博客 3456

Unity 四元数与欧拉角的相互转换及推导

懒惰的我终于也要写第一篇博客啦~由于需求需要在控制台中对unity的四元数与欧拉角进行相互转换 而网上的文章大多没有推导过程 并且坐标系或欧拉角的旋转顺序与unity不一致 所以自己动笔算了算 在此记录一下~ 首先感谢这个小姐姐的这篇文章。以及文章中的以下四个链接给予我的启发 1. Euler To Quaternion 2.Quaternion To Euler 3.AngleAxis T

qq1545372477的博客 6574

unity四元数学习总结--FromToRotation

上节介绍了,算是LookRotation的内部实现,这一节来介绍下unity的FromToRotation函数。 FromToRotation(from,to)这个函数主要的作用是计算将物体从一个旋转态转移到另一个旋转态的四元数,即将from旋转至to需要的四元数,与上一节不同的时,此时旋转对应欧拉角Z分量不一定为0了。 (1)FromToRotation 计算公式 主要计算思路是分别将两...

weixin_42275416的博客 5613

unity3d————四元数概念

四元数也可以表示为q = [w, v],其中v = (x, y, z)是矢量,w是标量。虽然v是矢量,但它不能简单地理解为3D空间的矢量,而是在4维空间中的矢量。综上所述,四元数是一种在三维空间中表示旋转的数学结构,由实数部分和三个虚数部分组成。它们具有独特的性质和运算规则,并广泛应用于计算机图形学、机器人学等领域。四元数的引入为三维旋转的表示和处理提供了新的思路和方法。

2401_82978699的博客 2571

【Unity每日一记】Unity中的计时器——4种方法的实现

实现计时的四个简单方法

秩沅 4008

Unity四元数总结

四元素用法总结

lichoueve的博客 2161

【Unity每日一记】Unity中的四元数(Quaternion)

Quaternion

秩沅 2611

用Multisim复刻经典收音机:从零搭建超外差中波调幅接收机(附仿真源文件)

本文详细介绍了如何使用Multisim软件从零搭建超外差中波调幅接收机,复刻经典收音机的设计过程。通过模块化搭建、稳定性优化和增益分配等实战指南,帮助读者掌握超外差架构的核心技术,并附赠仿真源文件供实践参考。

weixin_28744423的博客 477

关于Unity 中的四元数

表示一个三维旋转有N中方法

dragonchow123的专栏 1472

kemeas算法继续优化——elkan kmeas算法

题记:又是凌晨3点的夜 elkan kmeans算法 在我的上一篇博客《kmeans算法性能改进_kmeans++算法+kmeans++优化算法+距离计算优化》中,在一般kmeans算法的基础上,添加了对于初始条件和距离计算更上的一些优化技巧。这篇博客聊一聊elkan算法,其实也是对于kmeans运行速度的优化算法。主要作用与kmeans的距离计算过程。 原理 假如我们已经知道任意两个样本之间的距离,再假设我们已经知道了样本1与聚类中心1之间的距离,根据三角性两边之和大于第三边,c+d>a,所以如果

铁血军的小博客 7066

unity 中的数学 之 四元数

四元数得多看看 ,很容易忘

咩咩的博客 705

HybridCLR热更新全流程实操:用Addressables实现资源+代码双热更(Unity 2021版)

本文详细介绍了在Unity 2021 LTS版本中,如何结合HybridCLR代码热更新与Addressables资源管理系统,实现资源与代码的双热更解决方案。通过环境配置、技术架构设计、实战案例和性能优化,帮助开发者解决中大型项目中的依赖管理和版本协同问题,提升游戏迭代效率。

cc789的博客 848

完整的申请邓白氏编码的流程(手把手教你申请邓白氏编码)

申请公司的苹果开发者账号和企业级的苹果开发者账号时,都会用到邓白氏编码,也就是我们申请苹果开发者账号时需要填写的D-U-N-S Number。     申请这个邓白氏编码是免费的,但是从像华夏邓白氏公司提交申请到可以申请苹果开发者账号来用这个9位的D-U-N-S Number,需要一段时间,我申请得到D-U-N-S Number,用了8个工作日(不算周末哦)

wxw2011014003的博客 9万+

Unity中的四元数和旋转

文章目录四元数 四元数 四元数用来表示一个物体的位置,或者旋转。这两种其实是等价的。我们可以说一个三维向量(x,y,z)(x,y,z)(x,y,z)可以表示一个物体的空间位置,也可以表示位移。因为任何一个三维向量可以表示原物体相对于位置(0,0,0)(0,0,0)(0,0,0)的位移。同样,一个四元数表示的物体位置也可以看作是一个物体相对于初始四元数(0,0,0,0)(0,0,0,0)(0,0,0...

Terie的博客 1609

防止通达信公式被盗?手把手教你用DLL加密+互联网验证(含易语言后台管理)

本文详细介绍了如何通过DLL加密与互联网验证技术保护通达信公式安全。从DLL加密实现、设备绑定到易语言后台管理,提供了一套完整的防护方案,有效防止公式被盗用。重点讲解了互联网验证登录和绑定设备等核心技术,帮助量化交易者守护核心资产。

weixin_29323551的博客 504

Unity中的四元数

Q=[cos(β/2),sin(β/2)x,sin(β/2)y,sin(β/2)z](四元数是简单的超复数,主要在三维空间中表示旋转,四元数Q则表示绕着轴n旋转β度的旋转量)当某个特定轴达到某个特殊值时,绕一个轴旋转可能会覆盖住另外一个轴旋转,从而失去一维自由度,在Unity中,X轴达到90度时会产生万向节死锁。表示没有旋转量(角位移),当角度为0或者360度时对于给定轴就会得到单位四元数。(轴-角对:在3D空间中,任意旋转都可以表示绕着某一个轴旋转一个旋转角得到,两个四元数相乘得到一个新的四元数。

2303_76354097的博客 590

完美解决Iframe嵌入帆软报表出现跨域cookie写不进去的问题

那报表后续的请求如何加上这个fine_auth_token,通过观察,我们发现,如果给报表url上加上fine_auth_token,后续的请求中的Refer也会有这个fine_auth_token。我们可以这样想,如果帆软内部获取token,如果从cookie中获取不到,就从url上获取,如果url上也获取不到,那么就从请求Refer请求头中获取也可以拿到这个token了。从上面看到,如果从cookie中没有获取到,就从请求头中获取,还是没有就从paramter中获取。

帆软爱好者的专栏 4067

C# HttpClient完全攻略:从入门到精通只需5步

HttpClient是.NET框架中用于发送HTTP请求和接收HTTP响应的类。它基于异步编程模型,使得网络操作更加高效和灵活。

java专栏 1580

Unity四元数,欧拉角

欧拉角 优点:三个角度组成,直观,容易理解。 优点:可以进行从一个方向到另一个方向旋转大于180度的角度。 优点:由三个数字实现旋转效率相比要高。 弱点:死锁问题。 四元数 内部由四个数字(在Unity中称为x,y,z和w)组成,然而这些数字不表示角度或轴,并且通常不需要直接访问它们。除非你特别有兴趣深入了解四元数学,你只需要知道四元数表示三维空间中的旋转,你通常不需要知道或修改x,y和z属性。 优点:四元旋转不存在万向节锁问题。 优点:存储空间小,

weixin_45223588的博客 3933

ENVI:如何进行对自带RPC的图像进行RPC正射校正呢?

但是我们知道,人生哪里有那么多1就是1,2就是2的情况,更多的实际上是非线性的关系,所以说RPC模型(基于线性多项式模型的进一步改进)会比线性多项式模型更为妥善的解决几何校正的问题。一幅图像上的每一个像素都有它的像点坐标(x,y)(即以图像的左上角点为原点,该像素在整幅图像的哪一个行(y),哪一列(x)),以及该像素所在实际位置的DEM高程数据。那么也就是说,对于一幅图像上的每一个像素,都需要知道该像素所在的行数(y),所在的列数(x),所处位置的DEM高程数据(h) ==> 坐标(x,y,h)。...

炒茄子的博客 5674
上一篇: 如何判断全角半角
下一篇: 线线相交 (Unity代码)
Yanger_xy
博客等级 码龄18年 60粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值