跳到主要内容

3.2 曲面

来源:Mario Botsch 等人的 Polygon Mesh Processing,第 3 章 Differential Geometry,3.2 小节 Surfaces。

3.1 曲线 讲了平面曲线的长度和曲率。3.2 把这些概念推广到嵌入在 R3\mathbb{R}^3 中的光滑曲面。

这一节是后续离散微分算子的基础。3.3 中的三角网格法向、曲率、Laplace-Beltrami 离散化,都在模拟本节这些连续概念。

本节核心

曲线只有一个参数:

x(u)\mathbf{x}(u)

曲面有两个参数:

x(u,v)=[x(u,v)y(u,v)z(u,v)]\mathbf{x}(u,v) = \begin{bmatrix} x(u,v)\\ y(u,v)\\ z(u,v) \end{bmatrix}

其中:

(u,v)ΩR2(u,v)\in\Omega\subset\mathbb{R}^2

也就是说,曲面可以看成从二维参数域 Ω\Omega 到三维空间的映射:

x:ΩSR3\mathbf{x}:\Omega\rightarrow S\subset\mathbb{R}^3

本节主要回答:

  1. 曲面上的长度、角度、面积如何计算?
  2. 曲面的弯曲程度如何定义?
  3. 曲线曲率如何推广成曲面的主曲率、平均曲率和高斯曲率?
  4. Laplace-Beltrami 算子和平均曲率有什么关系?

3.2.1 曲面的参数化表示

书中用“世界地图”来解释曲面参数化。

把地球表面展开成地图,本质上是在找一个二维参数域:

(θ,ϕ)(\theta,\phi)

来描述球面上的点。

球面的参数方程可以写成:

x(θ,ϕ)=[RcosθcosϕRsinθcosϕRsinϕ]\mathbf{x}(\theta,\phi) = \begin{bmatrix} R\cos\theta\cos\phi\\ R\sin\theta\cos\phi\\ R\sin\phi \end{bmatrix}

其中:

θ[0,2π],ϕ[π/2,π/2]\theta\in[0,2\pi], \qquad \phi\in[-\pi/2,\pi/2]

RR 是球半径。

这里:

  • θ\theta 类似经度。
  • ϕ\phi 类似纬度。

参数方程和隐式方程的区别

同一个球面也可以用隐式方程表示:

x2+y2+z2=R2x^2+y^2+z^2=R^2

二者回答的问题不同。

表示用途
参数方程给定 (θ,ϕ)(\theta,\phi),生成球面上的点
隐式方程给定 (x,y,z)(x,y,z),判断它是否在球面上

也就是:

parametric: parameters -> surface point
implicit: space point -> on surface?

这和第 1 章中的参数表示 / 隐式表示是一致的。

iso-parameter curves

参数曲面上有两类自然曲线。

固定 θ\theta

θ=constant\theta=\text{constant}

得到 iso-θ\theta curves。对球面来说,它们是经过两极的经线。

固定 ϕ\phi

ϕ=constant\phi=\text{constant}

得到 iso-ϕ\phi curves。对球面来说,它们是纬线。

在参数域里,iso-curves 是横竖网格线;映射到曲面后,它们显示参数化如何拉伸和扭曲曲面。

信息

观察 iso-parameter grid 是理解参数化失真的好方法。球面地图在两极附近会严重扭曲,就是因为二维矩形参数域无法无失真地铺到球面上。

3.2.2 Metric Properties

曲线的 metric 由一阶导数 x(u)\mathbf{x}'(u) 决定。

曲面的 metric 由两个偏导数决定:

xu=xu\mathbf{x}_u = \frac{\partial\mathbf{x}}{\partial u} xv=xv\mathbf{x}_v = \frac{\partial\mathbf{x}}{\partial v}

它们分别是两条 iso-parameter curve 的切向量。

切平面和法向量

在曲面点 x(u0,v0)\mathbf{x}(u_0,v_0) 处,两个切向量:

xu,xv\mathbf{x}_u,\quad \mathbf{x}_v

张成 tangent plane。

参数化 regular 的条件是:

xu×xv0\mathbf{x}_u\times\mathbf{x}_v\neq \mathbf{0}

也就是说,两个切向量不能共线或退化。

曲面单位法向量为:

n=xu×xvxu×xv\mathbf{n} = \frac{\mathbf{x}_u\times\mathbf{x}_v} {\|\mathbf{x}_u\times\mathbf{x}_v\|}

