什么是齐次空间

如题所述

第1个回答  2017-03-19
就这个上下文来看俺猜应该指的是投射空间(Projective Space)?就是(R^4-{0})/~,其中~的等价关系定义成向量A~向量B当且仅当它们相差一个标量(i.e. A=c*B for c\in R)
简单来说,n维向量的齐次空间是n+1维的。
在OpenVG 这种二维矢量图形加速接口中,规定二维齐次空间坐标系就是一个三维空间。把N维映射到N+1维就是为了能够在高纬度做变换然后在映射到低纬度空间上。

比如,在OpenVG中,要变换一个二维图形,比如是个二维的字母,首先把他变换到三维空间,然后做各种旋转或者拉伸,然后在映射到二维空间上,从而使得二维图像也可以有一些简单的三维特效。

最简单的想法是:在有点和向量混合的情况下,给定一个(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的值来控制向量的意义。”
3D中有很多地方都会提到四元数(Quaternion),其实是一个4D形式的向量。在《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的所谓映射,正是齐次坐标的功力所在。
在<<Character Animation With Direct3D>>中, P117对四元数的解释相当的容易理解和实用

In the example of rotating a-radians around Axis A (x, y, z), the quaternion for
this would be:

q = cox(a/2), x•sin(a/2), y•sin(a/2), z*sin(a/2)
所谓齐次坐标表示法就是用n+1维向量表示一个n维向量。

这个概念是射影几何需要解决问题的时候引出来的,在射影学里,如下定义:

为了能用代数方法来处理射影(或扩大)空间的几何问题,需要引进齐次坐标(有时还引进射影坐标)。 仍从欧氏(或仿射)平面开始。设在平面上已经建立了以O为原点的直角(或仿射)坐标系,(x,y)为一点p 的坐标。令则比值x0:x1:x2完全确定p 的位置,(x0,x1,x2)就叫做p的齐次(笛氏)坐标。原点的齐次坐标显然可以写成(1,0,0)。设p不是原点O,则x1,x2不同时等于零;再令x1,x2固定,而令x0向0接近,则p点沿一条经过O而斜率为x2:x1的直线l向远方移动。设表示扩大直线l上的无穷远点,则可以认为,当x0趋于O 时,p趋于。因此,可以把(0,x1,x2)作为的齐次坐标,特殊地,(0,1,0)和(0,0,1)依次是x轴和y 轴上无穷远点的齐次坐标。这样,每一组不同时为零的三个数x0,x1,x2 都是扩大平面上一点的齐次坐标,而若ρ 为不等于零的数,则(ρx0,ρx1,ρx2)和(x0,x1,x2)代表同一点,下面引进记号(x)=(x0,x1,x2),ρ(x)=(ρx0,ρx1,ρx2)。
设 (u1,u2不都是0)是欧氏(或仿射)平面上一条直线的方程。在用齐次坐标表示时,它可以写成
, (1)
这也就是扩大直线的齐次方程,这直线上的无穷远点是(0,u2,-u1)。扩大平面上的无穷远直线方程显然可以写成x0=0。这样,每一个齐次线性方程都代表扩大平面上一条直线。由于比值u0:u1:u2完全确定直线,(u)=(u0,u1,u2)就叫做(齐次)线坐标。为了区别两种齐次坐标,上面引进的(x)=(x0,x1,x2)就叫做(齐次)点坐标。方程(1)叫做点(x)和线(u)的关联条件或接合(即(x)在(u)上,或(u)经过(x))条件。 当不区别无穷远元素和非无穷远元素,使扩大平面成为射影平面时,(x)和(u)就依次成为射影平面上的齐次点坐标和线坐标,它们都可以看作射影坐标的特款。与此类似,可以得到扩大或射影直线上的点坐标(x)=(x0,x1)以及扩大或射影空间的点坐标(x)=(x0,x1,x2,x3)和面坐标(u)=(u0,u1,u2,u3)。在扩大或射影空间中,点(x)和面(u)的关联条件是 下面,除非特别指明,所讨论的空间,就是三维射影空间,所讨论的点、线、面都是射影空间里的点,射影直线和射影平面。在射影空间,指定一个平面x0=0作为无穷远面,就得到扩大空间(见射影坐标)。

取三维射影空间为例,此时坐标形如 。无穷远平面通常被定为子集 ,在此平面之外总是可以同除以 ,因而无穷远平面的补集透过映射 等同于我们熟悉的三维仿射空间。
若我们试图考虑平面 与 的交集,则显然可先后导出 与 ,这告诉我们交集落在无穷远平面,其坐标形如 ,它事实上是连接 与 的直线。

也说明了我们在3D中用4D运算的时候,对点的变换需要用w=1,得到的点才是仿射空间中的坐标。
相似回答