B样条曲线学习笔记

20 sec read

由于与贝塞尔曲线高度相关,今天再来学习下B-样条曲线。

什么是样条?

样条从英文spline翻译过来的,由于没有实际参照对象,非常让人费解。B样条的数学定义更是让人匪夷所思。实际应用中,样条是一根富有弹性的细木条或塑料条。在应用CAD/CAM技术以前,航空、船舶和汽车制造业普遍采用手工绘制自由曲线。绘制员用压铁压住样条,使其通过所有给定的型值点,再适当地调整压铁,改变样条形态,直到符合设计要求。所以在绘图术语中,样条是通过一组指定点集而生成平滑曲线的柔性带。样条曲线(spline curve)原指用这种方式绘制的曲线。

  • 从力学角度考虑,样条可看作一弹性细梁,压铁是作用在梁上的集中载荷。由此,设计样条曲线的过程可抽象为:求弹性细梁在外加集中载荷作用下产生的弯曲变形。
  • 在数学上使用分段的三次多项式函数来描绘这种曲线,其中各曲线段的连接处有连续的一次和二次导数。
  • 在计算机图形学中,样条曲线指由多项式曲线段连接而成的曲线,在每段的边界处满足特定的连续性条件。

什么是B样条?

在学习B样条的知识之前,一定要首先了解Bezier曲线在外形设计的应用中存在一些具体的不足之处:

  • 确定了多边形的顶点数(m个),也就决定了所定义的Bezier曲线的阶次(m-1次),这样很不灵活。
  • 当顶点数(m)较大时,曲线的阶次将比较高。此时,多边形对曲线形状的控制将明显减弱。
  • Bezier的调和函数的值,在开区间(0,1)内均不为0。因此,所定义的曲线在(0<t<1)的区间内的任何一点均要受到全部顶点的影响,即改变其中任一个顶点的位置,都将对整条曲线产生影响,因此对曲线进行局部修改是不可能的。

B样条曲线,简单来说,它是对贝塞尔曲线的一个补充。为什么这样说呢?是因为贝塞尔曲线某些情况下不实用:曲线上每个点受所有控制点影响,这会给调整曲线工作带来麻烦。可以想到的第一个优化是,把整个贝塞尔曲线变成多段贝塞尔子曲线的拼接。然而,这个方案也不好用,因为拼接工作很难做好,因为要拼接曲线显得“光滑”前提是保证相邻曲线之间的连续性。

为了克服以上提到的在Bezier曲线中存在的问题,Gordon、Riesenfeld和Forrest等人拓展了Bezier曲线,用n次B样条基函数替换了伯恩斯坦基函数,构造了B样条曲线。B样条曲线除了保持Bezier曲线所具有的优点外,还增加了可以对曲线进行局部修改这一突出的优点。除此之外,它还具有对特征多边形更逼近以及多项式阶次较低等优点。

B样条是对贝塞尔曲线的一般化。因而,Bezier曲线能表达的,B样条也同样可以。而且,因为B样条引入了控制点个数与曲线阶次无关的特性,使得我们可以对低阶曲线有了更好的控制能力。而且,通过对节点序列的控制,使得我们对曲线有自由的调节能力。因此,B样条曲线在外形设计中得到了更广泛的重视和应用。

与Bezier曲线的定义相似,B样条曲线的定义是:给定n+1个控制点\{P_0,P_1,…,P_n\},m+1个节点\{u_0,u_1,…,u_m\},p阶B样条曲线C(u)=\sum_{i=0}^n N_{i,p}(u)P_i。相对Bezier曲线不同之处在于:

  • B样条的控制点个数与曲线次数无关,因此B样条的自由度更大,可以定义很多控制点又不用担心曲线次数过高而计算困难。
  • B样条有多个节点区间,使得其为分段函数,而Bezier曲线只有一个区间。

B样条取消与赛贝尔曲线的关系

  • B样条上任意一个区间[u_i,u_{i+1})上的曲线的定义都是一个Bezier。因此可以将B样条转为分段bezier曲线。
  • Bezier是一种特殊的样条曲线。

样条及B样条再Python中的使用

样条示例代码:(已废弃)

B样条示例代码:

参考链接:

打赏作者
微信支付标点符 wechat qrcode
支付宝标点符 alipay qrcode

协调过滤算法之ALS

ALS(alternating least squares) ALS是交替最小二乘的简称。在机器学习中,ALS
24 sec read

使用GridSearchCV进行网格搜索

GridSearchCV简介 在机器学习模型中,需要人工选择的参数称为超参数。比如随机森林中决策树的个数,人工
49 sec read

PageRank算法学习与研究

什么是PageRank PageRank,简称PR,是Google排名运算法则(排名公式)的一部分,是Goog
2 min read

发表评论

电子邮件地址不会被公开。 必填项已用*标注