这和三角形法向的计算非常像:两个边向量叉乘,再归一化。

参数域方向到曲面切向量

设参数域中有方向:

wˉ=[uwvw]\bar{\mathbf{w}} = \begin{bmatrix} u_w\\ v_w \end{bmatrix}

在参数域中沿这条方向走:

(u,v)=(u0,v0)+twˉ(u,v)=(u_0,v_0)+t\bar{\mathbf{w}}

映射到曲面上得到一条曲线:

Cw(t)=x(u0+tuw, v0+tvw)C_w(t) = \mathbf{x}(u_0+tu_w,\ v_0+tv_w)

它在 t=0t=0 处的切向量为:

w=Cw(t)t\mathbf{w} = \frac{\partial C_w(t)}{\partial t}

由链式法则:

w=xuuw+xvvw\mathbf{w} = \mathbf{x}_u u_w+\mathbf{x}_v v_w

也可以写成矩阵形式:

w=Jwˉ\mathbf{w} = J\bar{\mathbf{w}}

其中 Jacobian 为:

J=[xuxvyuyvzuzv]=[xuxv]J = \begin{bmatrix} \frac{\partial x}{\partial u} & \frac{\partial x}{\partial v}\\ \frac{\partial y}{\partial u} & \frac{\partial y}{\partial v}\\ \frac{\partial z}{\partial u} & \frac{\partial z}{\partial v} \end{bmatrix} = \begin{bmatrix} \mathbf{x}_u & \mathbf{x}_v \end{bmatrix}
为什么满足 w = J w-bar?

曲面参数化是一个向量值函数:

x(u,v)=[x(u,v)y(u,v)z(u,v)]\mathbf{x}(u,v) = \begin{bmatrix} x(u,v)\\ y(u,v)\\ z(u,v) \end{bmatrix}

参数域中的方向为:

wˉ=[uwvw]\bar{\mathbf{w}} = \begin{bmatrix} u_w\\ v_w \end{bmatrix}

沿这个方向走一条参数域中的直线:

u(t)=u0+tuw,v(t)=v0+tvwu(t)=u_0+tu_w, \qquad v(t)=v_0+tv_w

映射到曲面上得到曲线:

Cw(t)=x(u(t),v(t))C_w(t) = \mathbf{x}(u(t),v(t))

曲面上的切向量就是这条曲线在 t=0t=0 处的导数:

w=dCw(t)dtt=0=dx(u(t),v(t))dtt=0\mathbf{w} = \left.\frac{dC_w(t)}{dt}\right|_{t=0} = \left.\frac{d\mathbf{x}(u(t),v(t))}{dt}\right|_{t=0}

对向量函数逐坐标使用链式法则:

dxdt=xududt+xvdvdt\frac{d\mathbf{x}}{dt} = \frac{\partial\mathbf{x}}{\partial u}\frac{du}{dt} + \frac{\partial\mathbf{x}}{\partial v}\frac{dv}{dt}

因为:

dudt=uw,dvdt=vw\frac{du}{dt}=u_w, \qquad \frac{dv}{dt}=v_w

所以:

w=xuuw+xvvw\mathbf{w} = \mathbf{x}_u u_w+\mathbf{x}_v v_w

xu\mathbf{x}_uxv\mathbf{x}_v 作为矩阵的两列:

J=[xuxv]J = \begin{bmatrix} \mathbf{x}_u & \mathbf{x}_v \end{bmatrix}

则矩阵乘法给出:

Jwˉ=[xuxv][uwvw]=xuuw+xvvwJ\bar{\mathbf{w}} = \begin{bmatrix} \mathbf{x}_u & \mathbf{x}_v \end{bmatrix} \begin{bmatrix} u_w\\ v_w \end{bmatrix} = \mathbf{x}_u u_w+\mathbf{x}_v v_w

因此:

w=Jwˉ\mathbf{w}=J\bar{\mathbf{w}}

直观地说,JJ 的两列分别表示“参数 uu 增加一点时曲面点往哪里动”和“参数 vv 增加一点时曲面点往哪里动”。任意参数方向 wˉ=(uw,vw)T\bar{\mathbf{w}}=(u_w,v_w)^T 都是这两个基本方向的线性组合,所以曲面上的切向量也是 xu\mathbf{x}_uxv\mathbf{x}_v 的同样线性组合。

