B样条曲线——de Boor递推算法实现
1. 定义
为保留Bezier方法的优点,B样条曲线的方程定义为
P ( t ) = ∑ i = 0 n P i N i , k ( t ) P(t)=\sum_{i=0}^n P_i N_{i,k}(t) P(t)=i=0∑nPiNi,k(t)
其中, P i ( i = 0 , 1 , … , n ) P_i(i=0,1,\dots,n) Pi(i=0,1,…,n)是控制多边形的顶点, N i , k ( t ) ( i = 0 , 1 , … , n ) N_{i,k}(t)(i=0,1,\dots,n) Ni,k(t)(i=0,1,…,n)称为 k k k阶( k − 1 k-1 k−1次)B样条基函数,其中每一个称为B样条,它是一个由称为节点矢量的费递增参数 t t t的序列 T T T: t 0 ≤ t 1 ≤ ⋯ ≤ t n + k t_0 \le t_1 \le \dots \le t_{n+k} t0≤t1≤⋯≤tn+k所决定的 k k k阶分段多项式,即为 k k k阶( k − 1 k-1 k−1次)B多项式样条。
下面是基函数的递推公式,也称为de Boor-Cox公式:
{ N i , 1 ( t ) = { 1 , t i ≤ t ≤ t i + 1 0 , t < t i 或者 t ≥ t i + k N i , k ( t ) = t − t i t i + k − 1 − t i N i , k − 1 ( t ) + t i + k − t t i + k − t i + 1 N i + 1 , k − 1 ( t ) . k ≥ 2 \begin{cases} N_{i,1}(t) = \begin{cases}&1 ,t_i \le t \le t_{i+1} \\ & 0, t < t_i \text{或者} t \ge t_{i+k} \end{cases} \\ N_{i,k}(t)=\frac{t-t_i}{t_{i+k-1}-t_i}N_{i,k-1}(t)+\frac{t_{i+k}-t}{t_{i+k}-t_{i+1}}N_{i+1,k-1}(t).\quad k \ge 2 \end{cases} ⎩⎪⎨⎪⎧Ni,1(t)={
1,ti≤t≤ti+10,t<ti或者t≥ti+kNi,k(t)=ti+k−1−tit−tiNi,k−1(t)+ti+k−ti+1ti+k−tNi+1,k−1(t).k≥2<