DongGu
贝塞尔曲线与曲面

贝塞尔曲线与曲面

对于直线段与平面,我们只要有它们的端点就可以绘制与填充,但是对于曲线和曲面,绘制起来就困难得多。

在这篇文章中,我将介绍一种经典的曲线曲面表示方法——贝塞尔曲线与贝塞尔曲面。

贝塞尔曲线

贝塞尔曲线(Bézier Curve)是计算机图形学中用于平滑过渡、绘制曲线的核心工具。无论是你在 PhotoShop 里用的钢笔工具,还是前端开发中的 CSS 缓动动画,亦或是各种游戏引擎中的角色路径,背后全都是它。

简单来说,它的本质就是:通过极少数的控制点,利用”线性插值”的原理,勾勒出一条连续且平滑的曲线。

贝塞尔曲线的分类与原理

贝塞尔曲线的”阶数”取决于你给它多少个控制点。控制点越多,曲线的形态就越复杂。

一阶贝塞尔曲线(线性插值)

  • 控制点:2 个点(起点 ,终点

  • 原理:其实就是一条直线。随着时间 从 0 匀速运动到 1,动点在一阶曲线上做简单的线性插值。

  • 数学公式:

二阶贝塞尔曲线(二次方)

  • 控制点:3 个点(起点 ,控制点 ,终点

  • 原理:这是最直观展示其动态生成过程的阶数。

    • 连线上,有一个动点 在按比例 前进;

    • 同时,在 连线上,也有一个动点 在以相同的比例 前进;

    • 连接 ,再在 这条移动的线段上,按同样的比例 取一个动点 。这个 的运动轨迹,就是二阶贝塞尔曲线。

  • 数学公式:

三阶贝塞尔曲线(三次方)

  • 控制点:4 个点(起点 ,控制点 ,终点

  • 应用:这是工程中最常用的一种。钢笔工具、矢量字体的字形描述(如 TrueType 字体)、CSS 中的 cubic-bezier 缓动函数都是它。它在二阶的基础上又叠加了一层线段插值。

  • 数学公式:

更高阶的贝塞尔曲线

  • 控制点:阶数 + 1(起点,终点,以及其他控制点)

  • 应用:由于更高阶的贝塞尔曲线的局部控制能力会变弱,且计算开销变大,工程上很少直接使用高阶贝塞尔曲线。对于复杂的曲线,通常会使用多段三阶贝塞尔曲线进行拼接。

直观演示

下面我们以二阶贝塞尔曲线为例,直观感受一下贝塞尔曲线的绘制过程。

第一步: 确定三个控制点——起点 、控制点 和终点

三个控制点

第二步: 在线段 上分别按比例 进行插值,得到中间点。

在线段P0P1上按比例插值
在线段P1P2上按比例插值

对于同一个插值系数 ,我们分别在线段 上得到两个中间点。

第三步: 连接两个中间点,在这条新线段上再次按比例 插值,便得到曲线上的最终点。

在连接线上插值得到最终点
二阶贝塞尔曲线

不断重复第二、三步(即令 从 0 变化到 1),便可以得到完整的二阶贝塞尔曲线。

三阶贝塞尔曲线

对于更高阶的贝塞尔曲线,原理是一样的,只不过每一层都需要在更多相邻控制点之间迭代插值,直到最终收敛为一个点。这种层层递推的过程就是 De Casteljau 算法的几何直观。

下面还有一个交互式可视化工具,可以更直观地感受贝塞尔曲线的绘制过程:

贝塞尔曲线与 De Casteljau 递推算法动态可视化

可鼠标拖动控制点(P₀, P₁, P₂, P₃),调节参数 t 观察多级线性插值的连线过程。

当前模式:三次贝塞尔曲线。包含起点 P₀,终点 P₃,以及两个控制点 P₁、P₂。

贝塞尔曲线公式推导

贝塞尔曲线的推导其实是一个”两面一体”的过程:它的几何构建使用的是 De Casteljau(德卡斯特里奥)递推算法,而它的代数本质展现出来就是伯恩斯坦多项式(Bernstein Polynomials)。

前面我们已经通过 De Casteljau 算法演示了贝塞尔曲线的几何绘制过程,下面我们以二阶贝塞尔曲线为例,从几何递推出其代数公式。

二阶贝塞尔曲线由三个点 定义。我们按照 De Casteljau 算法的逻辑进行嵌套插值:

1. 第一层插值: - 在线段 上按比例 取一个动点,记为 - 在线段 上按比例 取一个动点,记为

2. 第二层插值: - 连接这两个新产生的点,得到一根动态移动的线段 。 - 再在这条新线段上,按照相同的比例 抽取最终的动点 (即曲线上的点 ):

3. 代数展开: - 将第一层的结果代入第二层:

这就是二阶贝塞尔曲线的代数形式。

通过类似的方法,我们可以推导出所有阶数的贝塞尔曲线公式:

  • 一阶:
  • 二阶:
  • 三阶:

更一般地, 阶贝塞尔曲线的递推定义(De Casteljau 算法)为:

其中 为初始控制点, 即为曲线上的点。

我们来观察一阶、二阶、三阶展开后的各项系数:

  • 一阶:
  • 二阶:
  • 三阶:

可以发现,这些系数恰好对应二项式展开式 的各项系数。令 ,那么:

按二项式定理展开:

这当中展开出来的每一个独立单项,在数学上被定义为 次伯恩斯坦多项式(Bernstein Polynomial)的基函数,通常记作

伯恩斯坦基函数有两个关键性质:

  • 非负性:对于 ,有
  • 单位分解性(Partition of Unity)

通过上面的几何递推和代数模式匹配,我们可以得出结论: 阶贝塞尔曲线,本质上就是控制点 以伯恩斯坦多项式为权重的加权平均组合。

通用的贝塞尔曲线显式公式为:

这是一个非常优美的结果——几何上的层层插值(De Casteljau),在代数上等价于伯恩斯坦基函数的线性组合。

贝塞尔曲线的核心特性

贝塞尔曲线之所以能成为计算机图形学、字体设计以及工业 CAD 建模的基石,是因为它具备一系列极其完美的数学与几何特性:

1. 端点内插性(Endpoint Interpolation)

曲线严格经过起点和终点

  • 数学表达:对于 阶贝塞尔曲线 ,当 时,曲线必定位于起点 ;当 时,曲线必定位于终点
  • 工程价值:这让多段曲线的拼接变得非常直观——只要让前一段的终点和后一段的起点坐标重合,就能实现无缝首尾相连(即 连续)。

2. 端点切线方向性(Endpoint Tangents)

曲线在起点和终点处的切线方向,严格由前两个点和后两个点决定

  • 具体表现
    • 在起点 处的切线矢量方向严格与控制边 相同。
    • 在终点 处的切线矢量方向严格与控制边 相同。
  • 交互价值:这就是矢量设计软件(如 Photoshop、Illustrator)中“钢笔工具手柄”的数学本质。手柄的方向决定了曲线飞离端点的角度,手柄的长度(控制点的距离)则决定了拉扯力的大小。此外,若要让两段贝塞尔曲线在拼接点处实现光滑过渡( 连续),只需保证前一段的 与后一段的 共线且同向即可。

3. 凸包性(Convex Hull Property)

整条贝塞尔曲线完全被包裹在所有控制点所围成的最小凸多边形(凸包)内部

  • 数学本质:由于伯恩斯坦基函数的非负性与单位分解性(各项系数之和恒为 1),曲线本质上是控制点的凸组合(Convex Combination)。凸组合的结果永远不可能超出控制点的凸包范围。
  • 工程价值(简化碰撞检测):在游戏引擎、自动驾驶路径规划或 CAD 渲染中,判断一条贝塞尔曲线是否撞击障碍物时,算法不需要计算曲线上成百上千个采样点。它只需要先判断控制点围成的凸多边形是否与障碍物相交——如果凸包未相交,则曲线绝对安全。这是一种非常高效的剔除(Culling)策略。

4. 仿射不变性(Affine Invariance)

对贝塞尔曲线进行旋转、平移、缩放、错切等仿射变换时,不需要先算出曲线上每一个高密度采样点的坐标再去进行变换。

  • 操作方法:只需要直接对那几个离散的控制点 进行矩阵变换,然后用变换后的新控制点直接生成新曲线,其结果与对整条曲线逐点变换完全等价。
  • 工程价值:这大幅节省了浮点数几何计算,使得图形引擎在实时处理曲线旋转、缩放等动画时运行飞快。

5. 变差缩减性(Variation Diminishing Property)

任意一条直线与贝塞尔曲线的交点个数,绝不会超过这条直线与该曲线控制多边形(由控制点顺次连接成的折线段)的交点个数。

  • 通俗理解:曲线比它的控制多边形还要”平顺”和”规矩”。如果控制多边形没有来回剧烈抖动,曲线本身就绝对不会无故折返或产生多余的波浪。
  • 设计价值:它保证了曲线的视觉可控性——曲线表现得永远比控制点更温顺,绝对不会出现设计师预料之外的莫名鼓包或尖角。

6. 几何对称性(Symmetry)

如果你把控制点的顺序完全颠倒过来(即把终点 当作起点,起点 当作终点),重新生成的贝塞尔曲线在空间中的几何形状和位置完全不变

  • 数学表达:由控制点序列 在参数 处生成的点,与由反向序列 在参数 处生成的点完全重合。只是随着时间推移,点的运动轨迹方向相反了而已。

贝塞尔曲面

把贝塞尔曲线从一维的空间曲线,拉伸拓宽到二维的空间曲面,就得到了贝塞尔曲面(Bézier Surface)。

贝塞尔曲面示意

基本思想

贝塞尔曲面的生成思路和贝塞尔曲线一脉相承——同样是”层层插值”。只不过,曲线只需要在一条线上来回插值,而曲面需要在一个控制点网格 两个方向上先后做插值。

具体来说:先沿 方向对每一行控制点分别做贝塞尔插值,得到一组”中间曲线”上的点;然后以这些点为新的控制点,再沿 方向做一次贝塞尔插值。经过这样一轮”先 “的插值,就能得到曲面上的一个点。让 各自从 0 变化到 1,便生成了整张曲面。

这种在两个方向上反复插值的做法,本质上和贝塞尔曲线里”在一根动态线段上再插值”是同一回事,只是多了一个维度。

工程应用

在实际工程中,最常用的是由 个控制点构成的双三次贝塞尔曲面——它相当于在两个方向上各用一条三次贝塞尔曲线来描述。和曲线的道理一样,三次在灵活性与计算开销之间取得了最好的平衡。

贝塞尔曲线的大多数优良性质(端点内插性、凸包性、仿射不变性等)在曲面上同样成立,这使得贝塞尔曲面在工业设计(如汽车车身建模)、三维动画(如角色曲面建模)以及 CAD/CAM 系统中得到了广泛应用。

总结

  • 贝塞尔曲线通过 De Casteljau 递推算法(层层线性插值)构建,其代数本质是伯恩斯坦基函数的线性组合。它具备端点内插性、凸包性、仿射不变性等优良特性,是矢量图形、字体设计与动画曲线的基础。
  • 贝塞尔曲面是贝塞尔曲线在二维上的自然延伸——在控制点网格上沿两个方向分别做贝塞尔插值即可生成曲面,在工业建模与三维动画中应用广泛。

这次的插图来自画师 Fangpe

图片地址:https://www.pixiv.net/artworks/143019582

本文作者:DongGu
本文链接:https://donggu.xyz/2026/06/08/图形学入门/贝塞尔曲线与曲面/
版权声明:本文采用 CC BY-NC-SA 3.0 CN 协议进行许可