所以 JJ 可以看作从参数域方向到曲面切向量的线性映射。

第一基本形式

Jacobian 不只把方向映射到切向量,它还编码了曲面的 metric。

第一基本形式定义为:

I=JTJ=[EFFG]I = J^TJ = \begin{bmatrix} E & F\\ F & G \end{bmatrix}

其中:

E=xuTxuE=\mathbf{x}_u^T\mathbf{x}_u F=xuTxvF=\mathbf{x}_u^T\mathbf{x}_v G=xvTxvG=\mathbf{x}_v^T\mathbf{x}_v

第一基本形式本质上是参数域上的一个内积矩阵。

给定参数域中的方向 wˉ\bar{\mathbf{w}},曲面上对应切向量长度平方为:

w2=wˉTIwˉ\|\mathbf{w}\|^2 = \bar{\mathbf{w}}^TI\bar{\mathbf{w}}

因此它可以用来测量:

  • 长度。
  • 角度。
  • 面积。

也常被称为 metric tensor。

曲面上曲线的长度

设参数域中有一条曲线:

u(t)=[u(t)v(t)]\mathbf{u}(t) = \begin{bmatrix} u(t)\\ v(t) \end{bmatrix}

它映射到曲面上:

x(u(t))\mathbf{x}(\mathbf{u}(t))

其切向量为:

dx(u(t))dt=xuut+xvvt\frac{d\mathbf{x}(\mathbf{u}(t))}{dt} = \mathbf{x}_u u_t+\mathbf{x}_v v_t

曲线长度为:

l(a,b)=ab[utvt]I[utvt]dtl(a,b) = \int_a^b \sqrt{ \begin{bmatrix} u_t & v_t \end{bmatrix} I \begin{bmatrix} u_t\\ v_t \end{bmatrix} } \,dt

展开为:

l(a,b)=abEut2+2Futvt+Gvt2dtl(a,b) = \int_a^b \sqrt{ E u_t^2+2F u_t v_t+G v_t^2 } \,dt

这就是第一基本形式用于测量曲面上曲线长度的方式。

曲面面积

参数区域 UΩU\subseteq\Omega 映射到曲面上,对应面积为:

A=Udet(I)dudvA = \iint_U \sqrt{\det(I)} \,du\,dv
为什么面积元素是 sqrt(det(I)) du dv?

参数区域里的一个很小矩形可以写成:

[u,u+du]×[v,v+dv][u,u+du]\times[v,v+dv]

它在参数域中的两条边方向分别是:

[du0],[0dv]\begin{bmatrix} du\\ 0 \end{bmatrix}, \qquad \begin{bmatrix} 0\\ dv \end{bmatrix}

经过曲面参数化 x(u,v)\mathbf{x}(u,v) 映射到三维空间后,这两条小边近似变成两个切向量:

xudu,xvdv\mathbf{x}_u\,du, \qquad \mathbf{x}_v\,dv

所以曲面上的这个小面积片,局部近似为由 xudu\mathbf{x}_u\,duxvdv\mathbf{x}_v\,dv 张成的小平行四边形。它的面积是:

dA=xudu×xvdvdA = \|\mathbf{x}_u\,du \times \mathbf{x}_v\,dv\|

把标量 du,dvdu,dv 提出来:

dA=xu×xvdudvdA = \|\mathbf{x}_u \times \mathbf{x}_v\|\,du\,dv

接下来把这个结果和第一基本形式联系起来。第一基本形式为:

I=[EFFG]I = \begin{bmatrix} E & F\\ F & G \end{bmatrix}

其中:

E=xuxu,F=xuxv,G=xvxvE=\mathbf{x}_u\cdot\mathbf{x}_u, \qquad F=\mathbf{x}_u\cdot\mathbf{x}_v, \qquad G=\mathbf{x}_v\cdot\mathbf{x}_v

因此:

det(I)=EGF2=xu2xv2(xuxv)2\det(I) = EG-F^2 = \|\mathbf{x}_u\|^2\|\mathbf{x}_v\|^2 - (\mathbf{x}_u\cdot\mathbf{x}_v)^2

而两个向量叉乘面积满足:

a×b2=a2b2(ab)2\|\mathbf{a}\times\mathbf{b}\|^2 = \|\mathbf{a}\|^2\|\mathbf{b}\|^2 - (\mathbf{a}\cdot\mathbf{b})^2

