四元数,齐次坐标(转)
http://blog.sina.com.cn/s/blog_6e521a600100nigy.html
在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时,
3D中有很多地方都会提到四元数(Quaternion),其实是一个4D形式的向量。在《DirectX 9.0 3D游戏开发必成基础》(清华大学出版社),第一部分的“基本变换”一节中,有这么提到
为了能用代数方法来处理射影(或扩大)空间的几何问题,需要引进齐次坐标(有时还引进射影坐标)。 仍从欧氏(或仿射)平面开始。设在平面上已经建立了以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作为无穷远面,就得到扩大空间(见射影坐标)。
对于最后一个量取1或者取0的含义,有文字描述如下(参考资料3中摘录):
取三维射影空间为例,此时坐标形如 。无穷远平面通常被定为子集 ,在此平面之外总是可以同除以 ,因而无穷远平面的补集透过映射 等同于我们熟悉的三维仿射空间。
若我们试图考虑平面 与 的交集,则显然可先后导出 与 ,这告诉我们交集落在无穷远平面,其坐标形如 ,它事实上是连接 与 的直线。
也说明了我们在3D中用4D运算的时候,对点的变换需要用w=1,得到的点才是仿射空间中的坐标。
参考资料:
1、http://www.hudong.com/wiki/射影几何学
2、http://www.songho.ca/math/homogeneous/homogeneous.html
为防止2的链接丢失,原文复制如下(这幅图片非常好,说明了仿射/射影几何的研究对象):
Homogeneous Coordinates
Problem: Two parallel lines can intercept.
Railroad gets narrower and meets at horizon.
In Euclidean space (geometry), two parallel lines on the same plane cannot intercept, or cannot meet each other forever. It is a common sense that everyone is familiar with.
However, it is not true any more in projective space, for example, the train railroad on the side picture becomes narrower while it moves far away from eyes. Finally, the two parallel rails meet at the horizon, which is a point at infinity.
Euclidean space (or Cartesian space) describe our 2D/3D geometry so well, but they are not sufficient to handle the projective space (Actually, Euclidean geometry is a subset of projective geometry). The Cartesian coordinates of a 2D point can be expressed as (x, y).
What if this point goes far away to infinity? The point at infinity would be (∞,∞), and it becomes meaningless in Euclidean space. The parallel lines should meet at infinity in projective space, but cannot do in Euclidean space. Mathematicians have discoverd a way to solve this issue.
Solution: Homogeneous Coordinates
Homogeneous coordinates, introduced by August Ferdinand Möbius, make calculations of graphics and geometry possible in projective space. Homogeneous coordinates are a way of representing N-dimensional coordinates with N+1 numbers.
To make 2D Homogeneous coordinates, we simply add an additional variable, w, into existing coordinates. Therefore, a point in Cartesian coordinates, (X, Y) becomes (x, y, w) in Homogeneous coordinates. And X and Y in Cartesian are re-expressed with x, y and w in Homogeneous as;
X = x/w
Y = y/w
For instance, a point in Cartesian (1, 2) becomes (1, 2, 1) in Homogeneous. If a point, (1, 2), moves toward infinity, it becomes (∞,∞) in Cartesian coordinates. And it becomes (1, 2, 0) in Homogeneous coordinates, because of (1/0, 2/0) = (∞,∞). Notice that we can express the point at infinity without using "∞".
Why is it called "homogeneous"?
As mentioned before, in order to convert from Homogeneous coordinates (x, y, w) to Cartesian coordinates, we simply divide x and y by w;
Converting Homogeneous to Cartesian, we can find an important fact. Let's see the following example;
As you can see, the points (1, 2, 3), (2, 4, 6) and (4, 8, 12) correspond to the same Euclidean point (1/3, 2/3). And any scalar product, (1a, 2a, 3a) is the same point as (1/3, 2/3) in Euclidean space. Therefore, these points are "homogeneous" because they represent the same point in Euclidean space (or Cartesian space). In other words, Homogeneous coordinates are scale invariant.
Proof: Two parallel lines can intercept.
Consider the following linear system in Euclidean space;
And we know that there is no solution for above equations because of C ≠ D.
If C = D, then two lines are identical (overlapped).
Let's rewrite the equations for projective space by replacing x and y to x/w, y/w respectively.
Now, we have a solution, (x, y, 0) since (C - D)w = 0, ∴ w = 0. Therefore, two parallel lines meet at (x, y, 0), which is the point at infinity.
Homogeneous coordinates are very useful and fundamental concept in computer graphics, such as projecting a 3D scene onto a 2D plane.
1. 定义
域 上的 维射影空间中一点的齐次坐标通常写作 ,其中 不全为零。两组成比例的表法 与 ()被视为同一个坐标。
齐次坐标系可作如下解释:考虑一个 维的向量空间 ,透过选定 的基底引入坐标,则 中所有非零向量在等价关系 下形成的商集 由上述齐次坐标刻划;而这个商集无非就是射影空间。
2. 性质
射影空间 可以写成联集 ,其中
在任一 上,齐次坐标透过下述映射
化约为一般的 n 维仿射坐标。因此 。
3. 例子
取三维射影空间为例,此时坐标形如 。无穷远平面通常被定为子集 ,在此平面之外总是可以同除以 ,因而无穷远平面的补集透过映射 等同于我们熟悉的三维仿射空间。
若我们试图考虑平面 与 的交集,则显然可先后导出 与 ,这告诉我们交集落在无穷远平面,其坐标形如 ,它事实上是连接 与 的直线。
4. 方括号和圆括号
考虑 2 维投影空间: 在投影面上的点是在 3 维空间中点的投影。设符号
提及一个 3 维点。设
提及另一个 3 维点。则
在另一方面,设符号
提及 3 维点 (x : y : z) 的在投影面上的投影。点 [x : y : z] 可被认为等于属于穿过点 (x : y : z) 和 (0 : 0 : 0) 的 3 维直线的 3 维点的等价类。如果
是另一个投影点,则
两个 3 维点是等价的,如果它们在投影面上的投影是等同的:
所以,
注意: 在某些欧洲国家 (x:y:z) 通常表示为 (x,y,z);而 [u:v:w] 表示为 [u,v,w]。
5. 齐次坐标的加法
在方括号和圆括号之间的区别意味着齐次坐标的点的加法将以两种不同的方式来定义,依据坐标使用的是方括号还是圆括号。
再次考虑投影面的情况。一对 3 维点的加法同于普通坐标:
在另一方面,一对投影点的加法被定义为:
对于投影 3 维空间,类似考虑也适用。一对未投影的点的加法是
而一对投影点的加法是
6. 齐次坐标的标量乘法
有两类标量乘法: 分别给未投影点和投影点。
考虑标量 a 和未投影 3 维点 (x : y : z)。则
注意
即使
现在考虑标量 a 和投影点 [x : y : z]。则
所以
注意特殊情况 ,上述公式给出 [0:0:0] 作为结果。而它不表示任何点。实际上 是未定义的,所以它是定义中的瑕疵。
7. 用齐次坐标描述的点的线性组合
设 A 和 B 是投影 3 维空间中的一对点,它们的齐次坐标为
想要找到它们的线性组合 ,这里的 a 和 b 是可随意调整的系数,带有条件 ,或者(更精确的) ,来避免退化点。有三种情况要考虑:
- 两点都属于仿射 3 维空间,
- 两点都属于在无穷远的平面,
- 一个点属于仿射另一个点在无穷远。
X, Y, Z 坐标可以被认为是分子,而 W 坐标可以被认为是分母。要做齐次坐标的加法必须有公共分母。否则必须重新缩放坐标直到所有分母都是共同的。齐次坐标差任何一致重新缩放是等价的。
7. 1. 两点都是仿射的
如果两个点都在仿射 3 维空间中,则 且 。它们的线性组合是
7. 2. 两点都在无穷远
如果两个点都在无穷远面上。则 WA = 0 且 WB = 0。它们的线性组合是
7. 3. 一个点是仿射另一个在无穷远
设第一个点是仿射,因此 。则
这意味在无穷处的点是支配者。
7. 4. 一般情况
还可以不区分情况的进行计算,类似于两个点的加法:
以此为起点,你可以得到上述情况的公式。
特别是在退化情况下应用这个公式再次给出 与任何非 其他结果的求和。