Quaternion的研究

  最近在研究物体的转动问题,想过用矩阵、角度,但处理起来都不怎么方便,特别是在插值方面,然后发现还是unity自带的Quaternion好用。Quaternion是一个四元数,大学里这一块数学没学好,只能通俗了解一下这个东西。

四元数是最简单的超复数。四元数都是由实数加上三个元素 i、j、k 组成,而且它们有如下的关系: i^2 = j^2 = k^2 = ijk = -1 , 每个四元数都是 1、i、j 和 k 的线性组合,即四元数一般可表示为a + bi + cj + dk 。(其中i^2=j^2=k^2=-1,ij=k,ji=-k,jk=i,kj=-i ki=j,ik=-j)。由此可知四元数没有交换律。

 

性质:

 

1.(a^2+b^2+c^2+d^2)的平方根 称为四元数的模

2.加法p + q

跟复数、向量和矩阵一样,两个四元数之和需要将不同的元素加起来

p + q =a+t+bi+xi+cj+yj+dk+zk = (a+t) + (b+x)i + (c+y)j + (d+z)k

3.乘法

4.点积

5.外积

6.

7.。。。等等好多性质,具体可以查看百度百科:Quaternion

 

在unity中U3d已经有封装好的函数了;那么这个Quaternion到底是个什么样的东西呢?

uaternion 中 (x,y,z) 跟旋转轴有关, w 与绕旋转轴旋转的角度有关,因为它们都要经过代数运算才能得出旋转轴和旋转角度 

 

 

在unity3d中, quaternion 的乘法操作 (operator * ) 有两种操作:
(1) quaternion * quaternion , 例如 q = t * p; 这是将一个点先进行t 操作旋转,然后进行p操作旋转.
(2) Quaternion * Vector3, 例如 p : Vector3, t : Quaternion , q : Quaternion; q = t * p; 这是将点p 进性t 操作旋转;
我进行的是第2种操作,即对一个向量进行旋转;
首先 ,Quaternion 的基本数学方程为 : Q = cos (a/2) + i (x * sin(a/2)) + j (y * sin(a/2)) + k(z * sin(a/2)) (a 为旋转角度)
Q.w = cos (angle / 2) 
Q.x = axis.x * sin (angle / 2) 
Q.y = axis.y * sin (angle / 2) 
Q.z = axis.z * sin (angle / 2)
我们只要有角度就可以给出四元数的四个部分值,例如我想要让点M=Vector3(o,p,q) 绕x轴顺时针旋转90度;那么对应的quaternion数值就应该为:
Q : Quaternion;
Q.x = 1 * sin(90度/2) = sin(45度) = 0.7071
Q.y = 0;
Q.z = 0;
Q.w = cos(90度/2) = cos (45度) = 0.7071
Q = (0.7071, 0 , 0 , 0.7071);
m = Q * m; (将点m 绕 x轴(1,0,0) 顺时针旋转了90度)


var m : Vector3;
var t1 : Quaternion; 
m = Vector3(1,0,0); 
t1 = Quaternion(0.7,0,0,0.7); 
m = t1*m ;  

var m : Vector3;    
var t1 : Quaternion;
m = Vector3(1,0,0);          
t1 = Quaternion(0.7,0,0,0.7);   
m = t1*m;

这是quaternion 的最基本用法,只要给出角度,就可以算出Quaternion,然后进行旋转。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值