Shape Analysis课程笔记03-Continuous Curves
这个系列是MIT 6.838: Shape Analysis的同步课程笔记。本课程会介绍几何方法在图形学、机器学习、计算机视觉、医疗图像以及建筑设计等相关领域的原理和应用。本节主要介绍微分几何中曲线的相关内容。
What is a Curve?
Defining Curve
曲线(curve)是最基本的几何对象。以平面曲线为例,在微积分中我们会把曲线理解为一个实数域到二维平面的函数\(\gamma: \mathbb{R} \rightarrow \mathbb{R}^2\):

这种从函数进行定义的方式实际上有一些问题。首先它无法处理曲线发生退化的情况,当曲线退化为一个点时其表达式仍然满足函数的定义。

更严重的问题是对于同样的一条曲线可能存在不同的函数都可以进行表示。

在本课程中我们会更关注光滑曲线,而对于这类曲线函数的光滑性质往往是不足以推导出曲线本身的光滑性的。

Geometric Definition
因此我们不能直接使用函数来定义曲线,而需要考虑曲线自身的一些几何性质来进行定义。直观来说,曲线可以理解为满足一些条件的点的集合。这些条件中最重要的一点是微分性质,即在曲线上任意点的局部我们可以使用直线来进行近似。


微分性质更严格的解释是说在曲线\(C\)上任意点\(\mathbf{p}\)都存在一个邻域\(U\)以及一个光滑映射\(\gamma_{\mathbf{p}}\),使得我们可以把邻域\(U\)映射到实数域的区间\((a, b)\)上,且\(\gamma_{\mathbf{p}}'(t) \neq \mathbf{0}\)。此时映射\(\gamma_{\mathbf{p}}\)称为曲线\(C\)在\(\mathbf{p}\)点处的一个局部参数化。

这样定义的曲线也称为一条参数化曲线(parameterized curve),利用参数化曲线的概念就可以方便地处理曲线相交等函数定义无法处理的情况。

在参数化曲线的基础上我们还可以引入trace以及component的定义。

Arc Length
Change of Parameter
几何是研究不变量(invariant)的学科,对于曲线来说我们关心的是在不同的参数化下曲线的哪些量是保持不变的。

显然曲线的速度不是一个不变量,它依赖于函数\(\gamma\)的选取。

而曲线的弧长\(\int_a^b \Vert \gamma'(t) \Vert_2 \ dt\)则是一个不变量,对于同一条曲线它的长度总是不变的。


Parameterization by Arc Length
在弧长概念的基础上,我们可以使用曲线的弧长进行参数化。记曲线的弧长为\(S(t)\):
\[S(t) = \int_{t_0}^t \Vert \gamma'(t) \Vert_2 \ dt\]显然\(S(t)\)是一个单调递增的函数,因此对于任意参数\(t\)和弧长\(s\)都存在一个反函数\(\phi = S^{-1}\)满足:
\[t = \phi \circ S(t)\]利用\(\phi\)就可以重新参数化整条曲线:
\[\tilde{\gamma} (s) = \gamma \circ \phi(s)\]使用弧长进行参数化的曲线有很多优良的性质,比如说弧长参数化后曲线的速度为常数:
\[\begin{aligned} \tilde{\gamma}' (s) &= \gamma' (\phi (s)) \cdot \phi' (s) \\ &= \frac{\gamma' (\phi (s))}{\Vert \gamma'(\phi (s)) \Vert_2} \end{aligned}\]上式说明,弧长参数化后曲线的速度为单位向量。

更进一步,我们可以把速度使用三角函数进行表示:
\[\begin{aligned} \tilde{\gamma}' (s) = \mathbf{T} (s) &= \cos \theta(s) \ \mathbf{e}_1 + \sin \theta(s) \ \mathbf{e}_2 \\ &= \begin{bmatrix} \cos \theta(s) \\ \sin \theta(s) \end{bmatrix} \end{aligned}\]再对速度进行求导可以得到:
\[\begin{aligned} \mathbf{T}' (s) &= \theta'(s) \cdot [ -\sin \theta(s) \ \mathbf{e}_1 + \cos \theta(s) \ \mathbf{e}_2 ] \\ &= \theta'(s) \begin{bmatrix} 0 &-1 \\ 1 & 0 \end{bmatrix} \mathbf{T} (s) \\ &= \kappa(s) \ J \ \mathbf{T}(s) \\ &= \kappa(s) \ \mathbf{N}(s) \end{aligned}\]其中\(\kappa(s)=\theta'(s)\)称为曲率(curvature);\(\mathbf{N}(s) = J \ \mathbf{T}(s)\)表示对速度方向逆时针旋转90\(^{\circ}\),称为法向(normal)。上式指出弧长参数化的曲线其速度方向变化的速度,或者说曲线弯曲的程度取决于曲率的大小。


Coordinate Invariant
在微分几何中我们还希望能够脱离坐标系来讨论几何性质。对于曲线来说,我们希望可以不基于外部坐标来描述曲线。

实际上Frenet证明了我们只需要切向\(\mathbf{T}\)和法向\(\mathbf{N}\)就可以表示整条曲线了。对于平面曲线,通过对法向求导可以得到:
\[\mathbf{N}' (s) = J \ \mathbf{T}' (s) = J \bigg( \kappa(s) \ J \ \mathbf{T}(s) \bigg) = -\kappa(s) \mathbf{T}(s)\]整理后可以得到方程组:
\[\frac{d}{ds} \begin{bmatrix} \mathbf{T} (s) \\ \mathbf{N} (s) \end{bmatrix} = \begin{bmatrix} 0 & \kappa(s) \\ -\kappa(s) & 0 \end{bmatrix} \begin{bmatrix} \mathbf{T} (s) \\ \mathbf{N} (s) \end{bmatrix}\]上式称为Frenet方程(Frenet equations),而\((\mathbf{T}, \mathbf{N})\)也称为二维Frenet标架(Frenet frame)。


Radius Curvature
曲率的另一个几何解释是曲线密切圆(osculating circle)半径的倒数。

Fundamental Theorem of Plane Curves
微分几何在平面曲线上的一个重要结论是曲线论基本定理,它指出曲率\(\kappa(s)\)定义了平面曲线的形状,或者说如果两条曲线具有相同的曲率那么它们之间最多相差一个刚体变换。


Gauss Map
由于弧长参数化后的曲线具有单位向量的切向和法向,我们可以把法向理解为平面上单位圆上的点或方向。这样对于曲线上的任一点都存在一个映射将其映射到单位圆\(S^1\)上,这个映射称为Gauss映射(Gauss map)。


Winding Number
曲线的另一个重要几何性质是卷绕数(Winding number),它表示封闭曲线逆时针绕过原点的总次数。


Space Curves
对于空间曲线,除了主法向和曲率外我们还需要引入副法向(binormal)\(\mathbf{B}\)以及挠率(torsion)\(\tau\)。副法向是垂直于切向和主法向的单位向量,而挠率则描述了曲线出平面方向的运动。类似于平面曲线的Frenet方程,空间曲线的Frenet方程如下:
\[\frac{d}{ds} \begin{bmatrix} \mathbf{T} (s) \\ \mathbf{N} (s) \\ \mathbf{B} (s) \end{bmatrix} = \begin{bmatrix} 0 & \kappa(s) & 0 \\ -\kappa(s) & 0 & \tau(s) \\ 0 & -\tau(s) & 0 \\ \end{bmatrix} \begin{bmatrix} \mathbf{T} (s) \\ \mathbf{N} (s) \\ \mathbf{B} (s) \end{bmatrix}\]


除此之外,空间曲线的基本定理指出曲率和挠率定义了空间曲线的形状,具有相同曲率以及挠率的两条曲线之间至多只相差一个刚体变换。

对于更高维空间中的曲线,同样存在相应的Frenet方程。

First Variation Formula
本节课最后介绍了曲线上的变分问题。我们可以把弧长看做曲线的泛函:
\[L [\gamma] = \int_a^b \Vert \gamma'(t) \Vert_2 \ dt\]接下来我们假设曲线上存在向量场\(\mathbf{v}(t): (a, b) \rightarrow \mathbb{R}^2\)满足\(\mathbf{v}(a)=\mathbf{v}(b)=\mathbf{0}\)。我们的目标是计算\(L\)在\(\mathbf{v}\)扰动下的Gateaux导数\(d L_\gamma [\mathbf{v}]\),为此可以定义一组曲线:
\[\gamma_r (t) = \gamma(t) + r \mathbf{v}(t)\]曲线\(\gamma_r (t)\)的几何意义是在原始曲线\(\gamma\)上的每一点沿向量场方向移动\(r\)距离后所得到的新的曲线。在这条曲线上可以计算弧长:
\[l (r) = \int_a^b \Vert \gamma_r'(t) \Vert_2 \ dt\]显然,\(l (r)\)在\(r=0\)处的导数即为Gateaux导数:
\[d L_\gamma [\mathbf{v}] = l'(0)\]
接下来我们开始计算Gateaux导数。对\(l(r)\)进行求导可以得到:
\[\begin{aligned} l'(r) &= \frac{d}{dr} \int_a^b \Vert \gamma_r'(t) \Vert_2 \ dt \\ &= \int_a^b \frac{d}{dr} \Vert \gamma_r'(t) \Vert_2 \ dt \\ &= \int_a^b \frac{(\gamma'(t) + r \mathbf{v}'(t)) \cdot \mathbf{v}'(t)}{\Vert \gamma'(t) + r \mathbf{v}'(t) \Vert_2} \ dt \end{aligned}\]带入条件\(r = 0\)可以得到:
\[\begin{aligned} l'(0) &= \int_a^b \frac{\gamma'(t) \cdot \mathbf{v}'(t)}{\Vert \gamma'(t) \Vert_2} \ dt \\ &= \int_a^b \mathbf{T}(t) \cdot \mathbf{v}'(t) \ dt \end{aligned}\]其中\(\mathbf{T}(t)=\frac{\gamma'(t)}{\Vert \gamma'(t) \Vert_2}\)为曲线上的单位切向量。利用分部积分可以进一步得到:
\[\begin{aligned} \int_a^b \mathbf{T}(t) \cdot \mathbf{v}'(t) \ dt &= [\mathbf{T} \cdot \mathbf{v}(t)]_a^b - \int_a^b \kappa(t) \mathbf{N}(t) \cdot \mathbf{v}(t) \ dt \\ &= - \int_a^b \kappa(t) \mathbf{N}(t) \cdot \mathbf{v}(t) \ dt \\ &= \langle \mathbf{v}, -\kappa \mathbf{N} \rangle \end{aligned}\]联想到方向导数的定义\(df_{x_0} (\mathbf{v}) = \mathbf{v} \cdot \nabla f(x_0)\),上式说明在曲线上每一点沿法向进行移动可以缩短曲线的长度。同时也说明了我们可以通过设计曲线上的向量场来调整曲线的形状和长短,这样的方法称为curve shortening flow。
