日期:2026年3月13日标签:Computer Graphics

曲线拼接中的连续性:C0C^0C1C^1C2C^2G0G^0G1G^1G2G^2 是什么意思? #

在曲线建模中,我们经常需要把多段曲线拼接成一条复杂曲线。例如:

  • 多段 Bézier 曲线拼接;
  • B-Spline 的多个曲线段拼接;
  • NURBS 曲线或曲面拼接;
  • CAD 中的轮廓线、曲面边界拼接;
  • 动画中的路径平滑过渡。

这时就会遇到一个重要问题:

两段曲线接在一起时,怎样才算“连续”或者“平滑”?

这就引出了曲线建模中的连续性概念。常见的连续性有两大类:

  1. 参数连续性:C0C^0C1C^1C2C^2CkC^k
  2. 几何连续性:G0G^0G1G^1G2G^2GkG^k

它们是计算机图形学和几何建模中的专业术语。


1. 为什么需要连续性要求? #

假设有两段曲线:

C1(t),0t1C_1(t), \quad 0 \leq t \leq 1

C2(t),0t1C_2(t), \quad 0 \leq t \leq 1

如果我们想把它们接起来,通常希望第一段的终点和第二段的起点连接在一起。

也就是:

C1(1)=C2(0)C_1(1)=C_2(0)

但是仅仅“接上”还不够。

如果连接点处出现尖角、速度突变、曲率突变,那么曲线看起来或者用起来就可能不平滑。

不同应用对平滑程度要求不同:

  • 绘图路径:可能只要求没有断开;
  • 字体轮廓:通常希望视觉上没有尖角;
  • 动画路径:希望物体运动方向和速度平滑;
  • CAD 曲面:希望曲率也平滑,否则会出现高光断裂;
  • 汽车、飞机外形设计:通常要求更高阶的曲面连续性。

所以我们需要一套连续性规范。


2. 参数连续性:CkC^k 连续 #

CkC^k 连续中的 CC 来自 continuous,表示参数意义下的连续性。

它要求两段曲线在连接点处的函数值、导数值完全相等。


2.1 C0C^0 连续:位置连续 #

C0C^0 连续要求两段曲线在连接点处位置相同。

也就是:

C1(1)=C2(0)C_1(1)=C_2(0)

直观理解:

两段曲线接上了,没有断开。

但是 C0C^0 连续只保证位置相接,不保证连接处平滑。

如果两段曲线在连接处方向不同,那么会出现尖角。


2.2 C1C^1 连续:一阶导数连续 #

C1C^1 连续要求两段曲线不仅位置相同,而且一阶导数也相同。

也就是:

C1(1)=C2(0)C_1(1)=C_2(0)

并且:

C1(1)=C2(0)C_1'(1)=C_2'(0)

一阶导数可以理解为曲线的切线向量。

所以 C1C^1 连续表示:

两段曲线在连接点处切线方向相同,并且切线向量长度也相同。

这里要注意:一阶导数是向量,它包含两个信息:

  1. 方向;
  2. 长度。

因此 C1C^1 不只是要求方向一致,还要求导数向量完全相等。

直观理解:

曲线接得很顺,而且如果一个点沿着曲线运动,经过连接点时速度不会突然变化。

这里对异界导数的长度做一个说明,导数表示的是曲线变化的瞬时变化率,通俗一点说就是当参数 tt 发生一点点变化,增加一点点,C(t)C(t) 移动了多少,如果在 tt 位置的切向量越大,也就是一级导数越大,那么 C(t)C(t) 移动的就越多。


2.3 C2C^2 连续:二阶导数连续 #

C2C^2 连续要求两段曲线的位置、一阶导数、二阶导数都相同。

也就是:

C1(1)=C2(0)C_1(1)=C_2(0) C1(1)=C2(0)C_1'(1)=C_2'(0) C1(1)=C2(0)C_1''(1)=C_2''(0)

二阶导数和曲线的弯曲变化有关,可以理解为加速度或者曲率变化的一部分。

直观理解:

曲线不仅方向平滑,弯曲程度也平滑。

在视觉上,C2C^2 连续通常比 C1C^1 更自然。 在 CAD、曲面建模、动画路径中,C2C^2 连续很常见。


2.4 CkC^k 连续:高阶导数连续 #

更一般地,如果两段曲线在连接点处从 0 阶到 kk 阶导数都相等,就称为 CkC^k 连续。

也就是:

C1(r)(1)=C2(r)(0),r=0,1,2,,kC_1^{(r)}(1)=C_2^{(r)}(0), \quad r=0,1,2,\ldots,k

其中:

  • r=0r=0 表示位置连续;
  • r=1r=1 表示一阶导数连续;
  • r=2r=2 表示二阶导数连续;
  • r=kr=k 表示 kk 阶导数连续。

因此:

C2C1C0C^2 \Rightarrow C^1 \Rightarrow C^0

