我们在研究贝塞尔曲线的时候,首先遇到的就是伯恩斯坦多项式(Bernstein polynomial),为此,有必要专门开出一篇文章来探讨伯恩斯坦多项式的性质。当伯恩斯坦系数是二维平面中的一系列固定点时,伯恩斯坦多项式就演变成了贝塞尔曲线。

从定义出发,伯恩斯坦多项式的第n阶项有如下形式:

bi,n(t)=(ni)ti(1t)(ni),t[0,1]

其中 i=0, 1, …, n, 而(ni)=n!i!(ni)!是二项式系数。

伯恩斯坦 n 阶多项式可以形成一组 n 阶指数多项式的基底。一般伯恩斯坦多项式可以表示为:

Bn(t)=i=0nβibi,n(t)

其中,βi 叫做伯恩斯坦系数。读者看到这个形式可能一下子就联想到贝塞尔曲线了。是的,这就是贝塞尔曲线的函数形式。

性质

伯恩斯坦多项式满足如下性质:

  • 对称性:bi,n(t)=bni,n(1t)

  • 正性:bi,n(t)0

  • 归一化:i=0nbi,n(t)=1

  • 极值:

i0,n 时,bi,n(t) 有且只有一个极大值点,位于 t=in,值为

bi,n(in)=iinn(ni)ni(ni)

  • 临近项关系

伯恩斯坦多项式的项总是可以表示为两个比他高一阶项的线性组合

bi,n1(t)=ninbi,n(t)+i+1nbi+1,n(t)

而其导数可以表示为两个低一阶项的线性组合

bi,n(t)=n[bi1,n1(t)bi,n1(t)]

当然这里需要考虑到一个约定,即当 i<0 或 i>n 时,(ni)=0

这是很容易理解的。二阶项系数的含义是在不考虑顺序的情况下,从 n 中挑选出子集大小为 i 的可能性有多少。当 i<0 或 i>n 时,其可能性当然为零。

由此,我们也知道,当 i<0 或 i>n 时,bi,n(t)=0

  • 端点:

当 t=0 或 t=1 时,其结果满足

(1)bi,n(0)=δi,0(2)bi,n(1)=δi,n

其中,δi,j={0,ij1,i=j,是 Kronecker δ 函数。

  • 积分:01bi,n(t)dt=1n+1

多项式前几阶结果

通过求取多项式的前几阶结果,并画出相应的函数图,可以很直观地验证上述伯恩斯坦多项式的几个性质。

零阶:

(3)b0,0(t)=1

一阶:

(4)b0,1(t)=1t(5)b1,1(t)=t

二阶:

(6)b0,2(t)=(1t)2(7)b1,2(t)=2(1t)t(8)b2,2(t)=t2

三阶:

(9)b0,3(t)=(1t)3(10)b1,3(t)=3(1t)2t(11)b2,3(t)=3(1t)t2(12)b3,3(t)=t3

四阶:

(13)b0,4(t)=(1t)4(14)b1,4(t)=4(1t)3t(15)b2,4(t)=6(1t)2t2(16)b3,4(t)=4(1t)t3(17)b4,4(t)=t4

五阶:

(18)b0,5(t)=(1t)5(19)b1,5(t)=5(1t)4t(20)b2,5(t)=10(1t)3t2(21)b3,5(t)=10(1t)2t3(22)b4,5(t)=5(1t)t4(23)b5,5(t)=t5

贝塞尔曲线

伯恩斯坦多项式的一般形式

Bn(t)=i=0nβibi,n(t)

其中,bi,n(t)=(ni)ti(1t)(ni),t[0,1]

是 n 阶伯恩斯坦基底多项式。而 βi 叫做伯恩斯坦系数。当伯恩斯坦系数是二维平面中的一系列固定点时,伯恩斯坦多项式就演变成了贝塞尔曲线。

我们先来看一个三阶贝塞尔曲线的例子:

在该例子中,共有四个坐标点(控制点)。读者可以尝试拖动四个控制点,看看贝塞尔曲线的形态变化。

结合伯恩斯坦多项式的前几阶展开式,我们可以得到相应的贝塞尔曲线形式。

线性曲线

对一阶伯恩斯坦多项式展开,得到如下形式:

B(t)=P0(1t)+P1t=P0+(P1P0)t

从公式可以看出,二阶展开式对应的是介于 P0P1 之间的线性插值点。其动态效果如下:

二次方曲线

对二阶伯恩斯坦多项式展开,得到如下形式:B(t)=P0(1t)2+P12(1t)t+P2t2

B(t) 对 t 求导,得到下式:B(t)=2(1t)(P1P0)+2t(P2P1)

把两个端点代入式子中:

(24)B(0)=2(P1P0)(25)B(1)=2(P2P1)

这个结果显示,位于 P0P2 点的两条切线相交于 P1 点。而当 t 从 0 逐渐变化到 1 的过程中, B(t) 点处的切线会从 P0P1 直线逐渐过渡到 P1P2 直线。其动态效果如下:

读者可以尝试拖动三个坐标点(控制点)看看曲线和切线的形态变化。

三次方曲线

和二次方曲线类似,我们先写出展开式:

B(t)=P0(1t)3+P13(1t)2t+P23(1t)t2+P3t3

接着对展开式求导,得到如下结果:

B(t)=3(1t)2(P1P0)+6(1t)t(P2P1)+3t2(P3P2)

代入端点值:

(26)B(0)=3(P1P0)(27)B(1)=3(P3P2)

结果显示,位于 P0P2 点的两条切线分别相交于 P1 点和 P2 点。而当 t 从 0 逐渐变化到 1 的过程中,B(t) 点处的切线会从 P0P1直线逐渐过渡到 P2P3 直线。其动态效果如下:

读者同样可以尝试拖动四个坐标点(控制点)来看看曲线和切线的形态变化。

四次方曲线和更高次的曲线,我们不做详细的讨论,只做动态曲线演示。其结论的推导方式和三次方、二次方曲线类似。感兴趣的读者可以自己推导。

四次方曲线

五次方曲线

参考