Unity3D之四元数

一、四元数概念

* 四元数是简单的超复数
         * 由实数加上三个虚数单位组成
         * 主要用于在三维空间中表示旋转
         * 
         * 四元数原理包含大量数学知识,较为复杂
         * 比如:复数,四维空间

二、四元数构成

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

1.轴—角对

代码如下(示例):

* 在3d空间中,任意旋转都可以表示绕着某个轴旋转一个旋转角得到
         * 注意:该轴并不受空间中的x,y,z轴 而是任意一个轴  也就是任意角
         * 对于给定旋转,假设为绕着n轴,旋转B度,n轴为(x,y,z)
         * 那么可以构成四元数为
         * 四元数Q=[cos(B/2),sin(B/2)n]   n就是3D向量 第一个就是写死的
         * 四元数Q=[cos(B/2) , sin(B/2)x , sin(B/2)y , sin(B/2)z]

2.  Unity中的四元数

 Quaternion
         是unity中表示四元数的结构

代码如下(示例):

  轴角对公式初始化(不经常用,太麻烦了)
         Q=[cos(B/2) , sin(B/2)x , sin(B/2)y , sin(B/2)z]
         Quaternion q=new Quaternion(sin(B/2)x,sin(B/2)y,sin(B/2)z,cos(B/2))

         轴角对方法初始化
        四元数Q=Quaternion.AngleAxis(角度,轴);
        Quaternion q=Quaternion.AngleAxis(60,Vector3.right)s

三、计算原理

 Quaternion q = new Quaternion(Mathf.Sin(30*Mathf.Deg2Rad), 0, 0, Mathf.Cos(30 * Mathf.Deg2Rad));
        //创建一个立方体
        GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube);
        obj.transform.rotation = q; //rotation就是四元数
        //绕着的轴 标量
        //一般情况下不会用第一个公式

        //第二种 
        Quaternion q2 = Quaternion.AngleAxis(60, Vector3.left);//轴角对
        GameObject obj2 = GameObject.CreatePrimitive(PrimitiveType.Cube);
        obj2.transform.rotation = q2;

总结

四元数弥补欧拉角缺点
        1.同一旋转不唯一
        四元数始终是-180~180
        2.万向节死锁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值