DDG课程笔记2-曲面与曲率

这个系列是对CMU离散微分几何课程(CMU CS 15-458/858: Discrete Differential Geometry)的总结和回顾。有了外代数和外微分的基础以后,接下来我们开始讨论曲面和曲率的一些性质。

Surfaces

Parameterized Surface

对于三维空间中的曲面,我们可以把它看成是二维平面通过映射f:MR3嵌入到三维空间中,这样的曲面称为参数化曲面(Parameterized Surface)。映射f描述了二维平面如何在三维空间中进行「伸展」,对f进行微分就可以把平面向量X映射到空间中得到对应的切向量df(X),换句话说df告诉了我们平面如何在局部进行了「伸展」。

df写成矩阵的形式就得到了f对应的Jacobi矩阵(Jacobian matrix):

df(X)=JfX Jf=[f1x1f1xnfnx1fnxn]

当曲面通过f进行变换时可能会遇到一些退化的情况,比如说我们可以定义f把平面映射到球面:

f(u,v)=(cos(u)sin(v),sin(u)sin(v),cos(v)) df=(sin(u)sin(v),cos(u)sin(v),0)du+(cos(u)cos(v),cos(v)sin(u),sin(v))dv

如果把f认为是平面地图到球面的映射,则u方向对应东西方向而v方向对应南北方向。当v=0我们会位于球面北极的位置,此时取X=(1,0)得到df(X)=(0,0,0)。也就是说沿X方向前进我们始终会留在原地,换句话说我们没有办法在两极定义东西方向。

为了避免上述这种退化问题同时方便后面的分析和推导这里引入immersed surface的概念:定义f:URn是一个immersion当且仅当df不会退化,即df(X)|p=0X|p=0。在本课程中除非特殊说明我们均假定f是一个immersion。

Induced Metric

对于参数化曲面我们总是希望可以在参数平面上研究曲面的在空间中的性质,比如说角度、长度、面积等等。以角度为例,显然参数平面上向量XY的夹角并不代表映射到空间后两个方向上的夹角。此外,对于同一个曲面可能存在多个不同的参数化方法,因此参数平面上向量的夹角并没有告诉我们任何关于曲面自身的信息。

尽管参数平面上向量的夹角没有什么特殊的意义,但通过微分映射df我们可以把参数平面上的向量转换到曲面的切平面上,从而得到曲面的信息。具体地我们定义切平面上df(X)df(Y)的内积为:

g(X,Y)=df(X),df(Y)

gf诱导度量(induced metric)。将参数平面上的任意两个向量XY带入诱导度量得到:

g(X,Y)=df(X),df(Y)=(JfX)T(JfY)=XTJfTJfY=XTIY

其中I=JfTJf称为曲面的第一基本形式(first fundamental form)

第一基本形式完全描述了曲面的度量性质,我们可以以此计算曲面上的夹角、长度、面积等几何量。

Normals

除了切向量外我们往往还关心曲面的法向量。我们定义高斯映射(Gauss Map)为参数平面上的点到对应单位法向量的映射。显然单位法向量到在单位球面上,因此高斯映射也可以看做是参数平面到单位球上的映射。

我们还可以定义区域内的平均法向:

1A(Ω)ΩNdA

其中被积项NdA为大小等于面积微元的法向量,称为vector area

我们将differential 2-form的运算法则推广到向量,用向量叉乘×代替标量乘法可以得到:

dfdf(X,Y)=df(X)×df(Y)df(Y)×df(X)=2df(X)×df(Y)=2NdA(X,Y)

NdA=12dfdf,再根据Stokes定理得到:

2ΩNdA=Ωdfdf=Ωd(fdf)=Ωfdf

上式表明对于给定的映射f,具有相同边界的的曲面会拥有相同的vector area;同时也表明对于封闭曲面其平均法向为0。

Discrete Surfaces

本节的最后来讨论一下曲面的离散表示。目前空间曲面最常用的表达形式仍然是三角网格,三角网格的连接关系表示曲面的拓扑信息,而网格顶点的坐标则表达了曲面的几何信息。