也就是说,C2C^2 连续一定包含 C1C^1 连续,C1C^1 连续一定包含 C0C^0 连续。


3. 几何连续性:GkG^k 连续 #

GkG^k 连续中的 GG 来自 geometric,表示几何意义下的连续性。

它更关注曲线的几何形状,而不是参数速度是否完全一致。

简单来说:

CkC^k 连续要求导数向量完全相等; GkG^k 连续只要求几何形状在某种意义上平滑。

因此 GkG^k 通常比 CkC^k 要弱一些。


3.1 G0G^0 连续:几何位置连续 #

G0G^0 连续和 C0C^0 连续基本等价。

它要求两段曲线在连接点处相接:

C1(1)=C2(0)C_1(1)=C_2(0)

直观理解:

两段曲线没有断开。


3.2 G1G^1 连续:切线方向连续 #

G1G^1 连续要求两段曲线在连接点处切线方向相同。

也就是说,一阶导数向量方向一致,但长度不一定相等。

数学上可以写成:

C2(0)=λC1(1),λ>0C_2'(0)=\lambda C_1'(1), \quad \lambda > 0

这里的 λ\lambda 是一个正数。

如果 λ=1\lambda=1,那么就变成:

C2(0)=C1(1)C_2'(0)=C_1'(1)

这就是 C1C^1 连续。

所以:

C1G1C^1 \Rightarrow G^1

但是:

G1C1G^1 \nRightarrow C^1

直观理解:

G1G^1 连续表示曲线看起来没有尖角,但经过连接点时参数速度可以发生变化。


3.3 G2G^2 连续:曲率连续 #

G2G^2 连续要求两段曲线在连接点处不仅切线方向一致,而且曲率也一致。

曲率可以理解为曲线“弯得有多厉害”。

如果两段曲线满足 G1G^1,但不满足 G2G^2,那么它们连接处虽然没有尖角,但弯曲程度可能突然变化。

这种情况下,在普通线条图中可能不明显,但在曲面高光、汽车外形、工业设计中会非常明显。

直观理解:

G2G^2 连续表示曲线的弯曲程度也是平滑过渡的。

在曲面建模中,G2G^2 连续非常重要,因为它可以让高光反射更加自然。


3.4 GkG^k 连续:高阶几何连续 #

更一般地,GkG^k 连续表示曲线在几何意义上达到 kk 阶平滑。

它不要求参数导数完全相等,而是允许对参数重新缩放,只要几何形状在连接处达到对应阶数的平滑即可。

因此,GkG^kCkC^k 更关注“形状本身”,而不是“参数如何走”。


4. C1C^1G1G^1 的区别 #

C1C^1G1G^1 是最容易混淆的一组概念。

它们都要求连接处没有尖角,但严格程度不同。


4.1 G1G^1 只要求方向一致 #

G1G^1 要求:

C2(0)=λC1(1),λ>0C_2'(0)=\lambda C_1'(1), \quad \lambda > 0

也就是说,两边的切线向量方向相同,但长度可以不同。

例如:

C1(1)=(1,0)C_1'(1)=(1,0) C2(0)=(3,0)C_2'(0)=(3,0)

这两个向量方向相同,但长度不同。

所以它们满足 G1G^1,但不满足 C1C^1


4.2 C1C^1 要求向量完全相等 #

C1C^1 要求:

C2(0)=C1(1)C_2'(0)=C_1'(1)

比如:

C1(1)=(1,0)C_1'(1)=(1,0) C2(0)=(1,0)C_2'(0)=(1,0)

这才满足 C1C^1

所以:

  • G1G^1:方向一样就行;
  • C1C^1:方向和长度都要一样。

4.3 直观区别 #

可以这样理解:

  • G1G^1:视觉上平滑,没有尖角;
  • C1C^1:参数运动也平滑,速度不会突然变化。

如果只关心曲线形状,G1G^1 可能就够了。

如果关心沿曲线运动的速度变化,比如动画、路径规划,那么 C1C^1 更重要。


5. 用两段 Bézier 曲线理解连续性 #

假设有两段三次 Bézier 曲线。

第一段控制点为:

P0,P1,P2,P3P_0,P_1,P_2,P_3

第二段控制点为:

Q0,Q1,Q2,Q3Q_0,Q_1,Q_2,Q_3

第一段曲线终点是 P3P_3,第二段曲线起点是 Q0Q_0


5.1 C0C^0 连续条件 #

要让两段曲线接上,需要:

P3=Q0P_3=Q_0

这表示第一段的终点等于第二段的起点。


5.2 G1G^1 连续条件 #

三次 Bézier 曲线在终点处的切线方向由最后一条控制边决定。

第一段终点处的切线方向由:

P3P2P_3-P_2

决定。

第二段起点处的切线方向由:

Q1Q0Q_1-Q_0

决定。

所以 G1G^1 连续要求:

Q1Q0=λ(P3P2),λ>0Q_1-Q_0=\lambda(P_3-P_2), \quad \lambda>0

