【免费下载】四元数在3D中的应用

四元数在3D中的应用
[摘要]本课题主要研究了四元数在3D中的应用,通过对四元数和三维旋转的介绍,进一步了解了四元数和三维旋转。然后通过四元数在3D仿真物体模
型中的使用,最终经过多次验证,使用鼠标拖拽3D物体模型,旋转效果非常
ogc
高效和流畅。同时四元数方法很好的解决了欧拉角方法中容易出现的死锁现象。本课题采用3D模型进行四元数方法在3D模型旋转中的实验和验证,最终通过旋转效果图的展示以及在实验过程中的记录,验证了四元数方法在3D模
型旋转中效果的优良。
关键词:四元数;欧拉角;旋转;死锁
[ABSTRUCT] This topic mainly studies the quaternion in the application of 3 d, based on quaternion and an introduction to the 3 d spin, further understand the quaternion and 3 d rotation.Then through quaternion in the use of 3 d simulation object model, finally after many authentication, use the mouse to drag the 3 d object model, rotation effect is very efficient and smooth.Quaternion method is very good at the same time solve the deadlock in euler Angle method. This topic using quaternion method o
f 3 d model of torpedo and validation in rotation in the 3 d model experiment, ultimately through the rotating rendering display and record in the process of the experiment, the quaternion method in the 3 d model of good effect.
Key Words: Quaternions;Euler Angle;Rotation;Deadlock
引言
在3D图形学系统的开发和应用过程中,经常需要从不同的角度来观察3D 图形,如何使用鼠标对3D图形模型进行自由的旋转属于一个长期以来人们研
究的课题。Michael Chen曾经提出了一种虚拟球的方法,这种虚拟球的方法是将虚拟球表面的三维坐标用视口中的二维坐标来映射。因为鼠标本身来说属于一种二维的输入设备,如何利用二维的输入设备旋转3D图形是一个一般人难
以做到的事情。Michael Chen使用鼠标选中模型提出了附加Z轴的方法,光标在模型外的移动保证了模型将会绕着Z轴旋转,使用这种方法本质上就是基于固定的三个坐标轴进行旋转。虽然这种方法也实现了我们所需要的方位旋转,
但是它却无法实现将模型的旋转效果和鼠标的移动方向有效的关联起来。同时
使用这种方法还容易产生死锁现象。本文使用四元数法来表示模型方位,同时
使用OpenGL图形程序实现3D应用,展示四元数在3D中的应用。
1 四元数简介
四元数可以视为特殊的Clifford代数,属于复数的一种推广。四元数的研究要比复数和实数复杂和困难的多,因为四元数的乘法存在着不可交换性。在近
二十年的时间内,计算机动画、图像处理、计算机图形学等领域都已经开始应
用到了四元数的方法和理论。在3D旋转中使用四元数运算速度将会更快,同
时非常节省空间,进行插值就可以产生平滑的旋转效果。一个四元数描述的其
实就是一个旋转的角度和旋转的轴。当一个四元数乘以一个向量的时候,实际
螺旋选矿机上就是将该向量围绕该四元数的旋转轴,旋转四元数中的角度后,所获取到的
向量。
1.1 四元数记法
四元数通常情况下会定义为:q=w+x i+y j+z k,其中x、y、z代表虚数,w代
表实数。i、j、k之间存着的关系为:i * j = k = -j * i;i*i=-1;j * k = i = -k * j;j*j=-1;k * i = j = -i * k;k*k=-1。四元数也可以表示为q=[w,v]。其中v是矢量,w是标量。V属于四维空间中的矢量而不是想象中的三维空间中的矢量。四元数和轴、角之间的转换为:w = cos(theta/2);x = a x * sin(theta/2);y = a y * sin(theta/2);z = a z * sin(theta/2)。其中theta表示绕轴旋转的角度,(a x,a y,a z)表示轴的矢量。Theta属于极坐标下的角度,(a x,a y,a z)属于一个三维坐标下的矢量。
1.2 四元数运算
假设定义四元数q1和q2::q1 = w1 + x1 i + y1 j + z1 k;q2 = w2 + x2 i + y2 j + z2 k。那么这两个四元数的加法就可以表示为:q1 + q2 = (w1+w2) + (x1+x2) i + (y1+y2) j + (z1+z2) k。这两个四元数的乘法可以表示为:q1 * q2 =(w1*w2 - x1*x2 - y1*y2 - z1*z2) +(w1*x2 + x1*w2 + y1*z2 - z1*y2) i +(w1*y2 - x1*z2 + y1*w2 + z1*x2) j +(w1*z2 + x1*y2 - y1*x2 + z1*w2) k。
2 三维旋转简介
2.1 坐标系
在3D中,经常需要使用不同的坐标系来表示3D图形的方位情况,一般情况下,与3D旋转有关的坐标
系有物体坐标系和世界坐标系。物体坐标系是相
对于世界坐标系而言的。物体坐标系又叫局部坐标系,世界坐标系又叫全局坐标系。物体坐标系是与某一个特定的物体有关,也就是说对于每一个物体而言,它们又有其自己单独的坐标系,是随着自身方位的不同而改变的。然而,世界坐标系它的坐标轴的方向和坐标原点都是固定的。世界坐标系是其他所有坐标系的参考对象,通常用来描述3D场景中物体的位置关系。
2.2 表示方位的方法
在3D空间中,物体的朝向就是物体的方位,本课题所研究的四元数在3D 中的应用就是指的物体在3D空间中朝向的变化。在3D空间中角位移就是物体方位的变化量。在3D空间中,描述方位的方法主要有四元数和欧拉角。四元
数是有英国科学家提出的一种将复数从二维空间扩展到三维空间的方法。随着计算机图形学的发展,四元数越来越受到科研界的重视。使用四元数来表示物体方位是通过保存轴角对的方法,如四元数Q= [cos(θ/2),sin(θ/2)n],n表示旋转轴,θ表示绕旋转轴旋转的角度,四元数Q就表示该方位。欧拉角是最常用的表示物体方位的方法,欧拉角包括三个角度分量。使用欧拉角的方法比使用最基础的矩阵形式方法节约了不少的内存空间,而且欧拉角方法比较直观,然而当旋转角度为90°的时候,会产生死锁现象,也就是旋转自由度减少的现象。如果两个欧拉角插值属于90°的时候,旋转路径也有可能出现差错。
欧拉角旋转的原理就是将旋转拆分成三次旋转,分别绕着相互垂直的三个坐标轴进行旋转。
3 四元数法在3D图形旋转中的应用
3.1 原理
国家公司本课题通过实现鼠标对3D图形的拖拽操作,实现3D图形的旋转,来说明四元数法在3D图形旋转中的应用。如何通过鼠标这种二维输入设备精确有效
的旋转3D场景的物体模型一直属于一个热门研究问题。鼠标仅仅能够提供来
自两个方向的自由度。但是3D场景物体模型的旋转操作必须要有有三个自由
度才能进行操作。因此,如果我们实现3D物体模型绕X轴的旋转采用沿屏幕
坐标系Y轴的移动来实现,3D物体模型绕世界坐标轴Y、Z的平分轴来旋转采
用光标沿屏幕坐标系X轴的移动来实现,虽然比较方便的获取了所需要的方位,但是却极其容易产生死锁现象导致旋转效果无法完美流畅。本课题的3D模型
方位采用四元数来表示。多次旋转采用四元数的乘法将其连接起来。这样四元数所表示的旋转工作,
实际上就是有欧拉角方法的三次旋转进行合并而形成的。这样就很好的解决了使用欧拉角旋转时所出现的死锁现象,实现了3D模型的
有效、精确旋转。
3.2 方法
本课题使用了面向对象的方法和OpenGL的图形库。通过本课题的不断模
拟实验,采用四元数法很好的改善了万向节死锁的现象,同时3D模型的旋转
也变的更加高效、顺畅。本课题采用的3D模型为模型。利用四元数的方
战地进行曲
法进行球面线性插值。模型的姿态序列运动可视化的过程可以使用中间帧插值的方法。对模型的两个关键的帧进行插值。本课题求解的运动方程采用数值法得到在运动过程中若干个时间点的姿态角参数。开始数据使用欧拉角的形式存储,然后把试验中获取到的所有数据使用四元数形式进行转换,得到四元数的序列,然后在对这个四元数序列进行优化插值方法,最终得到需要的四元数姿态序列。模型的平滑运动就是需要从四元数姿态序列中提取的旋转数据。
3.3 结果
通过四元数的方法最终产生的3D模型的旋转效果图如图1所示。
图1 不同时刻旋转效果图
薄洁莹4 总结
本课题主要研究了四元数在3D中的应用,首先通过对四元数和三维旋转
的介绍,让我们更加了解了四元数和三维旋转。进而通过四元数在3D图形旋
转中的多次验证,说明了四元数方法对于3D物体模型的旋转有重要的意义,sem扫描电子显微镜
它很好的解决了旋转过程中的死锁现象,同时让旋转的效果更加流畅和高效。
参考文献
[1] Fletcher Dunn, Ian Parberry. 3D 数学基础:图形与游戏开发[M]. 史银雪, 陈洪, 王荣静, 译. 北京: 清华大学出版社, 2005.
[2] 刘俊峰. 三维转动的四元数表述[J]. 大学物理, 2004, 23(4): 39-43.[3] 关东东, 关华勇, 傅颖. 一种3 维动画中间帧非线性插值算法[J].中国图像图形学报, 2006, 11(12): 1820-1826.
[4] Richard S Wright Jr, Benjamin Lipchak. OpenGL 超级宝典[M]. 徐波译. 北
京: 人民邮电出版社, 2005.
[5] 许万荣, 樊自田. OpenGL 中交互式任意旋转三维场景的实现[J].计算机应用, 2006, B06: 147-148.

本文发布于:2024-09-21 00:34:18,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/532234.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:旋转   方法   模型   使用
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议