如果我们忽略网格的几何信息仅考虑拓扑关系,我们也可以把网格看做是一个流形(manifold)。那么接下来的问题是如何把流形嵌入到空间中?很显然我们可以构造顶点坐标的函数f将平面网格映射到空间中。也就是说我们只需要知道网格和映射f就足以表示空间曲面了。

离散曲面的优势在于曲面的每个面片都是平面,因此我们之前在Rn推导的公式仍然是有效的。实际上,我们之前推导的所有离散微分算子都可以直接应用到离散曲面上而无需任何额外的处理;此外我们在推导时也没有考虑任何的几何关系,也就是说我们可以仅依赖于拓扑关系就可以对网格进行处理。

Smooth Curvature

Curvature of Curves

接下来介绍曲率相关的知识,首先来考虑光滑曲线的曲率。类似于参数平面,我们可以把曲线看成是直线L经过映射γ嵌入到平面(空间)中,此时称γ(t)为一条参数化曲线:

显然对于同一条给定的曲线存在不同的参数化方法,其中最重要的一种参数化是使用曲线的弧长作为参数,称为弧长参数化(arc-length parameterized)

s=s(t)=0tγ˙(t)dt

对于使用弧长参数化的空间曲线,曲线上的每一点都对应着一个局部坐标系称为Frenet标架(Frenet frame),对应的三个坐标轴分别为切向T、法向N和从法向B

  • T(s)=ddsγ(s)
  • N(s)=ddsT(s)
  • B(s)=T(s)×N(s)

可以证明使用弧长参数化时曲线的切向量长度为1,因此三个坐标轴对应的向量均为单位向量。同时三个向量还满足Frenet-Serret公式(Frenet–Serret formulas)

dds[TNB]=[0κ0κ0τ0τ0][TNB]

其中κ=N,ddsT描述了切向的变化率,称为曲率(curvature)τ=N,ddsB描述了从法向的变化率,称为挠率(torsion)

此外我们还可以考虑曲面上的曲线:设曲线上一点的曲面法向为NM、从法向为BM=T×NM,定义曲线的法曲率(normal curvature)κn测地曲率(geodesic curvature)κg

κn=NM,ddsT κg=BM,ddsT

法曲率代表曲线为了维持在曲面上所具有的曲率,而测地曲率则描述了曲线偏离测地线的程度。

Curvature of Surfaces

在曲线曲率的基础上开始介绍曲面的曲率。回忆Gauss map告诉了我们曲面上任意点的法向,对Gauss map进行微分得到Weingarten map dNdN(X)表示法向如何沿方向X变化:

在此基础上我们定义曲面的法曲率(normal curvature)为法向沿切向df(X)的变化率:

κN(X)=df(X),dN(X)|df(X)|2

举个简单的例子,考虑参数化柱面f(u,v)=(cos(u),sin(u),v)。分别计算Gauss map和Weingarten map得到:

df=(sin(u),cos(u),0)du+(0,0,1)dv N=(sin(u),cos(u),0)×(0,0,1)=(cos(u),sin(u),0) dN=(sin(u),cos(u),0)du

带入法曲率计算公式得到:

κN(u)=df(u),dN(u)|df(u)|2=(sin(u),cos(u),0)(sin(u),cos(u),0)=1 κN(v)=df(v),dN(v)|df(v)|2=(0,0,1)0=0

这表示柱面在横截面内的曲率为1(圆弧),垂直于截面的曲率为0(没有弯曲),与我们在几何上的认知是一致的。

Principal Curvature

在曲面的切平面上存在两个相互垂直的方向X1X2使得曲率分别取最小和最大值,这两个方向称为主方向(principal directions)对应的曲率称为主曲率(principal curvatures)。主曲率的重要性质如下:

g(X1,X2)=0 dN(Xi)=κidf(Xi)

Shape Operator

注意到dN垂直于法向N,即dN位于曲面的切平面上,因此存在唯一的线性映射S使得:

df(SX)=dN(X)dfS=dN

线性映射S称为shape operator。对于主方向有:

SXi=κiXi

即主方向是S的特征向量,主曲率为对应的特征值。需要说明的是S未必是对称的,参数平面上X1X2也不一定是相互垂直的。

