最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

齐次坐标的理解

IT圈 admin 36浏览 0评论

2024年3月20日发(作者:堂慕雁)

齐次坐标的理解

一直对齐次坐标这个概念的理解不够彻底,只见大部分的书中说道“齐次坐标在仿射

变换中非常的方便”,然后就没有了后文,今天在一个叫做“三百年 重生”的博客上看到

一篇关于透视投影变换的探讨的文章,其中有对齐次坐标有非常精辟的说明,特别是针对

这样一句话进行了有力的证明:

“齐次坐标表示是计算机图形学的重要手段之一,它既能够

用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”——

F.S. Hill, J

R。

由于作者对齐次坐标真的解释的不错,我就原封不动的摘抄过来:

对于一个

向量

v以及基oabc,可以找到一组坐标(v1,v2,v3),使得v = v1 a + v2

b + v3 c (1)

而对于一个

p,则可以找到一组坐标(p1,p2,p3),使得 p – o = p1 a + p2 b

+ p3 c (2),

从上面对

向量

的表达,我们可以看出为了在坐标系中表示一个

(如p),我们把

点的位置看作是对这个基的原点o所进行的一个位移,即一个向量——p – o(有的书中

把这样的向量叫做

位置向量

——起始于坐标原点的特殊向量),我们在表达这个向量的同时

用等价的方式表达出了点p:p = o + p1 a + p2 b + p3 c (3)

(1)(3)是坐标系下表达一个

向量

的不同表达方式。这里可以看出,虽然都是用代数

分量的形式表达向量和点,但表达一个点比一个向量需要额外的信息。如果我写出一个代

数分量表达(1, 4, 7),谁知道它是个向量还是个点!

我们现在把(1)(3)写成矩阵的形式:v = (v1 v2 v3 0) X (a b c o)

p = (p1 p2 p3 1) X (a b c o),这里(a,b,c,o)是坐标基矩阵,右边的列向量分别是

向量v和点p在基下的坐标。这样,向量和点在同一个基下就有了不同的表达:

3D向量

的第4个代数分量是0,而

3D点

的第4个代数分量是1。像这种这种用4个代数分量表

示3D几何概念的方式是一种齐次坐标表示。

这样,上面的(1, 4, 7)如果写成(1,4,7,0),它就是个向量;如果是(1,4,7,1),它就是

个点。下面是如何在普通坐标(Ordinary Coordinate)和齐次坐标(Homogeneous Coor

dinate)之间进行转换:

(1)从普通坐标转换成齐次坐标时

如果(x,y,z)是个点,则变为(x,y,z,1);

如果(x,y,z)是个向量,则变为(x,y,z,0)

(2)从齐次坐标转换成普通坐标时

如果是(x,y,z,1),则知道它是个点,变成(x,y,z);

如果是(x,y,z,0),则知道它是个向量,仍然变成(x,y,z)

以上是通过齐次坐标来区分向量和点的方式。从中可以思考得知,对于平移T、旋转R、

缩放S这3个最常见的仿射变换,平移变换只对于点才有意义,因为普通向量没有位置概

念,只有大小和方向.

而旋转和缩放对于向量和点都有意义,你可以用类似上面齐次表示来检测。从中可以

看出,齐次坐标用于仿射变换非常方便。

此外,对于一个普通坐标的

P=(Px, Py, Pz),有对应的一族齐次坐标(wPx, wPy,

wPz, w),其中w不等于零。比如,P(1, 4, 7)的齐次坐标有(1, 4, 7, 1)、(2, 8, 14, 2)、

(-0.1, -0.4, -0.7, -0.1)等等。因此,如果把一个点从普通坐标变成齐次坐标,给x,y,z

乘上同一个非零数w,然后增加第4个分量w;如果把一个齐次坐标转换成普通坐标,把

前三个坐标同时除以第4个坐标,然后去掉第4个分量。

由于齐次坐标使用了4个分量来表达3D概念,使得平移变换可以使用矩阵进行,从

而如F.S. Hill, JR所说,仿射(线性)变换的进行更加方便。由于图形硬件已经普遍地支

持齐次坐标与矩阵乘法,因此更加促进了齐次坐标使用,使得它似乎成为图形学中的一个

标准。

以上很好的阐释了齐次坐标的作用及运用齐次坐标的好处。其实在图形学的理论中,

很多已经被封装的好的API也是很有研究的,要想成为一名专业的计算机图形学的学习者,

除了知其然必须还得知其所以然。这样在遇到问题的时候才能迅速定位问题的根源,从而

解决问题。

关于齐次坐标

