曲线拼接中的连续性:C0、C1、C2、G0、G1、G2 是什么意思? #
在曲线建模中,我们经常需要把多段曲线拼接成一条复杂曲线。例如:
- 多段 Bézier 曲线拼接;
- B-Spline 的多个曲线段拼接;
- NURBS 曲线或曲面拼接;
- CAD 中的轮廓线、曲面边界拼接;
- 动画中的路径平滑过渡。
这时就会遇到一个重要问题:
两段曲线接在一起时,怎样才算“连续”或者“平滑”?
这就引出了曲线建模中的连续性概念。常见的连续性有两大类:
- 参数连续性:C0、C1、C2、Ck
- 几何连续性:G0、G1、G2、Gk
它们是计算机图形学和几何建模中的专业术语。
1. 为什么需要连续性要求? #
假设有两段曲线:
C1(t),0≤t≤1和
C2(t),0≤t≤1如果我们想把它们接起来,通常希望第一段的终点和第二段的起点连接在一起。
也就是:
C1(1)=C2(0)但是仅仅“接上”还不够。
如果连接点处出现尖角、速度突变、曲率突变,那么曲线看起来或者用起来就可能不平滑。
不同应用对平滑程度要求不同:
- 绘图路径:可能只要求没有断开;
- 字体轮廓:通常希望视觉上没有尖角;
- 动画路径:希望物体运动方向和速度平滑;
- CAD 曲面:希望曲率也平滑,否则会出现高光断裂;
- 汽车、飞机外形设计:通常要求更高阶的曲面连续性。
所以我们需要一套连续性规范。
2. 参数连续性:Ck 连续 #
Ck 连续中的 C 来自 continuous,表示参数意义下的连续性。
它要求两段曲线在连接点处的函数值、导数值完全相等。
2.1 C0 连续:位置连续 #
C0 连续要求两段曲线在连接点处位置相同。
也就是:
C1(1)=C2(0)直观理解:
两段曲线接上了,没有断开。
但是 C0 连续只保证位置相接,不保证连接处平滑。
如果两段曲线在连接处方向不同,那么会出现尖角。
2.2 C1 连续:一阶导数连续 #
C1 连续要求两段曲线不仅位置相同,而且一阶导数也相同。
也就是:
C1(1)=C2(0)并且:
C1′(1)=C2′(0)一阶导数可以理解为曲线的切线向量。
所以 C1 连续表示:
两段曲线在连接点处切线方向相同,并且切线向量长度也相同。
这里要注意:一阶导数是向量,它包含两个信息:
- 方向;
- 长度。
因此 C1 不只是要求方向一致,还要求导数向量完全相等。
直观理解:
曲线接得很顺,而且如果一个点沿着曲线运动,经过连接点时速度不会突然变化。
这里对异界导数的长度做一个说明,导数表示的是曲线变化的瞬时变化率,通俗一点说就是当参数 t 发生一点点变化,增加一点点,C(t) 移动了多少,如果在 t 位置的切向量越大,也就是一级导数越大,那么 C(t) 移动的就越多。
2.3 C2 连续:二阶导数连续 #
C2 连续要求两段曲线的位置、一阶导数、二阶导数都相同。
也就是:
C1(1)=C2(0) C1′(1)=C2′(0) C1′′(1)=C2′′(0)二阶导数和曲线的弯曲变化有关,可以理解为加速度或者曲率变化的一部分。
直观理解:
曲线不仅方向平滑,弯曲程度也平滑。
在视觉上,C2 连续通常比 C1 更自然。 在 CAD、曲面建模、动画路径中,C2 连续很常见。
2.4 Ck 连续:高阶导数连续 #
更一般地,如果两段曲线在连接点处从 0 阶到 k 阶导数都相等,就称为 Ck 连续。
也就是:
C1(r)(1)=C2(r)(0),r=0,1,2,…,k其中:
- r=0 表示位置连续;
- r=1 表示一阶导数连续;
- r=2 表示二阶导数连续;
- r=k 表示 k 阶导数连续。
因此:
C2⇒C1⇒C0也就是说,C2 连续一定包含 C1 连续,C1 连续一定包含 C0 连续。
3. 几何连续性:Gk 连续 #
Gk 连续中的 G 来自 geometric,表示几何意义下的连续性。
它更关注曲线的几何形状,而不是参数速度是否完全一致。
简单来说:
Ck 连续要求导数向量完全相等; Gk 连续只要求几何形状在某种意义上平滑。
因此 Gk 通常比 Ck 要弱一些。
3.1 G0 连续:几何位置连续 #
G0 连续和 C0 连续基本等价。
它要求两段曲线在连接点处相接:
C1(1)=C2(0)直观理解:
两段曲线没有断开。
3.2 G1 连续:切线方向连续 #
G1 连续要求两段曲线在连接点处切线方向相同。
也就是说,一阶导数向量方向一致,但长度不一定相等。
数学上可以写成:
C2′(0)=λC1′(1),λ>0这里的 λ 是一个正数。
如果 λ=1,那么就变成:
C2′(0)=C1′(1)这就是 C1 连续。
所以:
C1⇒G1但是:
G1⇏C1直观理解:
G1 连续表示曲线看起来没有尖角,但经过连接点时参数速度可以发生变化。
3.3 G2 连续:曲率连续 #
G2 连续要求两段曲线在连接点处不仅切线方向一致,而且曲率也一致。
曲率可以理解为曲线“弯得有多厉害”。
如果两段曲线满足 G1,但不满足 G2,那么它们连接处虽然没有尖角,但弯曲程度可能突然变化。
这种情况下,在普通线条图中可能不明显,但在曲面高光、汽车外形、工业设计中会非常明显。
直观理解:
G2 连续表示曲线的弯曲程度也是平滑过渡的。
在曲面建模中,G2 连续非常重要,因为它可以让高光反射更加自然。
3.4 Gk 连续:高阶几何连续 #
更一般地,Gk 连续表示曲线在几何意义上达到 k 阶平滑。
它不要求参数导数完全相等,而是允许对参数重新缩放,只要几何形状在连接处达到对应阶数的平滑即可。
因此,Gk 比 Ck 更关注“形状本身”,而不是“参数如何走”。
4. C1 和 G1 的区别 #
C1 和 G1 是最容易混淆的一组概念。
它们都要求连接处没有尖角,但严格程度不同。
4.1 G1 只要求方向一致 #
G1 要求:
C2′(0)=λC1′(1),λ>0也就是说,两边的切线向量方向相同,但长度可以不同。
例如:
C1′(1)=(1,0) C2′(0)=(3,0)这两个向量方向相同,但长度不同。
所以它们满足 G1,但不满足 C1。
4.2 C1 要求向量完全相等 #
C1 要求:
C2′(0)=C1′(1)比如:
C1′(1)=(1,0) C2′(0)=(1,0)这才满足 C1。
所以:
- G1:方向一样就行;
- C1:方向和长度都要一样。
4.3 直观区别 #
可以这样理解:
- G1:视觉上平滑,没有尖角;
- C1:参数运动也平滑,速度不会突然变化。
如果只关心曲线形状,G1 可能就够了。
如果关心沿曲线运动的速度变化,比如动画、路径规划,那么 C1 更重要。
5. 用两段 Bézier 曲线理解连续性 #
假设有两段三次 Bézier 曲线。
第一段控制点为:
P0,P1,P2,P3第二段控制点为:
Q0,Q1,Q2,Q3第一段曲线终点是 P3,第二段曲线起点是 Q0。
5.1 C0 连续条件 #
要让两段曲线接上,需要:
P3=Q0这表示第一段的终点等于第二段的起点。
5.2 G1 连续条件 #
三次 Bézier 曲线在终点处的切线方向由最后一条控制边决定。
第一段终点处的切线方向由:
P3−P2决定。
第二段起点处的切线方向由:
Q1−Q0决定。
所以 G1 连续要求:
Q1−Q0=λ(P3−P2),λ>0也就是说:
P2、P3=Q0、Q1 三个点共线,并且方向一致。
5.3 C1 连续条件 #
如果两段曲线次数相同、参数区间也相同,那么 C1 连续要求:
Q1−Q0=P3−P2也就是说,连接点两侧的控制边不仅要共线,而且长度也要相等。
5.4 C2 连续条件 #
对于两段三次 Bézier 曲线,如果要达到 C2 连续,还需要二阶导数相等。
三次 Bézier 曲线的二阶导数条件可以写成:
Q2−2Q1+Q0=P3−2P2+P1这表示连接点两侧的弯曲变化也要匹配。
6. B-Spline 中的连续性 #
B-Spline 的一个重要优点是:它可以自动保证相邻曲线段之间具有一定连续性。
对于一条 p 次 B-Spline,如果某个内部节点的重复度为 r,那么在该节点处的连续性通常是:
Cp−r这里:
- p 是曲线次数;
- r 是节点重复度;
- Cp−r 表示参数连续阶数。
如果内部节点不重复,那么 r=1,连续性为:
Cp−1例如,一条三次 B-Spline 中:
p=3如果内部节点不重复,则连接处通常具有:
C3−1=C2连续性。
这意味着三次 B-Spline 的普通连接点通常不仅位置连续、一阶导数连续,而且二阶导数也连续。
这就是为什么三次 B-Spline 在图形学和 CAD 中非常常用: 它次数不高,但曲线足够平滑。
7. 连续性等级总结 #
可以用下面的方式理解不同连续性等级:
| 连续性 | 含义 | 直观效果 |
|---|
| C0 | 位置连续 | 曲线接上,没有断开 |
| C1 | 一阶导数连续 | 切线向量相同,运动速度平滑 |
| C2 | 二阶导数连续 | 弯曲变化平滑 |
| G0 | 几何位置连续 | 曲线接上 |
| G1 | 切线方向连续 | 视觉上没有尖角 |
| G2 | 曲率连续 | 弯曲程度平滑,高光更自然 |
它们之间大致可以这样理解:
C2⇒C1⇒C0 G2⇒G1⇒G0并且:
C1⇒G1 C2⇒G2但是反过来通常不成立。
8. 实际应用中应该关注哪种连续性? #
不同应用对连续性的要求不同。
8.1 普通折线或简单路径 #
如果只是让线段接上,C0 或 G0 就够了。
例如普通折线、多边形边界。
8.2 视觉上平滑的二维曲线 #
如果希望线条没有尖角,通常至少需要 G1 连续。
例如:
8.3 动画路径或运动轨迹 #
如果有物体沿曲线运动,那么最好关注 C1 或更高。
因为 C1 保证一阶导数连续,也就是速度向量连续。
如果只满足 G1,物体运动方向可能平滑,但速度大小可能突然变化。
8.4 CAD、工业设计和曲面建模 #
在 CAD 和曲面设计中,G2 或 C2 很重要。
因为曲率不连续会导致曲面高光出现断裂。
例如:
- 汽车车身;
- 飞机外形;
- 工业产品外壳;
- 高质量自由曲面建模。
这些场景通常不仅要求曲面看起来接上,还要求反射、高光、曲率变化都平滑。
9. 总结 #
曲线连续性是几何建模中的专业概念,用来描述多段曲线或曲面在拼接处的平滑程度。
参数连续性 Ck 关注的是导数是否完全相等:
C1(r)(1)=C2(r)(0),r=0,1,2,…,k几何连续性 Gk 关注的是几何形状是否平滑,允许参数速度发生变化。
最常见的连续性包括:
- C0:位置连续;
- C1:一阶导数连续;
- C2:二阶导数连续;
- G0:几何位置连续;
- G1:切线方向连续;
- G2:曲率连续。
简单来说:
Ck 更严格,关注参数和导数; Gk 更灵活,关注几何形状本身。
在 B-Spline 中,连续性通常由曲线次数和节点重复度决定。对于 p 次 B-Spline,如果内部节点重复度为 r,那么该节点处通常具有:
Cp−r连续性。
这也是 B-Spline 相比手动拼接 Bézier 曲线更方便的原因之一: 它可以通过节点向量自动管理曲线段之间的连续性。