- 1、本文档共21页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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++)
您可能关注的文档
- 项目定位的四个方法解决方案.doc
- 项目定位模板-1-17解决方案.doc
- 项目二,任务十三三相异步电动机的制动解决方案.doc
- PETS1Unit15ObeyingtheTrafficLaws解答.ppt
- PeopleSoftHCM和SAPHR客户化解答.ppt
- PD产品开发流程解答.ppt
- 项目二前厅服务基本技能实训解决方案.doc
- 项目风险管理作业题解决方案.doc
- PDCA产科解答.ppt
- pc安装流程解答.ppt
- 2025年网络文学平台版权运营模式创新与版权保护体系构建.docx
- 数字藏品市场运营策略洞察:2025年市场风险与应对策略分析.docx
- 全球新能源汽车产业政策法规与市场前景白皮书.docx
- 工业互联网平台安全标准制定:安全防护与合规性监管策略.docx
- 剧本杀剧本创作审核标准2025年优化与行业自律.docx
- 2025年新能源电动巡逻车在城市安防中的应用对城市环境的影响分析.docx
- 全渠道零售案例精选:2025年行业创新实践报告.docx
- 2025年网约车司乘纠纷处理机制优化与行业可持续发展报告.docx
- 2025年宠物烘焙食品市场法规政策解读:合规经营与风险规避.docx
- 2025年宠物行业数据安全监管政策影响分析报告.docx
文档评论(0)