DDG课程笔记1-外代数与外微分
这个系列是对CMU离散微分几何课程(CMU CS 15-458/858: Discrete Differential Geometry)的总结和回顾。课程涉及了离散曲面、曲率、曲面参数化、测地线、向量场等一系列几何处理相关内容。和常见的几何处理课程不同,这门课基本是基于离散外微分的框架来介绍几何处理的理论。因此在正式进入几何处理相关内容前首先来补充一些外代数和外微分的基础知识。
Exterior Algebra
Wedge Product
首先从向量出发。我们知道向量可以表示空间中一个同时具有大小和方向的量,一般可以用一个箭头来表示。外代数(exterior algebra)可以看成是对向量的推广,它表示一个带方向的「体积」,我们把它称为一个k-vector。比如说一个2-vector表示2个向量张成的平行四边形:
向量张成的运算称为wedge product。接下来我们来看一下wedge product的一些性质。由于k-vector是带方向的,交换向量\(u\),\(v\)会得到相反的结果:
wedge product的运算结果与顺序无关,即需要满足结合律:
同时,k-vector需要满足向量的平行四边形运算法则:
总结下来,对任意向量\(u, v, w \in \mathbb{R}^n\)以及标量\(a, b \in \mathbb{R}\), wedge product满足以下性质:
- 反对称性: \(u \wedge v = - v \wedge u\)
- 结合律: \((u \wedge v) \wedge w = u \wedge (v \wedge w)\)
- 对加法分配律: \(u \wedge (v + w) = u \wedge v + u \wedge w\)
- 对数乘分配律: \((a u) \wedge (b v) = ab(u \wedge v)\)
Hodge Star
接下来我们介绍外代数的Hodge star运算(\(\star\))。对于一个2-vector\((u \wedge v)\),我们定义\(w = \star(u \wedge v)\)为垂直于平行四边形且大小等于四边形面积的向量,即\(\star\)相当于正交补:
更加严格的定义如下:对于\(\mathbb{R}^n\)中的k-vector \(\alpha = e_1 \wedge e_2 \wedge \cdots \wedge e_k\),\(\star \alpha\)是一个(\(n-k\))-vector且满足:
\[\det{(\alpha, \star \alpha)} = 1\]根据这个定义我们可以发现在\(\mathbb{R}^2\)平面上\(\star\)相当于把向量逆时针转90\(^\circ\):
类似地,在\(\mathbb{R}^3\)中我们有:
\[\star 1 = e_1 \wedge e_2 \wedge e_3\] \[\star e_1 = e_2 \wedge e_3, \star e_2 = e_3 \wedge e_1, \star e_3 = e_1 \wedge e_2\] \[\star (e_2 \wedge e_3) = e_1, \star (e_3 \wedge e_1) = e_2, \star (e_1 \wedge e_2) = e_3\] \[\star (e_1 \wedge e_2 \wedge e_3) = 1\]Coordinate Representation
对于\(\mathbb{R}^n\)中的一组基\(e_1, e_2, ..., e_n\),它们通过wedge product构成了k-vector的基:
通过k-vector的基就可以进行k-vector之间的运算。比如说我们有\(\mathbb{R}^2\)上的2个向量\(\alpha = 2 e_1 + e_2\), \(\beta = -e_1 + 2e_2\):
\[\begin{aligned} \alpha \wedge \beta &= (2 e_1 + e_2) \wedge (-e_1 + 2e_2) \\ &= -2 e_1 \wedge e_1 + 4 e_1 \wedge e_2 - e_2 \wedge e_1 + 2 e_2 \wedge e_2 \\ &= 4 e_1 \wedge e_2 - e_2 \wedge e_1 \\ &= 5 e_1 \wedge e_2 \end{aligned}\]Differential Forms
Covector
有了k-vector的概念以后接下来的问题是如何去度量一个k-vector。要回答这个问题我们首先回到向量中,考虑如何去度量一个向量。在线性空间中我们可以使用另一个向量来度量我们已有的向量,比如说对于任意向量\(u\)可以通过一个单位向量\(\alpha\)去度量,它们的内积对应了\(u\)在\(\alpha\)上的度量:
这样的向量\(\alpha\)称为一个covector。下面给出covector更严格的定义:对于线性空间\(V\),它的对偶空间 \(V^*\) 定义为满足加法和数乘的线性函数\(\alpha: V \rightarrow \mathbb{R}\)的集合。即\(\forall \alpha, \beta \in V^* , u \in V, c \in \mathbb{R}\),
\[(\alpha+\beta)(u) = \alpha(u) + \beta(u)\] \[(c \alpha)(u) = c \alpha(u)\]对偶空间 \(V^*\) 中的元素称为dual vector或covector。
k-Form
接下来我们把covector的概念进行推广。正如covector是将向量映射到实数的线性映射,我们把将k-vector映射到实数的线性映射称为k-form。举个简单的例子,我们可以利用欧式空间下的内积来定义向量对应的1-form:
\[\alpha(u) = \sum_i \alpha_i u_i\]这和向量内积计算没有任何区别,唯一需要注意的是这里并不要求\(\alpha\)的长度为1。
然后考虑更高维度的k-form。对于2-form,我们把\((\alpha \wedge \beta)\)去度量\((u \wedge v)\)的过程记为\(\alpha \wedge \beta(u, v)\),它表示将\(u\)和\(v\)投影到\(\alpha\)和\(\beta\)对应平行四边形的面积(图中阴影部分):
为了计算所需的面积我们首先将\(u\)和\(v\)分别用\(\alpha\)和\(\beta\)进行投影:
- \[u \rightarrow (\alpha(u), \beta(u))\]
- \[v \rightarrow (\alpha(v), \beta(v))\]
然后计算投影后向量张成的平行四边形面积,得到如下的计算公式:
\[\alpha \wedge \beta(u, v) = \alpha (u) \beta (v) - \alpha (v) \beta (u)\]不难发现交换\(u\)和\(v\)或者\(\alpha\)和\(\beta\)都会得到相反的结果:
\[\alpha \wedge \beta(v, u) = \alpha (v) \beta (u) - \alpha (u) \beta (v) = - \alpha \wedge \beta(u, v)\] \[\beta \wedge \alpha(u, v) = \beta (u) \alpha (v) - \beta (v) \alpha (u) = - \alpha \wedge \beta(u, v)\]因此k-form具有某种反对称性。实际上k-form可以定义为具有多重线性和完全反对称性的函数,它将一个k-vector映射成一个标量:
- 多重线性:对任意维度保持线性,如
- 完全反对称性:交换输入维度相当于取反,如
k-form的通用计算公式如下:
\[(\alpha_1 \wedge \cdots \wedge \alpha_k)(u_1, \cdots, u_k) = \left| \begin{array}{cccc} \alpha_1(u_1) & \cdots & \alpha_1(u_k) \\ \vdots & \ddots & \vdots \\ \alpha_k(u_1) & \cdots & \alpha_k(u_k) \\ \end{array} \right|\]Differential Form
有了k-form的概念就可以来定义differential form了。简单来说,一个differential k-form就是对空间中的每一点指定一个k-form。比如说differential 0-form为空间中每一点指定了一个0-form,也就是标量;而differential 1-form则是为每一点指定了一个1-form:
不难发现differential 0-form和标量场没有什么区别,但需要说明的是differential 1-form和向量场是有本质区别的:空间中每一点对应的并不是一个向量,而是一个把向量映射成标量的线性函数。同时,我们可以用differential 1-form来度量任意给定的向量场进而获得一个标量函数,这个标量函数每一点的值对应该点向量场在相应「方向」上的「强度」:
本节最后来讨论一下坐标系中的differential form。首先定义\(\mathbb{R}^n\)上向量场的基为指向坐标轴正方向的单位向量构成的向量场,比如说\(\mathbb{R}^2\)上的基向量场分别为\(\frac{\partial}{\partial x^1}\)和\(\frac{\partial}{\partial x^2}\):
有了基向量场以后就可以对任意向量场进行分解,得到基的线性组合:
类似地,我们可以用坐标的函数来定义differential form的基\(dx^1\)和\(dx^2\):
接着,我们规定\(\frac{\partial}{\partial x}\)和\(dx\)满足kronecker delta性质:
\[dx^i \bigg( \frac{\partial}{\partial x^j} \bigg) = \delta_j^i = \left\{ \begin{aligned} 0, & & &i = j \\ 1, & & &\text{otherwise} \\ \end{aligned} \right.\]需要说明的是这里只是借用了偏导数(\(\partial\))和微分(\(d\))的记号,实际上并没有任何的求导运算,这里只需要把它们当成是基向量就好。有了这些基础就可以对向量场进行计算,比如说对于\(\mathbb{R}^2\)上的向量场\(X = (1-x) \frac{\partial}{\partial x} + (1-y) \frac{\partial}{\partial y}\)和differen 1-form \(\alpha = x dx\),把\(\alpha\)作用到\(X\)上可以得到标量函数\(\alpha (X)\):
\[\begin{aligned} \alpha (X) &= (x dx) \bigg( (1-x) \frac{\partial}{\partial x} + (1-y) \frac{\partial}{\partial y} \bigg) \\ &= (x dx) \bigg( (1-x) \frac{\partial}{\partial x} \bigg) + (x dx) \bigg( (1-y) \frac{\partial}{\partial y} \bigg) \\ &= x(1-x) \end{aligned}\]需要说明的是在各种参考资料中会把(几乎)所有的differen k-form简写成k-form,尽管有时会引起歧义但我们仍然沿用这种记法。
Exterior Derivative
Properties of Exterior Derivative
下面介绍本课程最重要的概念之一外微分(exterior derivative),这里直接给出外微分的定义:设\(\Omega^k\)是differential k-form构成的空间,外微分算子\(d: \Omega^k \rightarrow \Omega^{k+1}\)是一个线性映射,且满足如下性质:
- differential: 对于0-form,有\(d \phi(X) = D_X \phi\)
- product rule: 对于k-form \(\alpha\),\(d (\alpha \wedge \beta) = d \alpha \wedge \beta + (-1)^k \alpha \wedge d \beta\)
- exactness: \(d \circ d = 0\)
Differential
对于任意的0-form \(\phi\),它的(外)微分为:
\[d \phi = \frac{\partial \phi}{\partial x^1} d x^1 + \cdots + \frac{\partial \phi}{\partial x^n} d x^n\]回忆欧式坐标中梯度的定义:
\[\nabla \phi = \frac{\partial \phi}{\partial x^1} \frac{\partial}{\partial x^1} + \cdots + \frac{\partial \phi}{\partial x^n} \frac{\partial}{\partial x^n}\]可以发现求外微分类似于求梯度。但是外微分和梯度是不完全一致的:梯度依赖于内积的定义,而外微分与内积无关。换句话说,梯度需要通过内积来转换成外微分:
\[d \phi (\cdot) = \langle \nabla \phi, \cdot \rangle\]在欧式空间下二者不会有什么区别,但在其他的空间中则会导致一些差异。
Product Rule
product rule是外微分的运算法则,举个简单例子:设\(\alpha(x, y) = x dx + y dy\),对\(\alpha\)进行微分有
\[\begin{aligned} d \alpha &= dx \wedge dx + x \wedge d (dx) + dy \wedge dy + y \wedge d (dy) \\ &= dx \wedge dx + dy \wedge dy \\ &= 0 + 0 = 0 \end{aligned}\]Exactness
exactness则表明了外微分与求导的一个重要区别:我们总是可以对函数进行多次的求导,但对任意的k-form求两次微分即为0。
Stokes’ Theorem
接下来介绍本课程最重要的定理Stokes定理:
\[\int_\Omega d\alpha = \int_{\partial \Omega} \alpha\]Stokes定理说明对于任意的k-form \(\alpha\),它在边界\(\partial \Omega\)上的积分等于它的微分\(d \alpha\)在积分域\(\Omega\)的积分。
Stokes定理定理是非常强大的工具,我们可以通过它来规避掉大量的全局积分运算而只需要考虑边界。同时,微积分中的很多公式也可以看做是Stokes定理的特例:
- 高斯散度定理:\(\int_\Omega \nabla \cdot X dA = \int_{\partial \Omega} n \cdot X dl \Leftrightarrow \int_\Omega d \star \alpha = \int_{\partial \Omega} \star \alpha\)
- 格林定理:\(\int_\Omega \nabla \times X dA = \int_{\partial \Omega} t \cdot X dl \Leftrightarrow \int_\Omega d \alpha = \int_{\partial \Omega} \alpha\)
- 微积分基本定理:\(\int_a^b \frac{\partial \phi}{\partial x}dx = \phi(b) - \phi(a) \Leftrightarrow \int_{[a, b]} d \phi = \int_{\partial [a, b]} \phi\)
Discrete Exterior Derivative
Discretization
到这里我们已经有了足够的基础知识来学习几何处理了,但在那之前我们还需要考虑离散化(Discretization)的问题。我们知道计算机不能表示连续的对象,而且在几何处理中我们大部分时间都会去研究如何分析处理三角网格,因此我们需要把前面学习到的外代数和外微分的内容在网格上进行离散化。当然,经过离散化我们会不可避免地丢失掉一部分信息,不过剩下的信息也足够我们去解决很多问题了。
对于\(\mathbb{R}^n\)上的k-form \(\omega\),我们定义对应的离散形式为\(\omega\)在k维单纯复形\(\sigma\)积分,即
\[\hat{\omega}_\sigma = \int_\sigma \omega\]这样的从连续到离散的映射称为discretization map或de Rham map。简单来说,离散化就是对网格的顶点、边和面元赋予相应的值:
- 对于顶点取0-form在该点处的值:\(\int_p \phi = \phi(p)\);
- 对于边取1-form在边上的积分:\(\hat{\alpha}_e = \int_e \alpha = \int_0^L \alpha(T) ds\)
- 对于面取2-form在面元上的积分:\(\int_t \omega = \int_t \omega(T_1, T_2) dA\)
Discrete Exterior Derivative
不难发现想要精确地计算离散微分形式是非常困难的,不过幸运的是在实际应用中我们几乎不会显式地计算任何高阶的微分形式,相反我们会使用离散微分算子(Discrete Exterior Derivative)来帮助我们获得高阶的微分形式。
通过Stokes定理我们可以把k-form的积分转换为(k-1)-form的积分,因此对于1-form我们有:
\[(\widehat{d \phi})_e = \int_e d \phi = \int_{\partial e} \phi = \hat{\phi}_2 - \hat{\phi}_1\]也就是说,有向边\(e\)上1-form的积分等于顶点函数值的差。类似地,有向面上2-form的积分等于有向边积分的和:
\[(\widehat{d \alpha})_\sigma = \int_\sigma d \alpha = \int_{\partial \sigma} \alpha = \sum_{i=1}^3 \hat{\alpha}_i\]因此我们可以得到针对0-form和1-form的离散微分算子\(d_0\)和\(d_1\):
- \(d_0\)是一个\(\lvert E \rvert \times \lvert V \rvert\)的矩阵,将0-form转换成1-form;
- \(d_1\)是一个\(\lvert F \rvert \times \lvert E \rvert\)的矩阵,将1-form转换成2-form;
Discrete Hodge Star
最后我们来介绍一下Hodge star(\(\star\))的离散形式。定义离散Hodge star为(n-k)-form \(\star \alpha\)在dual cell上面的积分:
\[\widehat{\star \alpha} = \int_{\sigma^\star} \star \alpha\]其中\(\sigma^\star\)表示\(\sigma\)对应的dual cell。当\(\alpha\)比较光滑或者网格比较小的时候,\(\hat{\alpha}\)和\(\widehat{\star \alpha}\)只相差一个缩放:
\[\widehat{\star \alpha}(\sigma^\star) = \frac{\lvert \sigma^\star \rvert}{\lvert \sigma \rvert} \hat{\alpha}(\sigma)\]也就是说Hodge star仅仅是对k-form进行了一定的缩放,因此其矩阵形式为一对角矩阵:
在几何处理中常用的Hodge star算子如下:
- \(\star_0\):
- \(\star_1\):
- \(\star_2\):
最后,离散微分形式和相应的微分算子转换关系如下: