您的位置:首页 > 其它

齐次坐标

2015-09-06 23:11 190 查看

最简单的想法是:在有点和向量混合的情况下,给定一个(x, y, z),我们不知道这个是向量还是点,所以引入齐次坐标(所谓齐次坐标就是用N+1表示N维量),最后一维用1就是点,0就是向量

在<<Focus on 3D models>>中,四元数主要是用来做rotation的。用四元数在此书中说有三点好处:
a, 能解决Gimbal Lock;
b, 能平滑的进行插值;
c,处理旋转比矩阵需要的空间小(旋转还可以用矩阵来表示,需要9个slot);

注意:四元数只有在是unit length的时候才能表示旋转。

在3D中我们常用4x4的矩阵,来配合3维空间的点的缩放、旋转、平移运算。因此是3维运算,但是用了4x4,所以我们称之为Homogeneous Matrix,更精确的说是Homogeneous Transformation Matrix。

有网友总结的齐次坐标的如下,个人觉得很容易理解,为防止链接失效,原文拷贝如下(下划线所示):
原文地址:http://blog.csdn.net/rabbitguiming/archive/2009/03/06/3964140.aspx

4D向量是由3D坐标(x,y,z)和齐次坐标w组成,写作(x,y,z,w)。
在3D世界中为什么需要3D的齐次坐标呢?简单地说明一下,在一维空间中的一条线段上取一点x,然后我们想转移x的位置,那我们应该是x'=x+k,但我们能使用一维的矩阵来表示这变换吗?不能,因为此时一维的矩阵只能让x点伸缩。但如果变成了一维的齐次空间[k 1]就很容易地做到。同样地,在二维空间中,某一图形如果不使用二维的齐次坐标,则只能旋转和伸缩,确不能平移。
     因此,我们在3D坐标中使用齐次坐标,是为了物体在矩阵变换中,除了伸缩旋转,还能够平移,如下运算:



 

既然了解了使用齐次坐标的意义,我们下一步就要了解一下齐次坐标w是什么意义。设w=1,此时相当于我们把3D的坐标平移搬去了w=1的平面上,4D空间的点投影到w=1平面上,齐次坐标映射的3D坐标是(x/w,y/w,z/w),也就是(x,y,z)。(x,y,z)在齐次空间中有无数多个点与之对应。所有点的形式是(kx,ky,kz,k),其轨迹是通过齐次空间原点的“直线”(其实每个点相当于3D的坐标世界)。
 
当w=0时,有很大的意义,可解释为无穷远的“点”,其意义是描述方向。这也是平移变换的开关,当w=0时,




此时不能平移变换了。这个现象是非常有用的,因为有些向量代表“位置”,应当平移,而有些向量代表“方向”,如表面的法向量,不应该平移。从几何意义上说,能将第一类数据当作"点",第二类数据当作"向量"。可以通过设置w的值来控制向量的意义[u]。”[/u]


原文地址:http://blog.sina.com.cn/s/blog_6e521a600100nigy.html
(解决了我对齐次坐标的理解问题。齐次,就是多了一维,可以这样理解吧?!)
另一位大大的原话“简单来说,n维向量的齐次空间是n+1维的。”,总结得很好

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: