齐次空间 放射变换

http://blog.csdn.net/rabbitguiming/article/details/3964140

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的值来控制向量的意义

 

。在《DirectX 9.0 3D游戏开发必成基础》(清华大学出版社),第一部分的“基本变换”一节中,有这么提到


前面我们提到讲某一点的坐标或某一向量的各分量放入一个1x4的行向量v中。但是我们所关心的点和向量都是3D的!为什么我们要使用1x4的行向量?为了使向量-矩阵乘积有意义,我们必须将3D的点或向量扩展为4D行向量,因为一个1x3的行向量和一个4x4矩阵是无法定义乘法运算的。

接下来的一段这么说,

“那么我们应该如何使用第4个分量(用w表示)?将点放入一个1x4的行向量时,我们将w分量设为1。这能够保证点的平移变换正确进行。因为向量不含位置信息,所以没有对向量定义平移变换,任何企图对向量实施平移变换的运算只能产生一个毫无意义的向量。为了防止对向量进行平移变换,当我们将1x3向量置入1x4行向量时,将w分量置为0。”

上面的一段说明了最后一个分量什么时候该用0。

后面更有这么一段文字说明,很有启发性,

“当我们将点(x,y,z)写作(x,y,z,1)的形式时,从技术角度,我们实际上在4D空间中用一个4D平面(w=1)来描述3D空间。(注意:4D空间中的平面是3D的,就像3D中的平面式一个2D空间一样)。所以,当我们将w设为某个值时,我们便偏离了平面w=1。为了重新映射回该平面(对于我们熟悉的3D空间),我们只需将齐次向量的每个分量除以w。”

对于上面的4D到3D的所谓映射,正是齐次坐标的功力所在。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值