B样条曲线

引言

平滑的分片多项式空间是一种很好的函数逼近类。本文首先从截断函数角度出发以构造性的方式产生平滑分片多项式,即均匀B样条基函数,以及更一般的非均匀B样条基函数,并介绍基函数自身以及通过控制点、节点和对应基函数产生的B样条曲线的一些性质。

截断函数平滑

截断函数:定义在实数轴上,且只在一段区间上值为1,该区间以外值全为零的函数称为截断函数。
函数插值:给定定义在实数轴上的四个函数 f ( x ) f(x) f(x), g ( x ) g(x) g(x), u ( x ) u(x) u(x), v ( x ) v(x) v(x), I ( x ) = f ( x ) u ( x ) + g ( x ) v ( x ) I(x)=f(x)u(x)+g(x)v(x) I(x)=f(x)u(x)+g(x)v(x)叫做 f ( x ) f(x) f(x), g ( x ) g(x) g(x)关于 u ( x ) u(x) u(x) v ( x ) v(x) v(x)的插值, u ( x ) u(x) u(x) v ( x ) v(x) v(x)称为插值函数。

给定一族定义在均匀区间上的截断函数 N i 1 ( x ) = { 1 , x ∈ [ i , i + 1 ) 0 , o t h e r N_{i}^{1}(x)=\left\{\begin{matrix}1,x\in[i,i+1) \\0,other \end{matrix}\right. Ni1(x)={ 1,x[i,i+1)0,other
(上标1表示该截断函数还未进行平滑操作,每进行一次操作上标+1)

下面介绍使用这种简单的截断函数以及一些线性函数通过函数插值生成一些平滑曲线的方法。先从下面的一个简单例子开始:

给定一个区间[0,1)上的截断函数 N 0 1 ( x ) N_{0}^{1}(x) N01(x),首先向右平移一个单位获得另一个区间[1,2)上的截断函数 N 1 1 ( x ) N_{1}^{1}(x) N11(x),接着定义两个值域为[0,1]、斜率相反、非零区间分别与 f ( x ) f(x) f(x) g ( x ) g(x) g(x)相同的线性插值函数 u ( x ) u(x) u(x) v ( x ) v(x) v(x)。具体来说, u ( x ) u(x) u(x)在[0,1]上是经过(0,0)和(1,1)的线性函数,在该区间外值为0。 v ( x ) v(x) v(x)在[1,2]上是经过(1,1)和(2,0)的线性函数,在该区间外值为0。最后做 N 0 1 ( x ) N_{0}^{1}(x) N01(x), N 1 1 ( x ) N_{1}^{1}(x) N11(x)关于 u ( x ) u(x) u(x), v ( x ) v(x) v(x)的插值,即 u ( x ) N 0 1 ( x ) + v ( x ) N 1 1 ( x ) u(x)N_{0}^{1}(x)+v(x)N_{1}^{1}(x) u(x)N01(x)+v(x)N11(x),记为 N 0 2 ( x ) N_{0}^{2}(x) N02(x)。如下图

函数关系为 N 0 2 ( x ) = x N 0 1 ( x ) + ( 2 − x ) N 1 1 N_{0}^{2}(x)=xN_{0}^{1}(x)+(2-x)N_{1}^{1} N02(x)=xN01(x)+(2x)N11

容易得到最终函数的解析式为 { x , x ∈ [ 0 , 1 ) 2 − x , x ∈ [ 1 , 2 ) 0 , o t h e r \left\{\begin{matrix}x,x\in[0,1) \\2-x, x\in[1,2) \\0,other \end{matrix}\right. x,x[0,1)2x,x[1,2)0,other
操作一次之后,非零区间的长度增长。原先的 N 0 1 ( x ) N_{0}^{1}(x) N01(x)在区间端点处是不连续的,即 C − 1 C^{-1} C1连续,经过一次插值操作之后,在任一点都是 C 0 C^{0} C0连续。同时在区间(0,2)中是分片一次多项式,在每一片上是 C 1 C^{1} C1连续的,同时在端点1处是 C 0 C^{0} C0连续的。

如果不满足于一次多项式的阶数,我们可以对 N 0 2 ( x ) N_{0}^{2}(x) N02(x)再进行一次类似的插值操作,只需根据区间不同对插值函数做一点点改变,首先将 N 0 2 ( x ) N_{0}^{2}(x) N02(x)向右平移一个单位获得一个形状完全相同的函数记为 N 1 2 ( x ) N_{1}^{2}(x) N12(x)。新的插值函数 u ( x ) u(x) u(x)在[0,2]上是经过(0,0)和(2,1)的线性函数,在该区间外为0。 v ( x ) v(x) v(x)在[2,3]上是经过(2,1)和(3,0)的线性函数,在该区间外为0。最后做 N 0 2 ( x ) N_{0}^{2}(x) N02(x), N 1 2 ( x ) N_{1}^{2}(x) N12(x)关于 u ( x ) u(x) u(x), v ( x ) v(x) v(x)的插值。如下图

最终函数我们记为 N 0 3 ( x ) N_{0}^{3}(x) N03(x),它的解析式不是很显然,但是我们容易得到如下函数关系式。
N 0 3 ( x ) = t 2 N 0 2 ( x ) + 3 − t 2 N 1 2 ( x ) N_{0}^{3}(x)=\frac{t}{2}N_{0}^{2}(x)+\frac{3-t}{2}N_{1}^{2}(x) N03(x)=2tN02(x)+23tN12(x)其中 N 1 2 ( x ) N_{1}^{2}(x) N12(x)是直接通过平移得到,但只要仔细观察,可以发现这个函数可以通过区间[1,2)上的截断函数 N 1 1 ( x ) N_{1}^{1}(x) N11(x)模仿第一次平滑操作得到。它的解析式为 { x − 1 , x ∈ [ 1 , 2 ) 3 − x , x ∈ [ 2 , 3 ) 0 , o t h e r \left\{\begin{matrix}x-1,x\in[1,2) \\3-x,x\in[2,3) \\0,other \end{matrix}\right. x1,x[1,2)3x,x[2,3)0,other,代入上面关系式中计算可以得到 N 0 3 N_{0}^{3} N03的解析式为
{ x 2 2 , x ∈ [ 0 , 1 ) − x 2 + 3 x − 3 2 , x ∈ [ 1 , 2 ) 1 2 x 2 − 3 x + 9 2 , x ∈ [ 2 , 3 ) 0 , o t h e r \left\{\begin{matrix}\frac{x^{2}}{2},x\in[0,1) \\-x^{2}+3x-\frac{3}{2},x\in[1,2) \\\frac{1}{2}x^{2}-3x+\frac{9}{2},x\in[2,3) \\0,other \end{matrix}\right. 2x2,x[0,1)x2+3x23,x[1,2)21x23x+29,x[2,3)0,other
容易看出函数在区间(0,3)中是分片二次多项式,在每一片上是 C 2 C^2 C2连续的,且容易证明该函数在端点1,2处都是 C 1 C^{1} C1连续的。

类似的操作继续进行我们可以获得更大区间上的分片高阶多项式,同时在每片端点处都有很好的连续性。要注意的是每一步操作中插值函数 u ( x ) , v ( x ) u(x),v(x) u(x),v(x)都是值域为[0,1]的线性函数,它们的非零区间与两个被插值函数相同。每一步操作之后非零区间长度都会增加。下面是 N 0 1 N_{0}^{1} N01经过六次操作之后的每一次操作产生的图形。

我们可以不只从 N 0 1 ( x ) N_{0}^{1}(x) N01

  • 6
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值