a=xu,b=xv\mathbf{a}=\mathbf{x}_u,\mathbf{b}=\mathbf{x}_v,就得到:

xu×xv2=EGF2=det(I)\|\mathbf{x}_u\times\mathbf{x}_v\|^2 = EG-F^2 = \det(I)

所以局部面积元素为:

dA=det(I)dudvdA = \sqrt{\det(I)}\,du\,dv

对整个参数区域 UU 积分,就得到:

A=Udet(I)dudvA = \iint_U \sqrt{\det(I)} \,du\,dv

直观地说,I=JTJI=J^TJ 记录了参数域里的长度和角度在曲面上如何被拉伸;det(I)\det(I) 记录的是面积缩放的平方,所以真正的面积缩放因子是 det(I)\sqrt{\det(I)}

由于:

det(I)=EGF2\det(I)=EG-F^2

所以:

A=UEGF2dudvA = \iint_U \sqrt{EG-F^2} \,du\,dv

这个公式也等价于:

A=Uxu×xvdudvA = \iint_U \|\mathbf{x}_u\times\mathbf{x}_v\| \,du\,dv

因为:

xu×xv2=EGF2\|\mathbf{x}_u\times\mathbf{x}_v\|^2 = EG-F^2

数值例子:平面参数化

设一个平面 patch:

x(u,v)=[2u3v0]\mathbf{x}(u,v) = \begin{bmatrix} 2u\\ 3v\\ 0 \end{bmatrix}

偏导为:

xu=[200],xv=[030]\mathbf{x}_u= \begin{bmatrix} 2\\0\\0 \end{bmatrix}, \qquad \mathbf{x}_v= \begin{bmatrix} 0\\3\\0 \end{bmatrix}

所以:

E=xuTxu=4E=\mathbf{x}_u^T\mathbf{x}_u=4 F=xuTxv=0F=\mathbf{x}_u^T\mathbf{x}_v=0 G=xvTxv=9G=\mathbf{x}_v^T\mathbf{x}_v=9

第一基本形式为:

I=[4009]I= \begin{bmatrix} 4&0\\ 0&9 \end{bmatrix}

单位参数方向 (1,0)T(1,0)^T 映射后长度为 2。

单位参数方向 (0,1)T(0,1)^T 映射后长度为 3。

一个单位参数正方形 [0,1]×[0,1][0,1]\times[0,1] 的曲面面积为:

A=EGF2=36=6A=\sqrt{EG-F^2}= \sqrt{36}=6

它确实变成了 2×32\times3 的矩形。

Anisotropy:各向异性

参数域中的一个小圆,通过参数化映射到曲面后,一般会变成一个小椭圆。

这个椭圆叫 anisotropy ellipse。

它描述参数化在不同方向上拉伸得是否一样。

第一基本形式 II 的特征向量给出主拉伸方向,特征值给出拉伸量平方。

II 的特征值为:

λ1,λ2\lambda_1,\lambda_2

则对应的伸缩因子为:

σ1=λ1,σ2=λ2\sigma_1=\sqrt{\lambda_1}, \qquad \sigma_2=\sqrt{\lambda_2}

它们也是 Jacobian JJ 的 singular values。

如果:

σ1=σ2\sigma_1=\sigma_2

说明局部各方向伸缩相同。

如果:

σ1σ2\sigma_1\gg\sigma_2

说明参数化在某个方向被强烈拉伸,局部失真大。

提示

参数化质量常常可以从 JJ 或第一基本形式的奇异值看出来:奇异值越接近,局部越接近等距或保角;差异越大,各向异性越强。

3.2.3 曲面曲率

曲线曲率衡量曲线怎么弯。

曲面有无穷多个切方向,因此要考虑每个切方向上的弯曲。

给定曲面点 pp 和一个切向量 t\mathbf{t},取由 t\mathbf{t} 和法向 n\mathbf{n} 张成的平面。

这个平面与曲面相交,得到一条平面曲线,叫 normal section。

这条 normal section 在 pp 处的曲率,叫该方向的 normal curvature:

κn(tˉ)\kappa_n(\bar{\mathbf{t}})

第二基本形式

曲面曲率需要二阶导数。

二阶偏导为:

xuu,xuv,xvv\mathbf{x}_{uu}, \qquad \mathbf{x}_{uv}, \qquad \mathbf{x}_{vv}

第二基本形式定义为:

II=[effg]II = \begin{bmatrix} e&f\\ f&g \end{bmatrix}