此外我们还可以通过shape operator来得到曲面的第二基本形式(second fundamental form) II

II(X,Y)=g(SX,Y)=dN(X)df(Y)

利用第一基本形式和第二基本形式也可以把法曲率写成:

κn(X)=II(X,X)I(X,X)

Gaussian and Mean Curvature

通过主曲率我们可以定义曲面的高斯曲率(Gaussian curvature)K平均曲率(mean curvature)H

K=κ1κ2 H=12(κ1+κ2)

其中,高斯曲率是曲面的内蕴不变量。根据Gauss-Bonnet定理(Gauss-Bonnet theorem)封闭曲面满足:

MKdA=2πχ

其中χ=22g欧拉示性数(Euler characteristic)g为曲面的亏格(genus)。对于有边界的开放曲面,Gauss-Bonnet定理仍然成立:

MKdA+Mκgds=2πχ

换言之,不管是对曲面还是对边界进行变形只要不改变曲面的拓扑性质总曲率的积分保持不变。

此外如果已知高斯曲率和平均曲率,还可以反推主曲率:

κ1=HH2K κ2=H+H2K

Discrete Curvature

Scalar Curvatures

最后我们来讨论离散曲面上的曲率。定义顶点iangle defect Ωi2π与相邻面内角和的差:

Ωi=2πijkθijk

不难发现angle defect表示顶点的「平坦」程度,angle defect越小表示越平坦(平面上angle defect为0)。

考虑离散曲面的Gauss map,我们可以把每个相邻三角形的法向放到原点,此时:

  • 方向的顶点都位于单位球上;
  • 三角形的转角(dihedral angles)等于单位球法向的内角;
  • 顶点的每一个内角等于球面上的转角;
  • 顶点的angle defect等于球面上法向包围的面积。

对于凸多面体,对每个顶点的angle defect求和相当于计算单位球的表面积(4π),也就是说angle defect的和(积分)是某种拓扑不变量。实际上angle defect就是离散曲面的高斯曲率,而且同样满足Gauss-Bonnet定理:

iVΩi=2πχ

离散曲面上的平均曲率则定义为法向夹角的一半乘以边长:

Hij=12lijφij

Curvature Normals

在几何处理中更为常用的曲率是曲率向量,即大小等于曲率方向与法向相同的向量。前面已经推导了面积法向(area normal)12dfdf=NdA,类似地可以推导平均曲率法向(mean curvature normal)高斯曲率法向(Gauss curvature normal)

12dfdN=HNdA 12dNdN=KNdA

将面积法向NdA在顶点的dual cell上进行积分得到离散曲面的面积法向:

CNdA=13ΩNdA=16Ωf×df=16ijΩeijf×df=16ijΩfi+fj2×(fjfi)=16ijΩfi×fj

类似地,对平均曲率法向和高斯曲率法向进行积分可以得到离散曲面对应的曲率向量:

(HN)i=CHNdA=CdfdN=12ijE(cotαij+cotβij)(fifj) (KN)i=CKNdA=CdNdN=12ijEφijlij(fjfi)

Steiner’s Formula

离散曲面上计算曲率的难点在于曲面不是光滑的,在很多地方曲率没有良好的定义。Steiner公式(Steiner’s Formula)提供了一种对离散曲率的近似求法:假设有一个半径为ε的球沿着凸多面体表面运动,在球运动的同时对多面体进行扩张,那么扩张后的体积可以利用半径ε进行展开

volume(A+Bε)=volume(A)+k=1nΦk(A)εk

稍后我们会发现系数Φk(A)与曲率有着深刻的联系。

首先考虑高斯曲率,显然扩张后的平面和柱面上高斯曲率为0,只有原来顶点对应的球面上存在非0的曲率。对于球面部分任一点的高斯曲率为K=1ε2,在顶点i对应的球面上进行积分得到Ki=(Ωiε2)1ε2=Ωi,恰好等于顶点的angle defect。同时根据Gauss-Bonnet定理,高斯曲率的积分为:

K(ε)=iVΩi=2πχ

