上一篇博客已经讲到了bezier曲线,本篇接着讲解B样条曲线。
B样条曲线是bezier曲线的更一般化,bezier曲线是B样条曲线的特列。相比于Bezier曲线,B样条曲线是分段组成的,每一段参数的区间都是[0,1],这就克服了Bezier曲线改变任意一个控制点,曲线上所有的点都要改变的缺点。
B样条曲线的数学公式如下:

其中di(i=0,1…n)为控制点,K为规定的基函数的次数,Ni,k(i=0,1…n)即为k次B样条基函数,最高次数为k。u表示参数序列,即B样条分段函数中的参数。
B样条基函数的公式如下:

其中i为节点序号,k是基函数的次数,规定:0/0等于0。这就是Cox-deBoor算法公式。
节点和控制点是不一样的,满足控制关系m+1=n+k+2.即假如有3个控制点控制的2次B样条曲线,其节点的数量为3+2+2=7.Boehm给出了节点的插入公式:

其中r是新插入的节点t在节点序列中的重复度。

如上图,控制点Pj生成新的控制点Pj’。
B样条曲线总的分为均匀和非均匀的。

根据如上的讲解为了设计一个B-样条曲线,我们需要一系列的控制点,一系列的节点和一系列的系数,每个系数对应一个控制点,所有曲线段连接在一起满足某个连续条件,即为B样条曲线。
有了上边整体的了解,接着从B样条基函数开始讲起,如何根据几个控制点,以及给定的B样条基函数次数k画出B样条曲线。

如上图,基函数的系数定义如图中所述,可以看出,每一个系数范围都为(0,1)区间。而基函数中的 Ni,k(u) 可以表示为如下的杨辉三角形状,比如求第1段区间1次基函数 N1,1 就要求出 N1,0 和 N2,0, 其他依次类推。

如下三图为本人从基函数推导出来的B样条曲线。其中控制点个数为3(n=2),基函数最高次数为2(k=2),则节点总数为m+1=n+k+2=6.推导中,为了便于计算,各个节点赋值分别为0,1,2,3,4,5。


最后得出B样条曲线的每一段的函数表示。通常情况下,对于开B样条曲线的定义域规定为[up,um-p],所以上述推导的区段只有(2,3)区间才有意义,即得到控制点的‘full support‘。

B样条曲线有三种类型:

当起始点和终止点的重复度为最高次数加1是,开B样条变为Clamped B样条,当起始点和终止点重合且重复度为p+1时为闭B样条曲线。如上图的clamped有 n+1个控制点(n=9)以及 p = 3. 。那么,, m 必须是13 所以节点向量有14个节点。为了有clamped效果,前p+1 = 4 和最后4个节点必须一样。其余14 - (4 + 4) = 6 个节点可在定义域任何位置。实际上,曲线是用节点向量 U = { 0, 0, 0, 0, 0.14, 0.28, 0.42, 0.57, 0.71, 0.85, 1, 1, 1, 1 }产生的。


本文内容为本人通过网上各种博客查阅理解,加上本人推导完成,欢迎随时交流。最后附B样条基础知识博客链接链接,这篇译文对我有很大的帮助,感谢博主的分享!

