贝塞尔曲线(Bézier curve)对于从事CG行业的工作者来说是最熟悉不过的了,无论二维软件亦或三维软件都少不了它的身影。它是用于计算机图形学和相关领域的参数曲线,更高维度的广泛化贝塞尔曲线就称作贝塞尔曲面,其中贝塞尔三角是一种特殊的实例。贝塞尔曲线最早来源于伯恩斯坦多项式,但因皮埃尔·贝塞尔于20世纪60年代设计雷诺汽车的曲线车身而得名,后来广泛应用于计算机图形领域。


贝塞尔曲线的演变

- 伯恩斯坦多项式 -

贝塞尔曲线由最原始的1912年就在数学界广为人知的数学公式伯恩斯坦多项式演变而来。简单理解,伯恩斯坦多项式可以用来证明,在[ 0, 1 ] 区间内所有的连续函数都可以用多项式来逼近,并且收敛性很强,也就是一致收敛。再简单点,就是一个连续函数,你可以将它写成若干个伯恩斯坦多项式相加的形式,并且,随着 n→∞,这个多项式将一致收敛到原函数,这个就是伯恩斯坦斯的逼近性质。

- 复杂公式的图形化 -

1959年。当时就职于雪铁龙的法国数学家 Paul de Casteljau 开始对伯恩斯坦多项式进行了图形化的尝试,并且提供了一种数值稳定的德卡斯特里奥(de Casteljau) 算法。(多数理论公式是建立在大量且系统的数学建模基础之上研究的规律性成果)根据这个算法,就可以实现通过很少的控制点,去生成复杂的平滑曲线,也就是贝塞尔曲线。

- 推广及应用 -

但贝塞尔曲线的声名大噪,不得不提到1962年就职于雷诺的法国工程师皮埃尔·贝塞尔(Pierre Bézier),他使用这种方法来辅助汽车的车体工业设计(最早计算机的诞生则是为了帮助美国海军绘制弹道图),并且广泛宣传(典型的理论联系实际并获得成功的示例),因此大家称为贝塞尔曲线 。


贝塞尔曲线的绘制

NO.01 | 二阶曲线

在平面内选3个不同线的点并且依次用线段连接,在AB和BC线段上找出点D和点E,使得 AD/AB = BE/BC,连接DE,在DE上寻找点F,F点需要满足:DF/DE = AD/AB = BE/BC,根据DE线段和计算公式找出所有的F点并将其连接起来。如第一个点是F1,第二点是F2(F必须满足DFn/DE = AD/AB = BE/BC)以此类推,直到最后连接上点C,如下图所示:

NO.02 | 三阶曲线

在平面内选4个不同线的点并且依次用线段连接,同二阶贝塞尔曲线一样首先需要在线段上找对应的点(E、F、G),对应的点必须要符合等比的计算规则,计算规则如下:AE/AB = BF/BC = CG/CD;找到对应的点以后接着依次链接EF、FG;接着在EF、FG线段上面继续找点H、I,对应的点依旧要符合等比的计算规则,也就是 EH/EF = FI/FG;最后连接H、I线段,在HI线段上面继续找点J、点J的计算规则需要符合:EH/EF = FI/FG = HJ/HI,重复步骤二的动作,找到所有的J点,依次将J点连接起来就得到了三阶贝赛尔曲线。

NO.02 | 多阶曲线

以四阶曲线为例,平面上选取5个点并连接,依次选择满足等比关系的点并连接,最后将所有的点 J 连起来就能得到一条光滑的曲线,N阶曲线亦是以此类推。


贝塞尔曲线的应用

NO.01 | 计算机图形

贝塞尔曲线广泛用于计算机图形学中平滑曲线模拟。由于所有的控制点都位在曲线上,因此可以以图形方式显示这些点并用于直观地操纵曲线。通过在曲线的控制点上应用相应的变换,可以在曲线上应用诸如平移和旋转的仿射变换。一般的矢量图形软件通过它来精确画出曲线,贝塞尔曲线由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋,我们在绘图工具上看到的钢笔工具就是来做这种矢量曲线的。

NO.02 | 路径动画

路径动画是贝塞尔曲线一个十分常用的功能,就是规划物体的运动轨迹,让动画目标能够沿曲线平滑的实现移动动画,也就是让物体沿着贝塞尔曲线运动,而不是机械的直线运动,并且可以很好地控制其速度,例如从A移动到B的图标,不是简单地以每步的固定数量的像素移动。当动画师或界面设计师谈论操作的“物理”或“感觉”时,他们可能指的是用于控制所讨论的移动的时间速度的特定贝塞尔曲线。