about homogeneous coordinates


这一篇博客是很无聊的东西,随便想的,毫无意义胡说八道

动机:图形学课中讲到了齐次坐标,提到它对于区分点和向量的重要作用,这里我并不太明白设计它的 motivation 或者出发点。

这里我胡乱思考一下这个东西

confusion

齐次坐标是一种能够区分点和向量的一个对仿射空间中的元素的表达方式。实质上对于点和向量两者确有本质上的不同,其他书上也有这方面的讲解(我之前看过一本书的一点点,Vector Calculus, Linear Algebra, and Differerntial Forms A Unified Approach,最开始提到过这一点),点相加是没有意义的,两个点相减表示向量是合理的。至于 \(P=\alpha_1 P_1+ \alpha_2 P_2+\dots+\alpha_n P_n\) 本质上还是将点先转化成了向量,再做运算,这是线性代数里的思路,就是欧氏空间中的点认为是向量,这里把他看作是点可能是不同学科的定义或想法不同吧。

有点吹毛求疵、钻牛角尖了。下面开始从另一个角度解释吧。

仿射空间

这里,欧氏空间中的点,我都看作是向量了,名副其实的向量,向量空间里的向量。

假设我们有一个仿射集合 C,任取里面的一个元素 v,我们会发现 \(C - v = \{x-v|x\in C\}\) 是个向量空间。

齐次坐标形式上是 \((x_1,x_2,\dots,x_n,w)\)\(R^{n+1}\) 中的东西,我们尝试赋予 w 一个含义。

\(A\)\(R^{n+1}\) 的一个 n 维的子空间,如 \(R^n\),取单位向量 v 为\(A^\perp\),即 A 的正交补(其实 v 可以随便取),那么 v + A 就是一个仿射集合。我们不妨就称这个仿射集为 C 吧。

\(R^{n+1}\) 空间中,从 v 出发,利用施密特过程,构造 n + 1 个规范正交基 (单位向量,两两正交),它们分别是 \(\{v, e_1,\dots,e_n\}\),其中 \(\{e_1,\dots,e_n\}\) 是 A 的基。任意 \(R^{n+1}\) 中的点都可以表示为 \(x=\alpha_0 v+\alpha_1 e_1 + \dots + \alpha_n e_n\),把 \(\alpha_0\) 放到最后,写成坐标形式(其实一般只有在标准基下才会有坐标), \(\begin{pmatrix} \alpha_1\\ \vdots\\ \alpha_n\\ \alpha_0 \end{pmatrix}\)

w 就是这里的 \(\alpha_0\),但注意,实质上我想让齐次坐标表示 C 这个仿射集合,所以 w 应当取 1 。

世界线收束

取 A 为 \(R^n\) (这里n=3了)

我们定义 C 中的元素为 "点",A 中的元素为 "向量"。我们最终考虑的空间变成了 \(R^n\times \{0,1\}\),最后一维的 0 和 1 因此就成了 点 和 向量 的一个 indicator。这样很丑,因为一个连续的东西后面跟了一个小的离散的东西。不得已的,我们的表示允许扩展到 \(R^{n}\times R\),但还是要对最后一维做一个 normalization,也就是需要投影到我们这个丑陋的小空间中去。

舒服一点了。。。

回到开始的 confusion 部分,为啥 \(P=\alpha_1 P_1+ \alpha_2 P_2+\dots+\alpha_n P_n\) 它很对呢,当用上述定义代入坐标去算时,P 的 w 是 1 。

那什么又叫有意义的表达式呢(如 \(P-2\times V+Q\)),算完之后在 \(R^n\times \{0,1\}\) 中即可。

注:这里的例子 \(P-2\times V+Q\) 可以分解为 \(P-V-V+Q=(P-V)+(Q-V)\),若不按我们上面的定义去想似乎也能解释的通,两个点的差是向量嘛。但。。。我觉得很不好(又牛角尖了),又是交换律,又是结合律,最初的式子化到最后,过程中明显不是把它当 点 看的。

性质对应

这样把坐标中的每一位赋予含义后,一些性质变得更加自然了。

仿射变换

\[\begin{pmatrix} a_{1,1}&a_{1,2}&a_{1,3}&b_1\\ a_{2,1}&a_{2,2}&a_{2,3}&b_1\\ a_{3,1}&a_{3,2}&a_{3,3}&b_1\\ 0&0&0&1\\ \end{pmatrix} \times \begin{pmatrix} x_1\\ x_2\\ x_n\\ w \end{pmatrix} \]

\(w=0\) 意味着我想做 A 这个向量子空间的变换,做的就是线性变换;若 \(w=1\),意味着,我想做 C 这个仿射空间的变换,得到的就是仿射变换。(其实线性变换包含于仿射变换,忽略这一点吧。。。)

关于 normalization

前面提到了扩展我们的表示到 \(R^n\times R\),然后做一个变换,这里说的很含糊,我其实也不太懂为什么齐次坐标里说好的 0 表示 向量,1 表示 点,然后又整出个 (x,y,w) 先变成 (x/w,y/w,1) 然后说表示的点是 (x/w,y/w),但还好。

对于这一步,其实有一个有点点相关的东西叫 perspective function,\(P:R^n\times R_{++}\rightarrow R^n\)

\[ P(z,t)=z/t \]

保凸的。

进一步的,有个 Linear-fractional function

\[ f(x)=\frac{Ax+b}{c^Tx+d} \]

其中 \(A\in R^{m\times n}\)\(dom\; f=\{x|c^Tx+d>0\}\),就是 P 跟一个仿射变换 \(g(x)=\begin{bmatrix} A\\c^T \end{bmatrix} x + \begin{bmatrix} b\\d \end{bmatrix}\) 的复合。

保凸的。。。

智障的总结

这真的是很无聊的东西,可能是我有点强迫症吧,不太喜欢看上去不系统化的、无根无源、的东西。比如现在的深度学习,尽管都看着很玄学,但在当下很多重要的模型中,我们都能在很早之前的文章中找到一些影子,那时还是都在做机器学习、统计学习,这就让人觉得有根可循,有可能能建立起一套理论。说多了。其实跟这个文章没啥关系。。。

虽然但是,我觉得齐次坐标还是非常方便、有用的,在几何变换上对仿射变换和线性变换做到了形式上的统一。


Update:是我浅薄了。。。

齐次坐标应该不是我之前这么理解的。。。

就和那个perspective function 一样,可以看作是对 \(R^{n+1}\) 空间做了一个 P 映射。记 codomain 为 B=\(R^n\),domain 为 A=\(R^{n+1}\),点 \(x\in B\) 的齐次坐标是一个等价类 \(\{t\in A|P(t)=x\}\)

用同一个齐次坐标表达的是同一个点,那么欧氏空间 \(R^n\) 中的一个无穷远处的点(必须是沿着某条线的方向无穷大的,也就是坐标间需要满足某个恒定的线性关系,到处乱飞的无穷大不可以)可以找到它的一个齐次坐标(w 置为 0),实质上是唯一的。其他点之所以做了什么normalization,是因为他们是等价的,是同一个齐次坐标。

诚如老师所讲,笛卡尔无穷远处的点称作向量,有限坐标为点。

还是很有意思的。


Comments