贝赛尔(Bezier)曲线
介绍
贝塞尔曲线是一种通过控制点生成光滑曲线的经典数学参数曲线,由法国工程师皮埃尔·贝塞尔于1962年公开发表,是现代计算机图形学的核心基础工具之一。
!ratio\[\]720417_720417
!ratio\[\]720436_720436
核心基础特性
- 端点插值性:曲线一定会经过定义它的起点和终点,起点处的切线方向与前两个控制点连线方向一致,终点处的切线方向与最后两个控制点连线方向一致。
- 凸包性:整条曲线完全落在所有控制点围成的凸多边形内部,不会超出控制点的覆盖范围。
- 仿射不变性:对控制点做旋转、平移等仿射变换后,生成的曲线和直接对原曲线做变换的结果完全一致。
贝塞尔曲线核心公式
-
通用n阶公式对于n阶贝塞尔曲线,给定n+1个控制点 P 0 , P 1 , ... , P n P_0,P_1,\dots,P_n P0,P1,...,Pn,参数 t ∈ 0 , 1 t\in0,1 t∈0,1,曲线上任意点的坐标公式为: B ( t ) = ∑ i = 0 n ( n i ) P i ( 1 − t ) n − i t i B(t)=\sum_{i=0}^{n}\binom{n}{i}P_i(1-t)^{n-i}t^i B(t)=i=0∑n(in)Pi(1−t)n−iti 其中 ( n i ) = n ! i ! ( n − i ) ! \binom{n}{i}=\frac{n!}{i!(n-i)!} (in)=i!(n−i)!n!是二项式系数,也叫伯恩斯坦基多项式的系数。
-
常用低阶展开式
- 一阶(2个控制点): B ( t ) = ( 1 − t ) P 0 + t P 1 B(t)=(1-t)P_0 + tP_1 B(t)=(1−t)P0+tP1,本质是直线段。
- 二阶(3个控制点): B ( t ) = ( 1 − t ) 2 P 0 + 2 t ( 1 − t ) P 1 + t 2 P 2 B(t)=(1-t)^2P_0 + 2t(1-t)P_1 + t^2P_2 B(t)=(1−t)2P0+2t(1−t)P1+t2P2,为抛物线形态。
- 三阶(4个控制点,工业最常用): B ( t ) = ( 1 − t ) 3 P 0 + 3 t ( 1 − t ) 2 P 1 + 3 t 2 ( 1 − t ) P 2 + t 3 P 3 B(t)=(1-t)^3P_0 + 3t(1-t)^2P_1 + 3t^2(1-t)P_2 + t^3P_3 B(t)=(1−t)3P0+3t(1−t)2P1+3t2(1−t)P2+t3P3,可实现S形等复杂平滑曲线。
常见阶数与应用
| 阶数 | 控制点数量 | 核心特点 | 典型应用 |
|---|---|---|---|
| 一阶 | 2个 | 两点之间的直线插值 | 简单直线连接 |
| 二阶 | 3个 | 可实现基础弯曲效果 | TrueType字体轮廓定义 |
| 三阶 | 4个 | 能绘制S形等复杂曲线,灵活性最高 | 矢量绘图、动画路径、PostScript字体 |
| n阶 | n+1个 | 可实现更复杂的曲线形态,但阶数过高易出现抖动 | 特殊高精度造型场景 |
主流应用领域
- 设计软件:Photoshop、Illustrator的钢笔工具,SVG矢量图形路径,都以贝塞尔曲线为核心实现。
- 动画开发:After Effects关键帧过渡、CSS3动画缓动效果、游戏角色移动轨迹,都依靠贝塞尔曲线实现流畅的运动过渡。
- 工业设计:汽车、航空器的流线型外观设计,早期雷诺汽车的车身造型就是贝塞尔曲线的首个落地场景。
- 其他场景:医学图像处理中用于拟合器官轮廓,机器人视觉中用于重建弯曲形状。