其中:

e=xuuTne=\mathbf{x}_{uu}^T\mathbf{n} f=xuvTnf=\mathbf{x}_{uv}^T\mathbf{n} g=xvvTng=\mathbf{x}_{vv}^T\mathbf{n}

第一基本形式描述 metric,第二基本形式描述法向方向上的弯曲。

Normal curvature 公式

设参数域中的切方向为:

tˉ=[utvt]\bar{\mathbf{t}} = \begin{bmatrix} u_t\\ v_t \end{bmatrix}

则 normal curvature 为:

κn(tˉ)=tˉTIItˉtˉTItˉ\kappa_n(\bar{\mathbf{t}}) = \frac{\bar{\mathbf{t}}^TII\bar{\mathbf{t}}} {\bar{\mathbf{t}}^TI\bar{\mathbf{t}}}

展开:

κn(tˉ)=eut2+2futvt+gvt2Eut2+2Futvt+Gvt2\kappa_n(\bar{\mathbf{t}}) = \frac{ e u_t^2+2f u_t v_t+g v_t^2 } { E u_t^2+2F u_t v_t+G v_t^2 }

它是“二阶弯曲量”除以“一阶 metric 长度量”。

主曲率和主方向

在一个曲面点处,normal curvature 随切方向变化。

其中最大值和最小值称为 principal curvatures:

κ1,κ2\kappa_1,\quad \kappa_2

通常约定:

κ1=maximum curvature\kappa_1=\text{maximum curvature} κ2=minimum curvature\kappa_2=\text{minimum curvature}

对应的切方向称为 principal directions:

t1,t2\mathbf{t}_1,\quad \mathbf{t}_2

如果:

κ1κ2\kappa_1\neq\kappa_2

主方向是唯一的,并且互相正交。

如果:

κ1=κ2\kappa_1=\kappa_2

该点称为 umbilical point,所有方向都可以看成主方向。

球面上每一点都是 umbilical point,因为各个方向弯曲一样。

平面上每一点也是 umbilical point,因为各个方向曲率都为 0。

Euler theorem

Euler 定理说明:任意方向的 normal curvature 都由两个主曲率决定。

如果 ψ\psi 是切方向 t\mathbf{t} 与主方向 t1\mathbf{t}_1 的夹角,则:

κn(tˉ)=κ1cos2ψ+κ2sin2ψ\kappa_n(\bar{\mathbf{t}}) = \kappa_1\cos^2\psi +\kappa_2\sin^2\psi

这说明任意方向曲率都是 κ1\kappa_1κ2\kappa_2 的组合。

因此,只要知道两个主曲率和主方向,就知道该点全部方向上的弯曲行为。

曲率张量

局部曲率也可以用 curvature tensor 表示。

它是一个对称 3×33\times3 矩阵 CC

其特征值为:

κ1,κ2,0\kappa_1,\quad \kappa_2,\quad 0

对应特征向量为:

t1,t2,n\mathbf{t}_1,\quad \mathbf{t}_2,\quad \mathbf{n}

如果:

P=[t1t2n]P= \begin{bmatrix} \mathbf{t}_1&\mathbf{t}_2&\mathbf{n} \end{bmatrix}

并且:

D=diag(κ1,κ2,0)D=\operatorname{diag}(\kappa_1,\kappa_2,0)

则:

C=PDP1C=PDP^{-1}

这个表示把“两个切向曲率 + 法向无曲率”统一写成矩阵形式。

平均曲率

Mean curvature 定义为两个主曲率的平均:

H=κ1+κ22H = \frac{\kappa_1+\kappa_2}{2}

它在几何处理中非常重要,例如:

  • smoothing。
  • fairing。
  • mean curvature flow。
  • Laplace-Beltrami 离散化。

平均曲率可以理解为曲面整体弯曲趋势。

高斯曲率

Gaussian curvature 定义为两个主曲率的乘积:

K=κ1κ2K = \kappa_1\kappa_2

它可以用来分类曲面点。

条件类型几何直觉
K>0K>0elliptic point两个方向同号,局部像碗或帽子
K<0K<0hyperbolic point两个方向异号,局部像马鞍
K=0K=0parabolic point至少一个方向曲率为 0,常在区域分界上

数值例子

如果:

κ1=2,κ2=1\kappa_1=2,\qquad \kappa_2=1

则:

