B样条曲线(详细解析版)

B样条曲线(详细解析版)

前言

在学习本篇内容之前,大家可以通过下面链接的网站可视化操作一下B样条曲线,感受它的魅力:B样条可视化。也推荐大家去听中国农业大学赵明老师在计算机图形学中讲的这块内容:B样条曲线视频讲解。本篇文章有误的地方也欢迎大家批评指正!

B样条产生的背景

贝塞尔曲线的缺点

  1. 一旦确定了特征多边形的顶点数(n+1个),也就决定了曲线的阶次(n次)。若顶点数特别多,如有100个顶点,多项式就有99次,求导以后就有98个导数为0的点(极值点),所以曲线震荡现象很严重(龙格现象)。
  2. 贝塞尔曲线的拼接比较复杂
  3. **重要缺陷:**贝塞尔曲线不能作局部修改(牵一发而动全身)

B样条曲线的提出

1972年,Gordon,Riesenfeld等人提出了B样条方法,在保留贝塞尔方法全部优点的同时,克服了贝塞尔方法的弱点。 样条(spline)——分段连续多项式

B样条曲线整条曲线用一个完整的表达形式,但内在的量是一段一段的。比如一堆的3次曲线拼接,两条之间又满足2次连续。这样既克服了波动现象,曲线又是低次的。

如何进行分段呢?

现在有n+1个点,每两个点之间构造一条多项式,n+1个点就有n个小区间。每个小区间构造一条三次多项式,变成了n段的三次多项式拼接在一起,段与段之间要两次连续,这就是三次样条。

若有5个点,构造一个多项式,应该是一个四次多项式。现在采用样条方式构造四段曲线,每一段都是三次的,且段与段之间要满足二阶几何连续。

B样条曲线定义

B样条曲线的数学表达式

在这里插入图片描述
其中在这里插入图片描述是控制多边形的顶点。

对比贝塞尔表达式:在这里插入图片描述

对比不同点:

  1. 贝塞尔曲线的伯恩斯坦基函数由i,n决定,即与控制多边形顶点的个数决定;而B样条曲线伯恩斯坦基函数由i,k决定,即与控制顶点的个数n无关,只与阶数有关。
  2. 贝塞尔曲线参数的取值为[0,1],而B样条曲线参数的取值为[uk-1,un+1]。
  3. 对贝塞尔曲线来说,阶数和次数是一样的;但对B样条,阶数是次数加1。

Bi,k(u)称为k阶(k-1次)B样条基函数,k是刻画次数的。其中k可以是2到控制点个数n+1之间的任意整数。

eg:2阶的B样条基函数,就是一次多项式,即一个直线

B样条基函数是一个称为节点矢量的非递减的参数u的序列所决定的k阶分段多项式,这个序列称为节点向量。

在这里插入图片描述

B样条基函数实际上就是一个比较复杂的、有特点的多项式,如何得到这个B样条基函数?

de Boor-Cox递推定义

B样条基函数可以有各种各样的定义方式,但是公认的最容易理解的是de Boor-Cox递推定义。

**原理:**只要是k阶(k-1次)的B样条基函数,构造一种递推的公式,由0次构造1次,1次构造2次,2次构造3次…依次类推

定义: 在这里插入图片描述

该递推公式表明:若确定第i个k阶B样条Bi,k(u),需要用到ui,ui+1,…,ui+k共k+1个节点,称区间[ui,ui+k]为Bi,k(u)的支撑区间(不为0的区间)。

eg:Bi,1(u)是一阶0次B样条,根据定义得出图像:在这里插入图片描述

Bi,2(u)2阶1次B样条根据递推定义得:在这里插入图片描述

在这里插入图片描述在这里插入图片描述
代入计算可得结果:

在这里插入图片描述

(一定要自己手推一下,看着很复杂,其实自己代入定义计算一下特别简单且有利于理解!!!)

所以,2阶一次的B样条Bi,2(u)可以由两个1阶0次的B样条Bi,1(u)和Bi+1,1(u)递推得到。

同理反着推,有两个2阶一次的B样条Bi,2(u)和Bi+1,2(u)递推得到3阶2次B样条Bi,3(u)

在这里插入图片描述

由B样条曲线定义式可知每个控制点pi都有一个基函数Bi,k(u)与之匹配,一共有n+1个控制点就有n+1个基函数

Bi,k(u),曲线的次数是k-1次,问题是这条曲线的定义区间是什么?(贝塞尔曲线的定义区间[0,1])以及对n+1个顶点,k阶的B样条曲线需要多少个节点向量(ui)与之匹配?

K阶B样条曲线对应的节点向量数

在这里插入图片描述

根据de Boor-Cox递推式得:

对于Bi,1(u)(1阶0次基函数)来说,涉及到ui到ui+1一个区间,即一阶的多项式涉及一个区间的两个节点;

