一、齐次坐标的理解
“齐次坐标表示是计算机图形学的重要手段之一,它既能够用来明确区分向量和点,同时也更易用于进行仿射(线性)几何变换。”—— F.S. Hill, JR。
-
向量
对于一个向量
v
以及基
oabc,可以找到一组坐标
(v1,v2,v3),使得
v
=v1a
+v2b
+v3c
(1)
-
点
而对于一个点
p,则可以找到一组坐标
(p1,p2,p3),使得
p−o=p1a
+p2b
+p3c
(2)
从上面对向量和点的描述,可以看出为了在坐标系中表示一个点,可把点的位置看作是对这个基的原点
o所进行的一个位移,即一个向量
p–o(有的书中把这样的向量叫做位置向量,起始于坐标原点的特殊向量)。
参考向量的描述形式,修改点的描述方程:
p=o+p1a
+p2b
+p3c
(3)
(1)(3)是坐标系下向量和点的描述方式,这里可以看出,虽然都是用代数分量的形式表达向量和点,但描述一个点比一个向量需要额外的信息。如果写出一个代数分量(1, 4, 7),我们无法分辨其是向量或者点。
我们现在把(1)(3)写成矩阵的形式:
v
=[v1v2v30]×⎣⎢⎢⎡abco⎦⎥⎥⎤p=[v1v2v31]×⎣⎢⎢⎡abco⎦⎥⎥⎤
这里
(a,b,c,o)T是坐标基矩阵,右边的列向量分别是向量
v
和点
p在基下的坐标。这样,向量和点在同一个基下就有了不同的表达:
- 三维坐标下向量的第4个代数分量是0
- 三维坐标下点的第4个代数分量是1
像这种这种用4个代数分量表示三维几何概念的方式即为一种齐次坐标表示。
下面为在普通坐标(Ordinary Coordinate)和齐次坐标(Homogeneous Coordinate)之间进行转换:
- 普通坐标转换到齐次坐标
- 点:
(x,y,z)→(x,y,z,1)
- 向量:
(x,y,z)→(x,y,z,0)
- 齐次坐标转换到普通坐标
- 点:
(x,y,z,1)→(x,y,z)
- 向量:
(x,y,z,0)→(x,y,z)
二、齐次坐标在变换中的应用
在欧氏变换中一般有两种操作:旋转和平移。如果我们想要将向量
a
进行一个标准的欧氏变换,一般是先用旋转矩阵
R进行旋转,然后再用向量
t进行平移,结果为:
a′=R∗a+t
在单次变换下这种操作没有问题,但在连续的欧氏变换下,会有多次连续的旋转和平移,假设我们对向量
a
进行了两次欧氏变换,分别为
R1,t1和
R2,t2,分别得到:
b=R1∗a+t1c=R2∗b+t2
最终变换结果为
c=R2∗(R1∗a+t1)+t2
显然,这样的变换在经过多次后会变的越来越复杂,造成这一问题的原因为上述表达方式并不是一个线性的变换关系,平移
t为加法。
此时使用齐次坐标,可以将加法转化为乘法,方便地表达平移:
-
非齐次下的平移变换:
[u′v′]=[u+tuv+tv]
-
齐次下的平移变换:
⎣⎡u′v′1⎦⎤=⎣⎡100010tutv1⎦⎤⎣⎡uv1⎦⎤
采用齐次后的坐标变换为:
[a′1]=[R0t1][a1]=T[a1]
采用齐次后旋转和平移可以用一个矩阵
T来表示,该矩阵称为变换矩阵(transform matrix),这样欧氏变换就变成了线性关系,进行多次欧氏变换只需要连乘变换矩阵即可。
参考
关于齐次坐标的理解
齐次坐标的理解
从零开始一起学习SLAM | 为什么要用齐次坐标?