也就是说:

P2P_2P3=Q0P_3=Q_0Q1Q_1 三个点共线,并且方向一致。


5.3 C1C^1 连续条件 #

如果两段曲线次数相同、参数区间也相同,那么 C1C^1 连续要求:

Q1Q0=P3P2Q_1-Q_0=P_3-P_2

也就是说,连接点两侧的控制边不仅要共线,而且长度也要相等。


5.4 C2C^2 连续条件 #

对于两段三次 Bézier 曲线,如果要达到 C2C^2 连续,还需要二阶导数相等。

三次 Bézier 曲线的二阶导数条件可以写成:

Q22Q1+Q0=P32P2+P1Q_2-2Q_1+Q_0=P_3-2P_2+P_1

这表示连接点两侧的弯曲变化也要匹配。


6. B-Spline 中的连续性 #

B-Spline 的一个重要优点是:它可以自动保证相邻曲线段之间具有一定连续性。

对于一条 pp 次 B-Spline,如果某个内部节点的重复度为 rr,那么在该节点处的连续性通常是:

CprC^{p-r}

这里:

  • pp 是曲线次数;
  • rr 是节点重复度;
  • CprC^{p-r} 表示参数连续阶数。

如果内部节点不重复,那么 r=1r=1,连续性为:

Cp1C^{p-1}

例如,一条三次 B-Spline 中:

p=3p=3

如果内部节点不重复,则连接处通常具有:

C31=C2C^{3-1}=C^2

连续性。

这意味着三次 B-Spline 的普通连接点通常不仅位置连续、一阶导数连续,而且二阶导数也连续。

这就是为什么三次 B-Spline 在图形学和 CAD 中非常常用: 它次数不高,但曲线足够平滑。


7. 连续性等级总结 #

可以用下面的方式理解不同连续性等级:

连续性含义直观效果
C0C^0位置连续曲线接上,没有断开
C1C^1一阶导数连续切线向量相同,运动速度平滑
C2C^2二阶导数连续弯曲变化平滑
G0G^0几何位置连续曲线接上
G1G^1切线方向连续视觉上没有尖角
G2G^2曲率连续弯曲程度平滑,高光更自然

它们之间大致可以这样理解:

C2C1C0C^2 \Rightarrow C^1 \Rightarrow C^0 G2G1G0G^2 \Rightarrow G^1 \Rightarrow G^0

并且:

C1G1C^1 \Rightarrow G^1 C2G2C^2 \Rightarrow G^2

但是反过来通常不成立。


8. 实际应用中应该关注哪种连续性? #

不同应用对连续性的要求不同。

8.1 普通折线或简单路径 #

如果只是让线段接上,C0C^0G0G^0 就够了。

例如普通折线、多边形边界。


8.2 视觉上平滑的二维曲线 #

如果希望线条没有尖角,通常至少需要 G1G^1 连续。

例如:

  • 字体轮廓;
  • 矢量图形;
  • 插画路径;
  • UI 动效路径。

8.3 动画路径或运动轨迹 #

如果有物体沿曲线运动,那么最好关注 C1C^1 或更高。

因为 C1C^1 保证一阶导数连续,也就是速度向量连续。

如果只满足 G1G^1,物体运动方向可能平滑,但速度大小可能突然变化。


8.4 CAD、工业设计和曲面建模 #

在 CAD 和曲面设计中,G2G^2C2C^2 很重要。

因为曲率不连续会导致曲面高光出现断裂。

例如:

  • 汽车车身;
  • 飞机外形;
  • 工业产品外壳;
  • 高质量自由曲面建模。

这些场景通常不仅要求曲面看起来接上,还要求反射、高光、曲率变化都平滑。


9. 总结 #

曲线连续性是几何建模中的专业概念,用来描述多段曲线或曲面在拼接处的平滑程度。

参数连续性 CkC^k 关注的是导数是否完全相等:

C1(r)(1)=C2(r)(0),r=0,1,2,,kC_1^{(r)}(1)=C_2^{(r)}(0), \quad r=0,1,2,\ldots,k

几何连续性 GkG^k 关注的是几何形状是否平滑,允许参数速度发生变化。

最常见的连续性包括:

  • C0C^0:位置连续;
  • C1C^1:一阶导数连续;
  • C2C^2:二阶导数连续;
  • G0G^0:几何位置连续;
  • G1G^1:切线方向连续;
  • G2G^2:曲率连续。

简单来说:

CkC^k 更严格,关注参数和导数; GkG^k 更灵活,关注几何形状本身。

在 B-Spline 中,连续性通常由曲线次数和节点重复度决定。对于 pp 次 B-Spline,如果内部节点重复度为 rr,那么该节点处通常具有:

CprC^{p-r}

连续性。

这也是 B-Spline 相比手动拼接 Bézier 曲线更方便的原因之一: 它可以通过节点向量自动管理曲线段之间的连续性。

目录