来源:Mario Botsch 等人的 Polygon Mesh Processing,第 3 章 Differential Geometry,3.1 小节 Curves。
第 3 章开始进入微分几何。书中先从平面曲线讲起,再推广到曲面和三角网格上的离散微分算子。
这一节的目标是建立几个基础概念:
- 参数曲线。
- 切向量。
- 法向量。
- 弧长。
- 弧长参数化。
- 曲率。
- 密切圆。
本节核心
考虑一条嵌入在平面中的光滑曲线:
x:[a,b]→R2
它可以写成:
x(u)=[x(u)y(u)]
其中 u 是参数。
曲线是这个函数的像:
C={x(u)∣u∈[a,b]}
微分几何关心的不是某个具体参数 u,而是曲线本身的几何性质,例如长度和曲率。
切向量
曲线在参数 u 处的切向量是坐标函数的一阶导数:
x′(u)=[x′(u)y′(u)]
如果把曲线看成一个点随时间运动的轨迹,并令 u=t,那么:
x′(t)
就是速度向量。
书中假设参数化是 regular 的,也就是:
x′(u)=0∀u∈[a,b]
否则某些点的切向量为零,曲线局部会退化,很多微分几何量无法稳定定义。
法向量
在二维平面中,可以把切向量旋转 90∘ 得到法向方向。
如果:
x′(u)=[ab]
那么一种 90∘ 旋转结果是:
x′(u)⊥=[−ba]
单位法向量为:
n(u)=∥x′(u)⊥∥x′(u)⊥
由于旋转方向可以选顺时针或逆时针,法向量的方向有符号约定。后面曲率的符号也会依赖这个约定。
同一条曲线可以有不同参数化
曲线由函数的像决定,不由某个具体参数化唯一决定。
例如:
x1(u)=[uu],u∈[0,1]
和:
x2(u)=[u2u2],u∈[0,1]
它们都描述从 (0,0) 到 (1,1) 的同一条线段。
区别在于运动速度不同。
对 x1:
x1′(u)=[11]
速度大小恒定:
∥x1′(u)∥=2
对 x2:
x2′(u)=[2u2u]
速度大小为:
∥x2′(u)∥=22u
它随 u 改变。
所以参数化不同,但几何形状相同。
微分几何希望研究的是不依赖具体参数化的性质,比如曲线长度和曲率,而不是“某个参数值处速度是多少”这种参数化相关量。
3.1.1 弧长
曲线段 [c,d]⊆[a,b] 的长度为:
l(c,d)=∫cd∥x′(u)∥du
这里:
∥x′(u)∥
可以理解为单位参数变化对应的曲线长度变化,也就是速度大小。
因此切向量编码了曲线的 metric 信息。
数值例子:直线段长度
设:
x(u)=[uu],u∈[0,1]
切向量:
x′(u)=[11]
速度大小:
∥x′(u)∥=12+12=2
所以总长度:
L=∫012du=2
这正是点 (0,0) 到 (1,1) 的欧氏距离。
弧长参数化
可以把原始参数 u 转换成弧长参数 s:
s=s(u)=∫au∥x′(t)∥dt
其中 s 表示从起点 x(a) 走到 x(u) 的曲线长度。
如果整条曲线长度为:
L=∫ab∥x′(u)∥du
那么弧长参数把区间 [a,b] 映射到:
[0,L]
弧长参数化的重要性质是:
从 x(0) 到 x(s) 的曲线长度正好等于 s。
这是一种长度保持的参数化,也就是 isometry。
弧长参数化下的单位速度
如果曲线用弧长 s 参数化,那么:
∥x′(s)∥=1
也就是说,沿曲线每走一个单位的 s,就在几何上走了一个单位长度。
这让很多公式更干净。
曲率定义就是在弧长参数化下最简单。
曲线总能用弧长重新参数化。但书中提醒:曲面一般不能像曲线这样定义全局 canonical arc-length parameterization。这会在后面的曲面参数化中变得重要。
3.1.2 曲率
假设曲线已经用弧长 s 参数化。
曲率定义为:
κ(s):=∥x′′(s)∥
直观理解:
- 一阶导数 x′(s) 是单位切向量。
- 二阶导数 x′′(s) 描述切向量变化得多快。
- 切向量变化越快,曲线弯得越厉害。
因此曲率衡量曲线偏离直线的程度。
曲率和法向量
弧长参数化下,曲线的二阶导数沿法向方向:
x′′(s)=κ(s)n(s)
如果只关心曲率大小:
∣κ(s)∣=∥x′′(s)∥
如果考虑法向方向约定,那么曲率可以带符号。
法向反向时:
n↦−n
曲率符号也会改变。
直线的曲率
直线可以写成:
x(s)=p0+st
其中 t 是单位方向。
一阶导数:
x′(s)=t
二阶导数:
x′′(s)=0
所以:
κ(s)=0
如果一条曲线处处曲率为 0,它就是线段。
圆的曲率
半径为 R 的圆可以用弧长参数写成:
x(s)=[Rcos(s/R)Rsin(s/R)]
一阶导数:
x′(s)=[−sin(s/R)cos(s/R)]
它的长度为 1。
二阶导数:
x′′(s)=[−R1cos(s/R)−R1sin(s/R)]
曲率大小:
κ=∥x′′(s)∥=R1
所以:
圆越小,弯得越厉害,曲率越大。
圆越大,越接近直线,曲率越小。
例如:
- R=1,曲率 κ=1。
- R=2,曲率 κ=0.5。
- R=10,曲率 κ=0.1。
密切圆
曲率还可以通过 osculating circle,也就是密切圆来理解。
密切圆是在某一点处最贴近曲线的圆。
曲率与密切圆半径满足:
κ=R1
其中 R 是密切圆半径。
直观上:
- 曲线局部很弯:密切圆小,R 小,κ 大。
- 曲线局部很平:密切圆大,R 大,κ 小。
- 直线可以看成半径无限大的圆,κ=0。
用三点理解密切圆
书中给出一个构造方式:
取曲线上三个点:
x(u−),x(u),x(u+)
其中:
u−<u<u+
这三个点确定一个圆。
当:
u−→u,u+→u
这个三点圆的极限就是点 x(u) 处的密切圆。
这也解释了为什么离散网格上常用局部邻域去估计曲率:连续曲率可以看作局部几何极限,离散曲率则用邻域点近似这个极限。
参数化无关性
曲率和长度是 Euclidean invariants。
这意味着它们在刚体变换下不变:
它们也不应依赖具体参数化。
例如前面两条参数曲线:
x1(u)=(u,u)T
和:
x2(u)=(u2,u2)T
虽然速度函数不同,但它们描述的是同一条直线段。
因此曲率都为:
κ=0
总长度都为:
L=2
和后续曲面的关系
曲线这一节是第 3 章的入口。
后面讨论曲面时,会把这些概念推广:
| 曲线概念 | 曲面对应概念 |
|---|
| 切向量 x′ | 两个偏导 xu,xv |
| 法向量 n | 曲面法向 xu×xv |
| 弧长 metric | 第一基本形式 |
| 曲率 κ | 主曲率、平均曲率、高斯曲率 |
| 局部弯曲 | shape operator / second fundamental form |
对于 polygon mesh,后续还要进一步离散化这些概念。
本节记忆点
x(u)=(x(u),y(u))T
x′(u)
- regular parameterization 要求:
x′(u)=0
l(c,d)=∫cd∥x′(u)∥du
s(u)=∫au∥x′(t)∥dt
∥x′(s)∥=1
κ(s)=∥x′′(s)∥
κ=R1
后续问题
进入 3.2 时可以重点关注:
- 曲线的一个参数如何推广到曲面的两个参数 (u,v)?
- 曲面的 tangent plane 如何由 xu,xv 张成?
- 曲面的 metric 如何由第一基本形式描述?
- 曲线曲率如何推广成曲面的主曲率、平均曲率和高斯曲率?