0%

从Bernstein多项式到Bézier曲线

By Z.H. Fu
https://fuzihaofzh.github.io/blog/
  因为需要用FFD(Free Form Deformation)故而今天又学习了一下Bernstein多项式。现在将笔记记录如下。

首先给出Bernstein多项式:
  $$b_{\nu,n}(x)=\binom{n}{\nu}x\nu(1-x){n-\nu},\nu=0,…,n.$$
  其中x[a,b],(nν)x\in[a,b],\binom{n}{\nu}是二项式系数。

我们再来回顾一下Bernstein多项式产生的历史。Bernstein多项式曾经被用来证明威尔斯特拉斯逼近定理(Weierstrass approximation theorem)。这个定理的大概意思是说:在[a,b][a,b]区间上所有的连续函数都可以用多项式来逼近。而且收敛性很强,是一致收敛。也就是说,可以将函数写成若干个Bernstein多项式相加的形式,而且,随着nn\rightarrow \infty,该多项式将一致收敛到原函数!用表达式表示如下:
  $$B_n(f)(x)=\sum^n_{\nu=0}f(\frac{\nu}{n})b_{\nu,n}(x)$$
  其中x[0,1]x\in[0,1],当nn\rightarrow \infty时,该多项式收敛到原函数:
  $$\lim_{n\rightarrow \infty}B_n(f)(x)=f(x)$$
  好,我们发现这个跟傅里叶展开一模一样,所不同的是这里用的是多项式函数,Bernstein多项式在这里充当着基函数的角色。我们自然想到,能不能舍掉一些“高频分量”得到函数的大概形状?答案是显然的。我们选取若干个点,用这几个函数值来构造Bernstein多项式,得出的多项式就是一种“滤波”后的函数。

以下引出Bézier曲线。我们现在单纯地从基于分量的关系来看,我们有:
  $$B_n(x)=\sum^n_{\nu=0}\beta_\nu b_{\nu,n}(x)$$
  其中βν\beta_\nu是基函数的系数。将βν\beta_\nu取成一些点,我们有:
  $$\mathbf{B_n(x)}=\sum^n_{\nu=0}\mathbf{P_\nu} b_{\nu,n}(x),x\in[0,1]$$
Pν\mathbf{P_\nu}是我们给的点的坐标,而当xx从0到1扫过时,我们就得到了一条曲线,这就是Bézier曲线。一个直观的图形如下:
  
  Bezier

参考文献:

Bernstein polynomial

https://en.wikipedia.org/wiki/Bernstein_polynomial

Bézier curve

https://en.wikipedia.org/wiki/Bézier_curve