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

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

\[b_{i,n}(t) = \binom{n}{i}\cdot t^{i} \cdot (1-t)^{(n-i)}, \quad t\in[0, 1]\]

其中 i=0, 1, …, n, 而\(\binom{n}{i} = \frac{n!}{i!(n-i)!}\)是二项式系数。

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

\[B_n(t) = \sum_{i=0}^{n}\beta_i \cdot b_{i, n}(t)\]

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

性质

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

  • 对称性:\(b_{i,n}(t) = b_{n-i,n}(1-t)\)

  • 正性:\(b_{i,n}(t) \geqslant 0\)

  • 归一化:\(\sum_{i=0}^{n}b_{i, n}(t) = 1\)

  • 极值:

\(i\neq 0, n\) 时,\(b_{i,n}(t)\) 有且只有一个极大值点,位于 \(t=\frac{i}{n}\),值为

\(b_{i,n}(\frac{i}{n}) = i^i\cdot n^{-n} \cdot (n-i)^{n-i} \binom{n}{i}\)

  • 临近项关系

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

\(b_{i,n-1}(t) = \frac{n-i}{n}b_{i,n}(t) + \frac{i+1}{n}b_{i+1,n}(t)\)

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

\(b_{i,n}^{‘}(t) = n\cdot[b_{i-1,n-1}(t)-b_{i,n-1}(t)]\)

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

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

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

  • 端点:

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

\(\begin{align} b_{i,n}(0) &= \delta_{i, 0} \newline b_{i,n}(1) &= \delta_{i, n} \end{align}\)

其中,\(\delta_{i,j} = \begin{cases} 0, &i \neq j \newline 1, &i = j \end{cases}\),是 Kronecker \(\delta\) 函数。

  • 积分:\(\int_{0}^{1} b_{i,n}(t) dt = \frac{1}{n+1}\)

多项式前几阶结果

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

零阶:

\(\begin{align} b_{0,0}(t) &= 1 \end{align}\)

一阶:

\(\begin{align} b_{0,1}(t) &= 1-t \newline b_{1,1}(t) &= t \end{align}\)

二阶:

\(\begin{align} b_{0,2}(t) &= (1-t)^2 \newline b_{1,2}(t) &= 2(1-t)t \newline b_{2,2}(t) &= t^2 \end{align}\)

三阶:

\(\begin{align} b_{0,3}(t) &= (1-t)^3 \newline b_{1,3}(t) &= 3(1-t)^2t \newline b_{2,3}(t) &= 3(1-t)t^2 \newline b_{3,3}(t) &= t^3 \end{align}\)

四阶:

\(\begin{align} b_{0, 4}(t) &= (1-t)^4 \newline b_{1, 4}(t) &= 4(1-t)^3t \newline b_{2, 4}(t) &= 6(1-t)^2t^2 \newline b_{3, 4}(t) &= 4(1-t)t^3 \newline b_{4, 4}(t) &= t^4 \end{align}\)

五阶:

\(\begin{align} b_{0, 5}(t) &= (1-t)^5 \newline b_{1, 5}(t) &= 5(1-t)^4t \newline b_{2, 5}(t) &= 10(1-t)^3t^2 \newline b_{3, 5}(t) &= 10(1-t)^2t^3 \newline b_{4, 5}(t) &= 5(1-t)t^4 \newline b_{5, 5}(t) &= t^5 \end{align}\)

贝塞尔曲线

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

\(B_n(t) = \sum_{i=0}^{n}\beta_i \cdot b_{i, n}(t)\)

其中,\(b_{i,n}(t) = \binom{n}{i}\cdot t^{i} \cdot (1-t)^{(n-i)}, \quad t\in[0, 1]\)

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

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

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

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

线性曲线

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

\(B(t) = P_0 \cdot (1-t) + P_1 \cdot t = P_0 + (P_1 – P_0) \cdot t\)

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

二次方曲线

对二阶伯恩斯坦多项式展开,得到如下形式:\(B(t) = P_0 \cdot (1-t)^2 + P_1\cdot 2(1-t)t + P_2 \cdot t^2\)

B(t) 对 t 求导,得到下式:\(B'(t) = 2(1-t)\cdot (P_1 – P_0) + 2t\cdot (P_2 – P_1)\)

把两个端点代入式子中:

\[\begin{align} B'(0) &= 2 (P_1 – P_0) \newline B'(1) &= 2 (P_2 – P_1) \end{align}\]

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

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

三次方曲线

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

\(B(t) = P_0 \cdot (1-t)^3 + P_1\cdot 3(1-t)^2t + P_2 \cdot 3(1-t)t^2 + P_3 \cdot t^3\)

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

\(B'(t) = 3(1-t)^2\cdot (P_1 – P_0) + 6(1-t)t\cdot (P_2 – P_1) + 3t^2\cdot(P_3 – P_2)\)

代入端点值:

\(\begin{align} B'(0) &= 3 (P_1 – P_0) \newline B'(1) &= 3 (P_3 – P_2) \end{align}\)

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

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

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

四次方曲线

五次方曲线

参考