H=2+12=1.5H=\frac{2+1}{2}=1.5 K=2×1=2>0K=2\times1=2>0

这是 elliptic point。

如果:

κ1=2,κ2=1\kappa_1=2,\qquad \kappa_2=-1

则:

H=212=0.5H=\frac{2-1}{2}=0.5 K=2×(1)=2<0K=2\times(-1)=-2<0

这是 hyperbolic point,也就是马鞍区域。

Intrinsic geometry

只依赖第一基本形式 II 的性质称为 intrinsic。

直观上,intrinsic geometry 是“生活在曲面上的二维生物”不看三维空间也能测到的性质。

例如:

  • 曲面上曲线的长度。
  • 曲面内角度。
  • 曲面上两点沿表面的距离。

Gauss 的 Theorema Egregium 表明:高斯曲率 KK 是 intrinsic 的。

也就是说,高斯曲率可以仅由第一基本形式决定。

但平均曲率 HH 不是 intrinsic 的,它依赖曲面在三维空间中的嵌入方式。

一个经典直觉是:纸张可以从平面卷成圆柱,局部距离不变,但平均曲率变了;高斯曲率仍为 0。

Laplace 和 Laplace-Beltrami

后续章节会频繁使用 Laplace operator 和 Laplace-Beltrami operator。

在平面上,对函数 f(u,v)f(u,v)

Δf=fuu+fvv\Delta f = f_{uu}+f_{vv}

它也可以写成:

Δf=divf\Delta f = \operatorname{div}\nabla f
为什么 Laplace 可以理解为“散度作用在梯度上”?

先看平面上的标量函数:

f(u,v)f(u,v)

它的梯度是:

f=[fufv]\nabla f = \begin{bmatrix} f_u\\ f_v \end{bmatrix}

梯度 f\nabla f 是一个向量场。它告诉我们:在每个点上,函数 ff 增长最快的方向是什么,以及增长有多快。

例如把 ff 想成地形高度,那么 f\nabla f 指向“上坡最快”的方向。

散度作用在一个向量场上。若有向量场:

V(u,v)=[V1(u,v)V2(u,v)]\mathbf{V}(u,v) = \begin{bmatrix} V_1(u,v)\\ V_2(u,v) \end{bmatrix}

它的散度是:

divV=V1u+V2v\operatorname{div}\mathbf{V} = \frac{\partial V_1}{\partial u} + \frac{\partial V_2}{\partial v}

散度衡量的是:这个向量场在某个点附近整体上是“向外流出”还是“向内汇入”。

现在令向量场就是函数的梯度:

V=f=[fufv]\mathbf{V}=\nabla f = \begin{bmatrix} f_u\\ f_v \end{bmatrix}

那么:

divf=fuu+fvv\operatorname{div}\nabla f = \frac{\partial f_u}{\partial u} + \frac{\partial f_v}{\partial v}

也就是:

divf=fuu+fvv=Δf\operatorname{div}\nabla f = f_{uu}+f_{vv} = \Delta f

所以 Laplace operator 可以理解为两步:

  1. 先用 f\nabla f 找到函数往哪里增长。
  2. 再用 div\operatorname{div} 看这个增长趋势是否在局部扩散或汇聚。

如果 Δf>0\Delta f>0,通常表示该点附近像一个局部“谷底”,周围平均值比它大;如果 Δf<0\Delta f<0,通常表示该点附近像一个局部“山顶”,周围平均值比它小。

在网格处理中,这个理解很重要:离散 Laplace 算子常常可以看作“当前点和邻域平均之间的差异”。

Laplace-Beltrami operator 是 Laplace operator 在曲面上的推广:

ΔSf=divSSf\Delta_S f = \operatorname{div}_S\nabla_S f

它作用在定义于曲面上的函数。

曲面上的梯度和散度是什么意思?

在曲面上,函数 ff 不再定义在普通平面上,而是定义在曲面 SS 上:

f:SRf:S\rightarrow\mathbb{R}

曲面梯度记作:

Sf\nabla_S f

它仍然表示 ff 增长最快的方向,但这个方向必须贴在曲面上,也就是位于切平面中。

换句话说,Sf\nabla_S f 不是指向三维空间任意方向,而是沿着曲面表面走时,函数增长最快的切向方向。

曲面散度记作:

divSV\operatorname{div}_S \mathbf{V}

其中 V\mathbf{V} 是曲面上的切向量场。它衡量这个切向量场沿着曲面本身是向外扩散,还是向内汇聚。

