1.背景
贝塞尔曲线的缺点:
①只要改动一个点,那么整条曲线都会变动。
② n+1 个节点的贝塞尔曲线是 n+1 次的,次数太高。
基于这些种种原因,后人就提出了B样条,它也是使用较低次的分段多项式,来拟合多个控制点,同时使曲线具有一定的光滑性。
2.一些基本概念
样条:样条就是分段连续多项式,而且在全曲线上有限阶可导/连续。
支撑集:在数学中,一个定义在集合X上的实值函数f的支撑集,或简称支集,是指X的一个子集,满足f恰好在这个子集上非0。
3.B样条的表达式
B样条除了控制点之外,还有另一类点,叫做节点,是用来分段的。B样条的数学表达式为:
Pi控制点,i是控制点个数
这里的 {tj} 就是节点,是人为给定的。
k也是一个给定的正整数,称为B样条的次数
k+1称为B样条的阶数。
(1)确定Bi,k
下面的递推公式称为Cox-deBoor公式,我们就按这个公式来确定 Bi,k:
①需要的节点数
由递推公式,
Bi,1涉及到i,i,i+1,i+2三个节点
Bi,2涉及到i,i+1,i+2,i+3四个节点
以此类推,Bi,k需要用到 i 到 i+k+1 ,共 k+2 个节点
因为控制点最多是 n ,所以节点最大的下标应该是 n+k+1.我们需要的节点为:
有节点数m= n+k+1
(2)确定节点tj
我们讨论Bi,k的光滑性和支撑集
1)k 0:k
Bi,0不连续
Bi,1:
2)i 0:n
由此可见,最小的取值范围就是,它和所有的支撑集都有交。因此,我们找到了B样条最终的表达式:
一些属性: