专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > 图形/图像

示意转动的四元素法为什么用半角

发布时间:2011-06-27 20:15:49 文章来源:www.iduyao.cn 采编人员:星星草
表示转动的四元素法为什么用半角?
网上讨论四元素法表示转动的文章不少,但似乎总不能讲清楚。例如在CSDN上有

http://blog.csdn.net/pizi0475/article/details/6261679

其中谈到:



四元数一般定义如下:

q=w+xi+yj+zk

其中w是实数,x,y,z是虚数,其中:

i*i=-1

j*j=-1

k*k=-1

也可以表示为:

q=[w,v]

其中v=(x,y,z)是矢量,w是标量,虽然v是矢量,但不能简单的理解为3D空间的矢量,它是4维空间中的的矢量,也是非常不容易想像的。

四元数也是可以归一化的,并且只有单位化的四元数才用来描述旋转(面向),四元数的单位化与Vector类似,

首先||q|| = Norm(q)=sqrt(w2 + x2 + y2 + z2)

因为w2 + x2 + y2 + z2=1

所以Normlize(q)=q/Norm(q)=q / sqrt(w2 + x2 + y2 + z2)

说了这么多,那么四元数与旋转到底有什么关系?我以前一直认为轴、角的描述就是四元数,如果是那样其与旋转的关系也不言而喻,但并不是这么简单,轴、角描述到四元数的转化:

w = cos(theta/2)

x = ax * sin(theta/2)

y = ay * sin(theta/2)

z = az * sin(theta/2)

其中(ax,ay,az)表示轴的矢量,theta表示绕此轴的旋转角度,为什么是这样?和轴、角描述到底有什么不同?这是因为轴角描述的“四元组”并不是一个空间下的东西,首先(ax,ay,az)是一个3维坐标下的矢量,而theta则是级坐标下的角度,简单的将他们组合到一起并不能保证他们插值结果的稳定性,因为他们无法归一化,所以不能保证最终插值后得到的矢量长度(经过旋转变换后两点之间的距离)相等,而四元数在是在一个统一的4维空间中,方便归一化来插值,又能方便的得到轴、角这样用于3D图像的信息数据,所以用四元数再合适不过了。


我看不懂后面一段的意思,也不知道为什么不用theta全角,而用theta/2?

------解决方案--------------------
使用四元数替代由欧拉角的三月组,主要是因为在三元组中做插值会遇到无法解决的“万向锁”问题。

四元数的产生是和复数相关的,它实际可以理解为是1个实部和三个虚部组成的复数:

[w , (x,y,z)] = [cos(alfa), (ax, ay, az)sin(alfa)];
从四元组推导对应的欧拉角为:
p= asin(...); h = atan(...); b = atan(...);
如果alfa = theta;由于asin和atan的值域为[-90, 90]不能覆盖所有角度。
所以采用alfa = theta / 2;

所以很多标准的复数性质可以应用到四元数上,四元数之间可以平滑插值是它替代欧拉角的主要原因。

------解决方案--------------------
这样的问题多半是出于使用过程中积累的经验,有时候你偏要问个问什么还不好回答。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: