网站大量收购闲置独家精品文档,联系QQ:2885784924

形象解说四元数解决方案.doc

  1. 1、本文档共21页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
形象解说四元数 By daode1212 2016-03-16 前言: 四元数(Quaternions)是由爱尔兰数学家哈密顿(William Rowan Hamilton,1805-1865)在1843年发明的数学概念。四元数四元数的乘法不符合交换律(commutative law) 四元数理论创立人:William Rowan Hamilton,1805-1865 一,四元数的几种表示形式: OpenTK中,为建立四元数提供了多种方式: public Quaternion(float x, float y, float z, float w); public Quaternion(OpenTK.Vector3 v, float w); 例如用Quaternion(float x, float y, float z, float w): OpenTK.Quaternion q = new OpenTK.Quaternion(0.51f, -0.71f, 0.31f, 0.7071f); 1, 四元数建构方式一: ?? ?i^2=j^2=k^2=-1 ?? ?ij=-ji=k,jk=-kj=i,ki=-ik=j q=w+ix+jy+kz,i,j,k分别对应轴向量X(1,0,0),Y(0,1,0),Z(0,0,1) 2, 四元数建构方式二:转动角之半+轴向量的方向余弦: 3, 四元数建构方式三:转动角之半+单位球面上的点: 二,四元数的OpenTK中有: 1, q.Length; 返回值是: 2, q.LengthSquared; 返回值是:,与点积(内积)q·q是一致的。 三,四元数的 四元数建构方式二、方式三在这方面有明显优势。 四,四元数的S=(q+q*)/2; 2、四元数的向量部:V=(q-q*)/2; 五,四元数的四元数的bool b = q2.Equals(q1); 七,四元数的 Multiply( q,*) 加法的定义: public static OpenTK.Quaternion Add(OpenTK.Quaternion left, OpenTK.Quaternion right) 减法的定义: public static OpenTK.Quaternion Sub(OpenTK.Quaternion left, OpenTK.Quaternion right) 乘法有二种: public static OpenTK.Quaternion Multiply(OpenTK.Quaternion quaternion, float scale) public static OpenTK.Quaternion Multiply(OpenTK.Quaternion left, OpenTK.Quaternion right) 注意,乘法没有交换律:q2*q1 != q1*q2 乘法的定义和数学算法如下: 例如: 四元数与标量相乘,是对原四元数在正方向或反方向进行伸缩: OpenTK.Quaterniond q2 = OpenTK.Quaterniond.Multiply(q1, 0.5f); //q1*0.5 四元数与四元数相乘,是两种旋转的叠加作用: OpenTK.Quaterniond q3 = OpenTK.Quaterniond.Multiply(q2, q1); //q2*q1 q3 = q1·q2 = (a1a2-b1b2-c1c2-d1d2) + ????? i(a1b2+b1a2+c1d2-d1c2) + ????? j(a1c2+a2c1+b2d1-d2b1) + ????? k(a1d2+d1a2+b1c2-c1b2) 四元数与四元数相乘是不容易心算的游戏,就方向的变化也很难摸准,见下例: //向量连乘效果图: private void QuatMults() //向量连乘效果图 { qs[0] = new OpenTK.Quaternion(.5f, -.6f, -.7f, .4f); DwQuat(qs[0], Color.FromArgb(255, 255, 0), 4f); qs[1] = new OpenTK.Quaternion(-.6f, -.5f, .4f, .6f); DwQuat(qs[1], Color.FromArgb(0, 255, 255), 4f); for (int i = 0; i 255; i++)

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档