按照通常使用的数学知识,二维平面上一个点可以用它在X、Y方向上的坐标来标示

为 P(x,y),但是在图形学中偏偏要‘画蛇添足’的使用齐次坐标,这样我们必须使用一

个三维向量来表示一个二维点即P(x,y,w),最后一个w就是那个‘足’。

why?

首先想像有个绝对不变的坐标系,记为W,然后以W为参照,建立两个坐标系O1

和O2, O1的原点在W的(1,1)处,O2的原点在W的(2,2)处。那么W中的一个点P(x,y)

在O1中将变为P(x-1,y-1),在O2中将是P(x-2, y-2),这样同一个点P在不同的坐标

系下就具有了不同的表示。这会产生一个问题:显然,P点在二维空间的位置是唯一的,

是与坐标系无关的,而不同坐标系下的表示看上去体现不了这种无关性。

The Key

我们使用的是坐标系这样一个概念,坐标系忽略了坐标原点所具有的重要意义:正是

原点标示了该坐标系处于哪个参照位置。如果用矩阵来表示一个二维坐标系,将会是如下

形式:

|1 0|

|0 1| ,其中(1 0)T表示一个基矢量,(0 1)T表示另一个基矢量,它们互相垂直,因

此能利用它们标记整个二维空间。

(x, y)|1 0| = (x, y)

|0 1|

这就是二维坐标的实际意义。

现在考虑将坐标原点(a,b)也引入到这个矩阵表示中来:

|1 0 |

|0 1 |

|a b |

我们用这个矩阵可以表示二维空间中任意位置的一个坐标系,当然,这个坐标系的基

矢量可以不为(0 1)T和(1 0)T,为了和坐标系区分,我们称这种新表示为标架表示。

好,问题来了,如果我们仍然用(x y)来表示点P,那么根据矩阵的乘法规则,我们

无法完成其乘法:mx N 的矩阵只能和 N xk的矩阵相乘。解决的办法就是: 给P点添一

个尾巴,这个尾巴通常为1:P(x y 1),这就是P的齐次坐标,利用新的齐次坐标和矩阵

相乘得到的结果为:

(x+a, y+b),这样同一个点在不同标架下的不同表示最终会得到同一个计算结果,它

反映了这样一个事实:同一个点在不同标架下的不同表示其实是等价的,这一点恰恰是使

用坐标系无法体现出来的。

显然上面那个 3x2的矩阵和P的齐次表示相乘得到的不是齐次坐标,所以应该将它扩

充成3x3的方阵:

|1 0 0|

|0 1 0|

|a b 1|

经过扩充以后的新矩阵具有一些有趣的特性:利用它可以非常轻松的实现平移、旋转

以及缩放和剪切变换。为什么要写这个呢,因为我们大部分时间只是不停的接收而不太愿

意去思考为什么,难得有人提了一下让我也顺便思考了一下,然后顺便把它记下来

---------------------------------------------------------------------------

所谓齐次坐标就是将一个原本是n维的向量用一个n+1维向量来表示。

在空间直角坐标系中,任意一点可用一个三维坐标矩阵[x y z]表示。如果将该点用一

个四维坐标的矩阵[Hx Hy Hz H]表示时,则称为齐次坐标表示方法。在齐次坐标中,最后

一维坐标H称为比例因子。

在OpenGL中,二维坐标点全看作三维坐标点,所有的点都用齐次坐标来描述,统一

作为三维齐次点来处理。每个齐次点用一个向量(x, y, z, w)表示,其中四个元素全不为零。

齐次点具有下列几个性质:

1)如果实数a非零,则(x, y, x, w)和(ax, ay, az, aw)表示同一个点,类似于x/y =

(ax)/( ay)。

2)三维空间点(x, y, z)的齐次点坐标为(x, y, z, 1.0),二维平面点(x,y)的齐次坐标为(x, y,

0.0, 1.0)。

3)当w不为零时,齐次点坐标(x, y, z, w)即三维空间点坐标(x/w, y/w, z/w);当w为

零时,齐次点(x, y, z, 0.0)表示此点位于某方向的无穷远处。

注意:OpenGL中指定w大于或等于0.0。

那么引进齐次坐标有什么必要,它有什么优点呢?

1.它提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到

另一个坐标系的有效方法。

2.它可以表示无穷远的点。n+1维的齐次坐标中如果h=0,实际上就表示了n维空间

的一个无穷远点。对于齐次坐标[a,b,h],保持a,b不变, 点沿直线 ax+by=0 逐渐走向

无穷远处的过程

2024年3月20日发(作者:堂慕雁)