而Bi,2(u)是由Bi,1(u)和Bi+1,1(u)组成,因此涉及到2个区间([ui,ui+1]和[ui+1,ui+2])3个节点(有一个节点重叠);

Bi,3(u)涉及3个区间4个节点…,Bi,k(u)涉及k个区间k+1个节点

因为i取值范围为[0,n],所以根据递推式可以逐步推得出k阶B样条对应的节点向量为 : 在这里插入图片描述

B样条函数定义区间

以k=4(4阶),n=4(5个控制点)为例,根据上面得出k阶B样条对应节点向量数可知本例节点矢量为:在这里插入图片描述

根据B样条曲线的定义式在这里插入图片描述可知:

第一项为p0B0,4(u),涉及节点u0到u4;(解释:i∈[0,n]时,k阶B样条对应的节点向量为u0,u1…,un+k,可知涉及节点为u0到un+k=0+4,且由上述Bi,k(u)涉及k个区间k+1个节点这个结论可知B0,4(u)涉及5个节点符合结论)

第二项为p1B1,4(u),涉及节点u1到u5;······

第五项为p1B1,4(u),涉及节点u4到u8

箭头对应关系为:

在这里插入图片描述

阶数(k)+顶点(n)=节点向量个数,求函数的定义区间?

区间要合法,区间里必须要有足够的基函数与顶点配对。(例如取u0到u1为定义区间,但次区间只有第一项涉及到这个区间,其他基函数与此区间都不相关,所以区间不合法。由图像可知,u3到u5涉及的基函数最多)

上图区间是u3到u5(从uk-1到un+1),B样条基函数严重依赖于节点向量的分布。

曲线依据定义区间被分成两段:[u3,u4]和[u4,u5]。如果有5个顶点p0,p1,p2,p3,p4,B样条是一段段过渡过去的。

p0,p1,p2,p3在区间[u3,u4]有定义,p1,p2,p3,p4在区间[u4,u5]有定义,两端之间有三个顶点是一样的,这样就保证了两段拼接效果非常好。

B样条的性质

B样条基函数的主要性质

  1. 局部支撑性:在这里插入图片描述B样条曲线在参数范围内非零,其他区间为0,;而贝塞尔曲线在整个定义区间非0

    反过来,对每一个区间(ui,ui+k),至多只有k个基函数在其上非零

  2. 权性:在这里插入图片描述

  3. Bi,k(u)在r重节点处的连续阶不低于k-1-r

  4. 分段参数多项式:Bi,k(u)在每个长度非零的区间[ui,ui+1)上都是次数不高于k-1的多项式,它在整个参数轴上是分段多项式

B样条函数的主要性质

  1. **局部性:**k阶B样条曲线上的一点至多与k个控制顶点有关,与其他控制顶点无关。移动曲线的第i个控制顶点pi,至多影响到定义在区间上那部分曲线的形状,对曲线其余部分不发生影响;
  2. 变差缩减性:设平面内n+1个控制顶点构成B样条曲线P(t) 的特征多边形。在该平面内的任意一条直线与P(t) 的交点个数不多于该直线和特征多边形的交点个数;
  3. 几何不变性:B样条曲线的形状和位置与坐标系的选择无关;
  4. 凸包性:B样条曲线落在Pi构成的凸包之中。其凸包区域小于或等于同一组控制顶点定义的贝塞尔曲线凸包区域;

B样条曲线类型的划分

均匀B样条曲线(uniform B-spline curve)

当节点沿参数轴均匀等距分布,即ui+1-ui=常数>0时,表示均匀B样条函数

eg:{0,1,2,3,4,5,6} {0,0.2,0.4,0.6,0.8,1}

均匀B样条的基函数呈周期性。即给定n和k,所有的基函数都有相同的形状。每个后续基函数仅仅是前面基函数在新位置上的重复:

在这里插入图片描述

其中,△u为相邻节点值的间距

准均匀B样条曲线(Quasi-uniform B-spline curve)

与均匀B样条曲线的差别在于两端节点具有重复度k,这样的节点矢量定义了准均匀的B样条基函数。

eg: {0,0,0,1,2,3,4,5,5,5}

在这里插入图片描述

均匀B样条曲线没有保留贝塞尔曲线端点的几何性质(过特征多边形首尾两个端点),采用准均匀B样条曲线可以解决这个问题

分段贝塞尔曲线(Piecewise Bezier Curve)

节点矢量中两端节点具有重复度k,所有内节点重复度为k-1,这样的节点矢量定义了分段的伯恩斯坦基函数

在这里插入图片描述

优点:

  1. B样条曲线用分段贝塞尔曲线表示后,各曲线段就具有了相对独立性;
  2. 贝塞尔曲线一整套简单有效的算法都可以原封不动的采用。

缺点:

​ 增加了定义曲线的数据,控制顶点数以及节点数

非均匀B样条曲线(non-uniform B-spline curve)

当节点沿参数轴的分布不等距,即ui+1-ui不等于常数时,表示非均匀B样条函数

  • 29
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值