曲线数学NURBS之B样条曲线相关推荐

  1. 曲线数学NURBS之bezier曲线

    最近新研究topic是NURBS,NURBS(Non Uniform Rational B-spline)即非均匀有理B样条曲线.往往提到B样条.以及NURBS就会提到bezier曲线,他们之间的关系 ...

  2. 三次bezier曲线 MATLAB,Matlab-画二次及三次Bezier曲线-8控制点的B样条曲线

    <Matlab-画二次及三次Bezier曲线-8控制点的B样条曲线>由会员分享,可在线阅读,更多相关<Matlab-画二次及三次Bezier曲线-8控制点的B样条曲线(3页珍藏版)& ...

  3. vtk 曲线 样式_VTK笔记——拟合样条曲线(Parametric Spline)-Go语言中文社区

    相信大家对曲线并不陌生,在生活学习中都会接触到.同样,在3D方面,曲线大有用处. 什么是样条曲线 引用百度词条: 所谓样条曲线(Spline Curves)是指给定一组控制点而得到一条曲线,曲线的大致 ...

  4. 开源项目推荐:Bezier曲线、B-Spline和NURBS的区别与《THE NURBS BOOK 2nd》简介,曲线拟合可视化工具

    一.基本概念 B-Spline:B样条曲线 NURBS(Non Uniform Rational B-Spline):非均匀有理B样条曲线 B样条曲线有三种类型: 当起始点和终止点的重复度为最高次数加 ...

  5. 多项式曲线——搞清楚贝塞尔曲线、B样条曲线、Nurbs曲线的区别

    多项式曲线--搞清楚贝塞尔曲线.B样条曲线.nurbs曲线的区别 贝塞尔曲线 Bezier曲线定义 Bernstein基函数的性质 Bezier曲线的性质 B样条曲线 B样条曲线定义 B样条基函数的性 ...

  6. NURBS曲线与曲面

    B样条方法在表示与设计自由型曲线曲面形状时显示了强大的威力,然而 在表示与设计初等曲线曲面时时却遇到了麻烦.因为B样条曲线包括其特例的 Bezier曲线都不能精确表示出抛物线外的二次曲线,B样条曲面包 ...

  7. java nurbs几何库_NURBS曲线与曲面

    B样条方法在表示与设计自由型曲线曲面形状时显示了强大的威力,然而 在表示与设计初等曲线曲面时时却遇到了麻烦.因为B样条曲线包括其特例的 Bezier曲线都不能精确表示出抛物线外的二次曲线,B样条曲面包 ...

  8. 理解Nurbs曲线/曲面的参数空间

    人们对计算几何最常见的误解之一与曲线参数有关. 由于 Nurbs 曲线的数学相当复杂--其中大部分肯定超出了高中水平--很难解释控制点坐标.控制点权重.曲线度数和结向量如何共同使 nurbs 曲线的参 ...

  9. 计算几何03_三次参数样条曲线与Cardinal曲线

    一.三次参数样条曲线 三次样条曲线的唯一缺点就是缺乏几何不变形.即当型值点发生几何变换时不能保证参数递增.因此提出了以弦长为参数的三次参数样条曲线. 1.1 定义 已知n个型值点Pi(xi, yi), ...

最新文章

  1. 华为鸿蒙概念机990,华为5G概念新机:鸿蒙OS系统+麒麟990+石墨烯 安卓机皇来势汹汹...
  2. 如何在推送后压缩git中的提交?
  3. 中南财经政法大学计算机考研难吗,中南财经政法大学考研难吗(考研难度分析)...
  4. 2018python好找工作吗-2018年为什么要学习Python?Python还有前景吗?
  5. 【转】Asp.net页面的生命周期
  6. AlphaGo之父哈萨比斯: 先解决智能 再用智能解决一切
  7. oracle usenl,深入理解Oracle表(1):ORDERED和USE_NL | 学步园
  8. java this$0_java中this$0的含义及用法
  9. SQL组合查询union
  10. ABAP SOAMANAGER暴露的函数function module,以web service方式执行的运行时细节
  11. 用户画像_什么是“用户画像”?如何利用用户画像进行精准营销?
  12. 单链表逆序的多种方式
  13. 12306外包给阿里巴巴、IBM等大企业做是否可行?
  14. Java集合框架---重构设计
  15. 上传excel,并保存excel内容
  16. 家里的狗为什么打不过猫
  17. DOTween和iTween比较
  18. 阿里云CDN回源host理解
  19. LXDE vs XFCE:哪个是更好的轻量级桌面环境?
  20. (文献随笔)肿瘤浸润的活化B细胞抑制结直肠癌的肝转移(Cell Report, 2022年8月30日)

热门文章

  1. 二叉树的基本原理和性质(初学必看)
  2. 普通投资者如何进行量化投资
  3. win10 计算机磁盘加内存,内存不够用?教你给Win10系统增加C盘空间
  4. AR家居,随时随地在家“玩装修”!
  5. vue3 - 仿 element-ui Breadcrumb 面包屑组件封装自己的面包屑组件
  6. 遥控汽车网页小游戏html源码
  7. 小程序图片转Base64,方法总结。
  8. android 屏幕截图检测,Android 屏幕截图
  9. 西瓜中视频是如何赚钱的?教你提高视频收益的3个方法!
  10. wstmart系统研究日志二