因此:

ΔSf=divSSf\Delta_S f = \operatorname{div}_S\nabla_S f

含义就是:

  1. 先在曲面上求 ff 的最快变化方向。
  2. 再看这个变化方向场在曲面上如何扩散或汇聚。

和普通 Laplace 的区别在于:曲面上的长度、角度、面积不是由平面坐标直接决定,而是由第一基本形式 II 决定。因此 S\nabla_SdivS\operatorname{div}_S 必须考虑曲面的 metric。

这也是为什么 Laplace-Beltrami 算子虽然形式上仍然是:

divSS\operatorname{div}_S\nabla_S

但它比普通平面 Laplace 多了曲面几何信息。

Laplace-Beltrami 和平均曲率法向

当 Laplace-Beltrami operator 作用在曲面坐标函数 x\mathbf{x} 上时,有重要关系:

ΔSx=2Hn\Delta_S\mathbf{x} = -2H\mathbf{n}

右侧称为 mean curvature normal。

这条公式在网格处理中非常关键。

因为后续离散 Laplace-Beltrami 算子可以用来近似:

HnH\mathbf{n}

也就是平均曲率法向。

这也是 mesh smoothing、fairing、curvature flow 等算法的基础。

信息

虽然 ΔSx\Delta_S\mathbf{x} 和平均曲率有关,而平均曲率依赖三维嵌入;但 Laplace-Beltrami 算子本身是 intrinsic 的,它只依赖曲面的 metric。

和 3.1 的关系

3.1 中,曲线的长度由一阶导数决定:

l=x(u)dul=\int\|\mathbf{x}'(u)\|\,du

3.2 中,曲面上的长度、角度、面积由第一基本形式决定:

I=JTJI=J^TJ

3.1 中,曲线曲率由二阶导数决定:

κ=x(s)\kappa=\|\mathbf{x}''(s)\|

3.2 中,曲面曲率由第二基本形式和第一基本形式共同决定:

κn=tˉTIItˉtˉTItˉ\kappa_n = \frac{\bar{\mathbf{t}}^TII\bar{\mathbf{t}}} {\bar{\mathbf{t}}^TI\bar{\mathbf{t}}}

曲线只有一个弯曲方向;曲面有无穷多个切方向,因此需要主曲率来概括。

本节记忆点

  • 曲面参数化写作:
x(u,v):ΩSR3\mathbf{x}(u,v):\Omega\rightarrow S\subset\mathbb{R}^3
  • 两个偏导 xu,xv\mathbf{x}_u,\mathbf{x}_v 张成切平面。
  • 曲面法向为:
n=xu×xvxu×xv\mathbf{n} = \frac{\mathbf{x}_u\times\mathbf{x}_v} {\|\mathbf{x}_u\times\mathbf{x}_v\|}
  • Jacobian 为:
J=[xu,xv]J=[\mathbf{x}_u,\mathbf{x}_v]
  • 第一基本形式为:
I=JTJ=[EFFG]I=J^TJ = \begin{bmatrix} E&F\\ F&G \end{bmatrix}
  • 曲面面积元素为:
EGF2dudv\sqrt{EG-F^2}\,du\,dv
  • 第二基本形式为:
II=[effg]II= \begin{bmatrix} e&f\\ f&g \end{bmatrix}
  • normal curvature 为:
κn=tˉTIItˉtˉTItˉ\kappa_n = \frac{\bar{\mathbf{t}}^TII\bar{\mathbf{t}}} {\bar{\mathbf{t}}^TI\bar{\mathbf{t}}}
  • 主曲率是 normal curvature 的最大值和最小值。
  • 平均曲率:
H=κ1+κ22H=\frac{\kappa_1+\kappa_2}{2}
  • 高斯曲率:
K=κ1κ2K=\kappa_1\kappa_2
  • Laplace-Beltrami 与平均曲率法向的关系:
ΔSx=2Hn\Delta_S\mathbf{x}=-2H\mathbf{n}

后续问题

进入 3.3 时可以重点关注:

  1. 三角网格是 piecewise linear surface,为什么不能直接使用连续二阶导数?
  2. 离散法向如何由邻域三角形平均得到?
  3. 离散 Gaussian curvature 如何由角缺陷 angle deficit 得到?
  4. 离散 Laplace-Beltrami 的 cotangent weights 从哪里来?