物体绕任意向量的旋转四元数法、旋转矩阵法、欧拉角法.

上传人:m**** 文档编号:563498011 上传时间:2024-01-09 格式:DOC 页数:5 大小:38KB
返回 下载 相关 举报
物体绕任意向量的旋转四元数法、旋转矩阵法、欧拉角法._第1页
第1页 / 共5页
物体绕任意向量的旋转四元数法、旋转矩阵法、欧拉角法._第2页
第2页 / 共5页
物体绕任意向量的旋转四元数法、旋转矩阵法、欧拉角法._第3页
第3页 / 共5页
物体绕任意向量的旋转四元数法、旋转矩阵法、欧拉角法._第4页
第4页 / 共5页
物体绕任意向量的旋转四元数法、旋转矩阵法、欧拉角法._第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《物体绕任意向量的旋转四元数法、旋转矩阵法、欧拉角法.》由会员分享,可在线阅读,更多相关《物体绕任意向量的旋转四元数法、旋转矩阵法、欧拉角法.(5页珍藏版)》请在金锄头文库上搜索。

1、物体绕任意向量的旋转四元数法、旋转矩阵法、欧拉角法的比较所求问题:给定任意单位轴q(ql,q2,q3)(向量),求向量p(x,y,z)(或点饶q旋转theta角度的变换后的新向量p(或点p):1.用四元数工具:结论:构造四元数变换p二q*p*q-1,(p,q是山向主P,q扩展成的四元数)。那么,P转换至对应的向量(或点)就是变换后的新p(或点P)O其中,p,q,P,qT均为四元数。q由向量q扩展,为q=(cos(theta/2),sin(theta/2)*q),p山向量p扩展,为p二(0,x,y,z),q-1的逆,因为q为单位四元数,所以q-l=Q*=(cos(theta/2),-sin(th

2、eta/i(这个结论的证明过程可以在网上找到。这里略去。)下面看其时间复2首先有个三角函数的计算时间,这个可以预先计算好,花费时间不计。考片个四元数相乘需进行4*4*(n-1)=16*(n-1)次乘法,15*(n-1)次加法,因为:化费时间校少,这里仅考虑乘法。这里涉及到三个四元数的乘法,设一次多的时间为T,故花费16*2二32T2.旋转矩阵工貝:一-结论:构造旋转矩阵变换则变换后的新向量p(或点P)为p二p*Trot其中,p(x,,y,z,1),p(x,、为向量p,p的4D齐次坐标表示,Trot二|t*ql*ql+c,t*ql*q2+s*q3,t*ql*s*q2,0t*xql*q2-s*q3

3、,t*q2*q2+c,t*q2*q3+s*ql,0t*ql*q3+s*q2,t*q2s*ql,t*q3*q3+c,0110,0,0,1c二cos(theta),s二sin(theta),t=l-c.(这个结论的证明过程可以在l丄I、vr.l、亠.II1m/-/1-ZETT-4-Hrt.J.*/v.7*、r泾&rt-Li-rt、ZrLI/-/-一比较來看,还是使用四元数的效率要高出一些,这在要变换的点的数大时,体现的越明显。实际上,有很多3D引擎为了利用四元数运算的高必一般先将矩阵转换成四元数后进行运算再转回为矩阵后,再传给DirectXEOpenGL库函数。问题:3D空间中,在等长度的两个交角

4、为theta的向量vl(xl,yl,zl),v2(x2,y2,z2)之间进行球面线性插值。实例:做一个行星在围绕太阳等速旋转的动画,假设只采样到旋转过程两个位置pl,p2,现在想要用软件模拟行星是怎么从pl运动到p2的。思路:1。一般线性插值:我们知道一般两个量之间进行线性插值的方法为:v(t)二vl+t*(v2-vl)(0=t=l)(因为t是一次方的,所以是线性的。)如上图所示。这里,考虑v,vl,v2是向量,由几何学的知识,v2-vl即:vl,v2组成的三角形的另外一条边。因为|vl=|v21,所以vl+t*(v2-v1)的+肯定小于|vl|或|v21,当Otl时。得到的插值向量v(t)的

5、端点沿着v2-vl京一般线性插值山于长度发生变化,不能满足案列的要求,我们需要保量长度不变的插值,即球面线性插值。*2o一般球面线性插值:如上图所示,将一般线性插值得到的结果乘以放大系数k(t),使其长搜大到|vl或|v2|,即得保持向量长度不变的插值:v(t)=k(t)*(vl+t*(v2-vl)其中k(t)=|vl|/|v(t)|=lvl|/|vln*(v2-vl)|这样,插值向量v(t)白点就会沿着vl,v2端点构成的圆弧行进。因为vl,v2是等长的,这个圆弧上杲位于vl.v2构成的球面上的一段,所以又叫球面线性插侑,京注:一般球面线性插值v(t)与vl的夹角theta(t)不是t的线性

6、函数。证明:山向量点积可得cos(theta(t)=(v(t)*vl)/1v(t)|*|vl|,theta(t)=ar.cos(v(t)*vl)/1vl八2),由反证法,假设theat(t)为线性函娄则theat(t)二k*t+b,又theta(0)=0,故b=0,theat(t)二k*t,将t=2t代入得,theta(2*t)=arcos(v(2*t)*vl)/1vl|2)并不等于2*theta(t),所以theat(t)不可能是t的线性函数。*3O改进的球面线性插值:要想进行等速的球而线性插值,有儿个方法:l)o用四元数工具:变换方法:构造单位四元数q(cos(theta),sin(the

7、ta)*vT),r(cos(theta),sin(theta)*v2)(vT和vl单位vl,v2向量),以及参数t(0二t二1),则构造四元数变换:3.四元数s(w,vf)=r*(q-1)exp(t)*q即为球面线性插值变换。其中,s虚部v即为vl和v2间的插值向量,乘以长度sqrt(x2+y2+z2)即彳vl,v2间插值向量Vob.另一种变形形式是对四元数进行插值变换:s(w,v)p*q+b*r其中a=sin(alpha*(1-t)/sin(alpha),b二sin(alpha*t)/sin(alpha)cos(alpha)=xl*yl+yl*y2+zl*z2+wl*w2.s的虚部v即为vl和v2间的插勺量,乘以长度sqrt(x2+y2+z2)即得vl,v2间插值向量v。两种变换都可以。其中,Trot即饶任意轴旋转的矩阵变换矩阵。因为vl到v2间的插值一看成是vl饶垂直于vl,v2组成的平而的向量的旋转,所以实际上就是个饶转的问题,不过相应参数变成:theta=t*theta,轴q(ql,q2,q3)变成向量vlXv2/vlXv21二(yl*z2-zl*y2,zl*x2-xl*z2,xl*y2-yl*x2)/sin(theta)1度:基本和饶任意轴旋转矩阵的复杂度一样。主要是多了个向量叉积操作。cost=2*Tt+6*Tm+42*Tin二2*Tt+48*Tm

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号