这个系列是MIT 6.838: Shape Analysis的同步课程笔记。本课程会介绍几何方法在图形学、机器学习、计算机视觉、医疗图像以及建筑设计等相关领域的原理和应用。本节主要介绍曲面上的向量场。
Why Vector Fields?
在本课程中向量场(vector fields)主要是指曲面上的切向量场(tangent vector fields)。在图形学中像是模型的毛发、纹理甚至是网格的生成都可以基于向量场来实现。
![](https://search.pstatic.net/common?src=https://i.imgur.com/yAECzGe.png)
除此之外,向量场在物理仿真以及PDE等领域也有大量的应用。
![](https://search.pstatic.net/common?src=https://i.imgur.com/oA39tTM.png)
在工程领域,向量场的一大应用是表示流体的流动。
![](https://search.pstatic.net/common?src=https://i.imgur.com/Yy0gUWS.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/Mcg3j12.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/N3igcUW.png)
在艺术设计领域,我们可以使用向量场来表现艺术家的笔触从而实现不同的绘画风格。
![](https://search.pstatic.net/common?src=https://i.imgur.com/IHrwjra.png)
在机器学习领域,continuous normalizing flow这样的方法就是通过构造向量场来近似目标分布。
![](https://search.pstatic.net/common?src=https://i.imgur.com/Y3uS9Oj.png)
在日常生活中,设计各种点心的表面图案实际上也可以理解为构造向量场。
![](https://search.pstatic.net/common?src=https://i.imgur.com/peAUFAu.png)
总之向量场是一个比较复杂的数学问题,每年都会涌现出一批新的算法和技术。本节课我们主要关注向量场的各种理论性质,而在后面的课程中则会介绍向量场在离散曲面上相关的方法。
![](https://search.pstatic.net/common?src=https://i.imgur.com/V16uswx.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/ErkEEfv.png)
Tangent Space
在前面的课程中我们介绍过切空间的概念。这里我们主要使用它的第二种定义,即切空间是\(p\)点附近局部参数化映射\(g\)的微分\(dg\)的像。
![](https://search.pstatic.net/common?src=https://i.imgur.com/GTcSq2w.png)
在此基础上我们定义切丛(tangent bundle)为流形上的点\(p\)与该点处所有切向量构成的集合。这样向量场可以定义为流形到切丛的映射\(u: \mathcal{M} \rightarrow T\mathcal{M}\),即我们为流形上每一点\(p\)配备一个切向量\(u(p) = (p, v)\)。
![](https://search.pstatic.net/common?src=https://i.imgur.com/WTIhMSK.png)
Gradient Vector Fields
流形上的标量函数会为每一点赋予一个标量值。
![](https://search.pstatic.net/common?src=https://i.imgur.com/swlRIT1.png)
而标量函数的微分则给出了切向量在映射作用下的变化。
![](https://search.pstatic.net/common?src=https://i.imgur.com/Ju19Ev6.png)
把它们结合起来我们就可以定义流形上的梯度场,它是标量函数\(f\)的微分并且给出了\(f\)在切向量\(\mathbf{v}\)方向上的导数。
![](https://search.pstatic.net/common?src=https://i.imgur.com/NBtQj2K.png)
Differentiate a Vector Field
接下来我们考虑如何对向量场进行微分。其中最基本的问题在于如何去比较流形上的切空间,当我们脱离了欧式空间后就无法直接对向量进行加减了。
![](https://search.pstatic.net/common?src=https://i.imgur.com/vYXHPlZ.png)
除此之外流形上的微分也有不同的形式,在本门课中我们会重点介绍Lie导数(Lie derivative)和协变导数(covariant derivative)这两种形式。
![](https://search.pstatic.net/common?src=https://i.imgur.com/Qbqxcqn.png)
Differentiate a Vector Field on a Manifold
我们从欧式空间中的向量场开始。假设待求导数的向量场为\(Y\),则\(p\)点处\(Y\)在\(X\)方向的导数为:
\[D_X Y \vert_p = \lim_{t \to 0} \frac{Y(p + tX) - Y(p)}{t}\]上面的定义在流形上会产生一定的问题。对于\(Y(p + tX)\)项我们需要保证它位于切空间中,因此不能简单地使用向量加法。除此之外,\(Y(p + tX)\)和\(Y(p)\)之间的减号是建立在欧式空间中的,而在流形上\(Y(p + tX)\)和\(Y(p)\)位于两个不同的切空间,我们不能直接进行相减。
![](https://search.pstatic.net/common?src=https://i.imgur.com/loEjwpq.png)
为了处理加法的问题,我们可以在流形上构造一条曲线\(\gamma_p(t): (-\varepsilon, \varepsilon) \rightarrow \mathcal{M}\)且满足\(\gamma_p(0) = p, \gamma_p'(0) = X(p)\)。这样\(Y(p + tX)\)可以重新表示为:
\[\lim_{t \rightarrow 0} \frac{Y(\gamma_p(t)) - Y(p)}{t}\]![](https://search.pstatic.net/common?src=https://i.imgur.com/cktBlvI.png)
而对于\(Y(p + tX)\)和\(Y(p)\)位于不同切空间的问题,我们需要定义一个函数将\(Y(p + tX)\)映射到\(Y(p)\)所在的切空间中:
\[\Phi_t^p: T_{\gamma_p(t)} \mathcal{M} \rightarrow T_p \mathcal{M}\]此时向量场的微分可以表示为:
\[\lim_{t \to 0} \frac{\Phi_t^p(Y(\gamma_p(t))) - Y(p)}{t}\]![](https://search.pstatic.net/common?src=https://i.imgur.com/uv3MYmk.png)
Lie Derivative
Lie导数使用向量场\(X\)的积分曲线(integral curve)来处理向量场\(Y\)的微分。所谓积分曲线是指从\(p\)点出发在向量场中每时每刻沿向量\(X(p)\)进行流动得到的曲线,即曲线满足ODE:
\[\frac{d}{dt} \phi_t^X(p) = X(\phi_t^X(p)), \ \phi_0^X(p) = p\]![](https://search.pstatic.net/common?src=https://i.imgur.com/hR6egY7.png)
接下来取\(\gamma_p(t) = \phi_t^X(p)\);然后沿着积分曲线把\(Y(p + tX)\)拽回到\(Y(p)\)上,即令\(\Phi_t^p = d \phi_{-t}^X \vert_{\gamma_p(t)}\)。如此计算的微分即为向量场的Lie导数,记作\(\mathcal{L}_X^Y\)。
![](https://search.pstatic.net/common?src=https://i.imgur.com/AEa6y00.png)
Covariant Derivative
而在协变导数中我们不再要求\(\gamma_p(t)\)来自于向量场\(X\),任意曲线只要能满足\(\gamma_p(t)\)的条件都是合理的选择。然后沿着曲线\(\gamma_p(t)\)基于平行运输(parallel transport)来构造\(\Phi_t^p\)。协变导数记作\(\nabla_X Y\)。
![](https://search.pstatic.net/common?src=https://i.imgur.com/yIiicPO.png)
Vector Field Flows
Diffeomorphism
实际上Lie导数还是向量场的一个微分同胚(diffeomorphism),它将向量场\(V\)映射为流形上的另一个向量场。从这样的角度来看,Lie导数具有群结构。
![](https://search.pstatic.net/common?src=https://i.imgur.com/7Yupe0V.png)
vector field flow的另一个经典例子是killing vector field(KVF),它的特点是向量沿着流形表面进行流动时向量本身不会发生变化。
![](https://search.pstatic.net/common?src=https://i.imgur.com/RGTlIgD.png)
Differential of Vector Field Flow
基于vector field flow我们可以来计算向量场的导数。
![](https://search.pstatic.net/common?src=https://i.imgur.com/9U9QQKP.png)
对于Lie导数而言只需要沿着流线把切向量拉回到所需的切空间中即可。
![](https://search.pstatic.net/common?src=https://i.imgur.com/C6ZMXlO.png)
需要注意的是Lie导数依赖于流线,这使得即使是常值的向量场也可能会有非0的导数。
![](https://search.pstatic.net/common?src=https://i.imgur.com/3r0oIqI.png)
同时,Lie导数需要知道参考向量场\(X\)在整个流形上的信息。如果我们只关心\(p\)点处某个方向上向量场的导数则不能使用Lie导数来计算。
![](https://search.pstatic.net/common?src=https://i.imgur.com/mQ3UfG5.png)
在这种情况下可以使用平行运输的方式来考虑切向量的变化,按照这种方式计算出向量场的导数即为协变导数。
![](https://search.pstatic.net/common?src=https://i.imgur.com/EZ5dNFl.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/Efp55ic.png)
协变导数的常用性质如下。
![](https://search.pstatic.net/common?src=https://i.imgur.com/R3QLW4l.png)
Geodesics
利用向量场我们还可以重新认识测地线。回忆测地线方程指出测地线没有切平面上的加速度,只要出切平面的加速度。
![](https://search.pstatic.net/common?src=https://i.imgur.com/Yxg6NAO.png)
结合协变导数的概念我们可以把测地线方程写成更简洁的形式。
![](https://search.pstatic.net/common?src=https://i.imgur.com/PhtTa3K.png)
Parallel Transport
利用平行运输可以证明当且仅当流形是平坦的情况下向量场的导数与曲线路径无关。
![](https://search.pstatic.net/common?src=https://i.imgur.com/Dcl31eI.png)
在曲面上使用平行运输沿封闭曲线移动切向量会得到和初始向量不同的向量,这种现象称为holonomy。
![](https://search.pstatic.net/common?src=https://i.imgur.com/4I9qkuz.png)
2D Vector Field Topology
![](https://search.pstatic.net/common?src=https://i.imgur.com/RKp3LfB.png)
Poincaré-Hopf Theorem
![](https://search.pstatic.net/common?src=https://i.imgur.com/NVzw85R.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/sr56ODf.png)
Direction Fields
![](https://search.pstatic.net/common?src=https://i.imgur.com/cqfdxR4.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/77czvrX.png)
Volumetric Frame Fields
Hex Meshing Problem
![](https://search.pstatic.net/common?src=https://i.imgur.com/N5aN48I.png)
Hex Mesh Singular Structures
![](https://search.pstatic.net/common?src=https://i.imgur.com/6wzL3g0.png)
Field-Guided Meshing Pipeline
![](https://search.pstatic.net/common?src=https://i.imgur.com/KpExTtU.png)
Frame Field Representation
![](https://search.pstatic.net/common?src=https://i.imgur.com/xtNZyA6.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/VjYJLjn.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/NaGPPjU.png)
More Careful Characterization
![](https://search.pstatic.net/common?src=https://i.imgur.com/ia3fFUp.png)
Representation Theory Perspective
![](https://search.pstatic.net/common?src=https://i.imgur.com/vddyYSs.png)
Odeco Frames
![](https://search.pstatic.net/common?src=https://i.imgur.com/6IRQC3c.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/cDheyU9.png)
![](https://search.pstatic.net/common?src=https://i.imgur.com/eFvGerL.png)