齐次坐标的理解

一直对齐次坐标这个概念的理解不够彻底,只见大部分的书中说道“齐次坐标在仿射

变换中非常的方便”,然后就没有了后文,今天在一个叫做“三百年 重生”的博客上看到

一篇关于透视投影变换的探讨的文章,其中有对齐次坐标有非常精辟的说明,特别是针对

这样一句话进行了有力的证明:

“齐次坐标表示是计算机图形学的重要手段之一,它既能够

用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”——

F.S. Hill, J

R。

由于作者对齐次坐标真的解释的不错,我就原封不动的摘抄过来:

对于一个

向量

v以及基oabc,可以找到一组坐标(v1,v2,v3),使得v = v1 a + v2

b + v3 c (1)

而对于一个

p,则可以找到一组坐标(p1,p2,p3),使得 p – o = p1 a + p2 b

+ p3 c (2),

从上面对

向量

的表达,我们可以看出为了在坐标系中表示一个

(如p),我们把

点的位置看作是对这个基的原点o所进行的一个位移,即一个向量——p – o(有的书中

把这样的向量叫做

位置向量

——起始于坐标原点的特殊向量),我们在表达这个向量的同时

用等价的方式表达出了点p:p = o + p1 a + p2 b + p3 c (3)

(1)(3)是坐标系下表达一个

向量

的不同表达方式。这里可以看出,虽然都是用代数

分量的形式表达向量和点,但表达一个点比一个向量需要额外的信息。如果我写出一个代

数分量表达(1, 4, 7),谁知道它是个向量还是个点!

我们现在把(1)(3)写成矩阵的形式:v = (v1 v2 v3 0) X (a b c o)

p = (p1 p2 p3 1) X (a b c o),这里(a,b,c,o)是坐标基矩阵,右边的列向量分别是

向量v和点p在基下的坐标。这样,向量和点在同一个基下就有了不同的表达:

3D向量

的第4个代数分量是0,而

3D点

的第4个代数分量是1。像这种这种用4个代数分量表

示3D几何概念的方式是一种齐次坐标表示。

这样,上面的(1, 4, 7)如果写成(1,4,7,0),它就是个向量;如果是(1,4,7,1),它就是

个点。下面是如何在普通坐标(Ordinary Coordinate)和齐次坐标(Homogeneous Coor

dinate)之间进行转换:

(1)从普通坐标转换成齐次坐标时

如果(x,y,z)是个点,则变为(x,y,z,1);

如果(x,y,z)是个向量,则变为(x,y,z,0)

(2)从齐次坐标转换成普通坐标时

如果是(x,y,z,1),则知道它是个点,变成(x,y,z);

如果是(x,y,z,0),则知道它是个向量,仍然变成(x,y,z)

以上是通过齐次坐标来区分向量和点的方式。从中可以思考得知,对于平移T、旋转R、

缩放S这3个最常见的仿射变换,平移变换只对于点才有意义,因为普通向量没有位置概

念,只有大小和方向.

而旋转和缩放对于向量和点都有意义,你可以用类似上面齐次表示来检测。从中可以

看出,齐次坐标用于仿射变换非常方便。

此外,对于一个普通坐标的

P=(Px, Py, Pz),有对应的一族齐次坐标(wPx, wPy,

wPz, w),其中w不等于零。比如,P(1, 4, 7)的齐次坐标有(1, 4, 7, 1)、(2, 8, 14, 2)、

(-0.1, -0.4, -0.7, -0.1)等等。因此,如果把一个点从普通坐标变成齐次坐标,给x,y,z

乘上同一个非零数w,然后增加第4个分量w;如果把一个齐次坐标转换成普通坐标,把

前三个坐标同时除以第4个坐标,然后去掉第4个分量。

由于齐次坐标使用了4个分量来表达3D概念,使得平移变换可以使用矩阵进行,从

而如F.S. Hill, JR所说,仿射(线性)变换的进行更加方便。由于图形硬件已经普遍地支

持齐次坐标与矩阵乘法,因此更加促进了齐次坐标使用,使得它似乎成为图形学中的一个

标准。

以上很好的阐释了齐次坐标的作用及运用齐次坐标的好处。其实在图形学的理论中,

很多已经被封装的好的API也是很有研究的,要想成为一名专业的计算机图形学的学习者,

除了知其然必须还得知其所以然。这样在遇到问题的时候才能迅速定位问题的根源,从而

解决问题。

关于齐次坐标

按照通常使用的数学知识,二维平面上一个点可以用它在X、Y方向上的坐标来标示

为 P(x,y),但是在图形学中偏偏要‘画蛇添足’的使用齐次坐标,这样我们必须使用一

个三维向量来表示一个二维点即P(x,y,w),最后一个w就是那个‘足’。

why?

首先想像有个绝对不变的坐标系,记为W,然后以W为参照,建立两个坐标系O1

和O2, O1的原点在W的(1,1)处,O2的原点在W的(2,2)处。那么W中的一个点P(x,y)

在O1中将变为P(x-1,y-1),在O2中将是P(x-2, y-2),这样同一个点P在不同的坐标

系下就具有了不同的表示。这会产生一个问题:显然,P点在二维空间的位置是唯一的,

是与坐标系无关的,而不同坐标系下的表示看上去体现不了这种无关性。

The Key

我们使用的是坐标系这样一个概念,坐标系忽略了坐标原点所具有的重要意义:正是

原点标示了该坐标系处于哪个参照位置。如果用矩阵来表示一个二维坐标系,将会是如下

形式:

|1 0|

|0 1| ,其中(1 0)T表示一个基矢量,(0 1)T表示另一个基矢量,它们互相垂直,因

此能利用它们标记整个二维空间。

(x, y)|1 0| = (x, y)

|0 1|

这就是二维坐标的实际意义。

现在考虑将坐标原点(a,b)也引入到这个矩阵表示中来:

|1 0 |

|0 1 |

|a b |

我们用这个矩阵可以表示二维空间中任意位置的一个坐标系,当然,这个坐标系的基

矢量可以不为(0 1)T和(1 0)T,为了和坐标系区分,我们称这种新表示为标架表示。

好,问题来了,如果我们仍然用(x y)来表示点P,那么根据矩阵的乘法规则,我们

无法完成其乘法:mx N 的矩阵只能和 N xk的矩阵相乘。解决的办法就是: 给P点添一

个尾巴,这个尾巴通常为1:P(x y 1),这就是P的齐次坐标,利用新的齐次坐标和矩阵

相乘得到的结果为:

(x+a, y+b),这样同一个点在不同标架下的不同表示最终会得到同一个计算结果,它

反映了这样一个事实:同一个点在不同标架下的不同表示其实是等价的,这一点恰恰是使

用坐标系无法体现出来的。

显然上面那个 3x2的矩阵和P的齐次表示相乘得到的不是齐次坐标,所以应该将它扩

充成3x3的方阵:

|1 0 0|

|0 1 0|

|a b 1|

经过扩充以后的新矩阵具有一些有趣的特性:利用它可以非常轻松的实现平移、旋转

以及缩放和剪切变换。为什么要写这个呢,因为我们大部分时间只是不停的接收而不太愿

意去思考为什么,难得有人提了一下让我也顺便思考了一下,然后顺便把它记下来

---------------------------------------------------------------------------

所谓齐次坐标就是将一个原本是n维的向量用一个n+1维向量来表示。

在空间直角坐标系中,任意一点可用一个三维坐标矩阵[x y z]表示。如果将该点用一

个四维坐标的矩阵[Hx Hy Hz H]表示时,则称为齐次坐标表示方法。在齐次坐标中,最后

一维坐标H称为比例因子。

在OpenGL中,二维坐标点全看作三维坐标点,所有的点都用齐次坐标来描述,统一

作为三维齐次点来处理。每个齐次点用一个向量(x, y, z, w)表示,其中四个元素全不为零。

齐次点具有下列几个性质:

1)如果实数a非零,则(x, y, x, w)和(ax, ay, az, aw)表示同一个点,类似于x/y =

(ax)/( ay)。

2)三维空间点(x, y, z)的齐次点坐标为(x, y, z, 1.0),二维平面点(x,y)的齐次坐标为(x, y,

0.0, 1.0)。

3)当w不为零时,齐次点坐标(x, y, z, w)即三维空间点坐标(x/w, y/w, z/w);当w为

零时,齐次点(x, y, z, 0.0)表示此点位于某方向的无穷远处。

注意:OpenGL中指定w大于或等于0.0。

那么引进齐次坐标有什么必要,它有什么优点呢?

1.它提供了用矩阵运算把二维、三维甚至高维空间中的一个点集从一个坐标系变换到

另一个坐标系的有效方法。

2.它可以表示无穷远的点。n+1维的齐次坐标中如果h=0,实际上就表示了n维空间

的一个无穷远点。对于齐次坐标[a,b,h],保持a,b不变, 点沿直线 ax+by=0 逐渐走向

无穷远处的过程

发布评论

评论列表 (0)

  1. 暂无评论