然后考虑平均曲率,扩张后的平面部分平均曲率为0。对于柱面部分,每一点平均曲率为H=12ε。对柱面进行积分得到每一条边的平均曲率为Hij=12εlijφijε=12lijφij。在顶点对应的球面上,平均曲率为Hi=(Ωiε2)1ε=Ωiε。把它们加起来得到总平均曲率:

H(ε)=12ijElijφij+εiVΩi

接下来考虑扩张后的表面积:平面部分保持不变,每个柱面面积为lijφijε,每个球面面积为Ωiε2。因此总的表面积为:

A(ε)=ijkFAijk+εijElijφij+ε2iVΩi

最后来考虑扩张后的体积:

V(ε)=V0+εijkFAijk+12ε2ijElijφij+13ε3iVΩi

以上的推导表明多面体的体积、表面积、曲率之间存在微分关系:

V(ε)dA(ε)dH(ε)dG(ε)d0

同时也表明曲率描述了多面体体积扩张的速率。

Curvature Variations

假设f:MR3是一个光滑的映射,则曲面的体积、表面积、曲率可以表示为:

  • volume(f)=13MNfdA
  • area(f)=MdA
  • mean(f)=MHdA
  • Gauss(f)=MKdA=2πχ

对这些量求变分可以得到很多有趣的性质。对于封闭离散曲面,其体积可以表示为:

volume(f)=16ijkFfi(fj×fk)

对于曲面上任意顶点i计算体积对于顶点位置的梯度:

fivolume(f)=16fiijkFfi(fj×fk)=16ijkFfj×fk=CiNdA

这说明体积对于顶点i的梯度恰好等于法向在顶点dual cell上的积分,从而得到δvolume(f)=N。其几何意义为顶点的法向即为增大曲面体积最快的方向。

接下来考虑曲面的表面积,离散曲面的表面积为:

area(f)=ijkFAijk

在三角形上,面积对顶点的梯度为:

pA=12N×e

将上式带入到曲面表面积公式中,同样对顶点求梯度得到:

fiarea(f)=12ijE(cotαij+cotβij)(fifj)=(HN)i

详细证明可参见Mean curvature from area。因此δarea(f)=HN,这表示平均曲率向量的方向为增大表面积最快的方向。

对平均曲率求梯度得到:

fimean(f)=12ijEfi(lijφij)=12ijE(filij)φij+lij(fiφij)

根据Schläfli公式(Schläfli formula)

ijElij(fiφij)=0

因此,

fimean(f)=12ijE(filij)φij=12ijEφijlij(fjfi)=(KN)i

即平均曲率的变分等于高斯曲率δmean(f)=KN

综合以上可以得到变分关系:

volumeδfareaδfmeanδfGaussδf0

Curvature Flow

最后我们来介绍曲率流(curvature flow)算法对网格进行处理。由于曲率和网格的体积表面积等几何量存在变分关系,因此沿曲率方向移动顶点可以改变网格的几何量,从而实现对网格的降噪(滤波)。曲率流的基本步骤为:

  1. 计算网格上每个顶点的曲率;
  2. 沿着曲率向量的方向以一定的速度移动顶点;
  3. 重复以上步骤直至收敛。

从变分的角度上看,曲率流相当于最小化网格的能量。假设网格的总能量为E(f),通过梯度下降来最小化能量得到迭代公式:

ddtf(t)=δE(f(t))

在时间域和空间域上进行离散得到:

fik+1fikτ=fiE(f)

移项后得到迭代公式:

fik+1=fikτfiE(f)

因此我们只需要选择合适的能量E(f)以及对应的梯度δE(f)就可以进行迭代了。曲率流算法中最出名的是平均曲率流(mean curvature flow):取曲面总能量为曲面表面积E(f)=MdA,此时梯度项为顶点的平均曲率δE=(HN)i,建立迭代格式:

fik+1=fikτ2ijE(cotαij+cotβij)(fikfjk)

通过平均曲率流可以使曲面面积在每次迭代过程中不断减少,当算法收敛时得到的曲面为给定边界条件下表面积最小的曲面,称为极小曲面(minimal surface)。在日常生活中,很多建筑的流线型外观就是利用极小曲面来进行设计的。

Reference