一、基本概念

B-Spline:B样条曲线

NURBS(Non Uniform Rational B-Spline):非均匀有理B样条曲线

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 }产生的。

二、详情

在CAD中,设计师需要设计出各种各样的曲线;数学中,曲线是通过各种各样的方程表示的,比如一条通过点A(0,0)、B(1,1)的直线可以表示为:

y=x

或者用参数方程表示:

P(u) = (1-u)A+tB

再比如一个通过原点(1,2)、半径为2的圆可以表示为:

(x-1)^2 + (y-2)^2 = 4

或者用参数方程表示:

x = 2cos(u)+1

y = 2sin(u)+2

上面举例的是两种很简单的曲线,对于更复杂的曲线可以用更复杂的方程来表示(比如用高次多项式);

如果我们的设计师是一位数学家就好了,他可以根据自己的需要,设计出一个复杂的方程来表示自己想要的一条优美的曲线,但是事与愿违,设计师们往往想通过一种直观的方式来设计曲线,而不是利用方程。

因此,诸位科学家和工程师设计出了Bezier曲线、B-Spline样条曲线和NURBS,下面是一个有四个控制点的Bezier曲线:

可以通过改变一个控制点的位置来改变曲线的形状,比如将上图曲线中左边第二个控制点往上移,就可以得到下面的曲线:

可以看到,这种曲线生成方式比较直观和灵活,我只需要放置控制点,然后调整控制点的位置来得到想要的曲线,这就避免了和复杂的数学方程打交道,岂不快哉?

Bezier曲线、B样条和NURBS都是根据控制点来生成曲线的,那么他们有什么区别了?简单来说,就是:

§  Bezier曲线中的每个控制点都会影响整个曲线的形状,而B样条中的控制点只会影响整个曲线的一部分,显然B样条提供了更多的灵活性;

§  Bezier和B样条都是多项式参数曲线,不能表示一些基本的曲线,比如圆,所以引入了NURBS,即非均匀有理B样条来解决这个问题;

Bezier曲线只是B样条的一个特例而已,而B样条又是NURBS的一个特例,它们的关系可以图示为:

B样条克服了Bezier曲线的一些缺点,Bezier曲线的每个控制点对整条曲线都有影响,也就是说,改变一个控制点的位置,整条曲线的形状都会发生变化,而B样条中的每个控制点只会影响曲线的一段参数范围,从而实现了局部修改。

三、推荐书籍

1 《The NURBS Book 2nd》  英文版

国外讲义NURBS的经典书籍,涉及到NURBS曲线和曲面的基本定义和属性讲解,对NURBS曲线和曲面的相关操作及算法。如果想了解几何里面的曲线和曲面的知识,这本书很值得推荐!书籍从浅入深剖析样条曲线,采用通俗易懂的用词。能很轻松的看懂。里面有很多伪代码,能很方便修改成C/C++代码,然后直接套用。

源码:NLib source code has it's origins in code developed by Wayne Tiller and Les Piegel, based on their reference work "The Nurbs Book".

Home - Solid Modeling Solutions - NURBS-Based Geometry Kernel Libraries

SMS Libraries Manual - Solid Modeling Solutions - NURBS-Based Geometry Kernel Libraries

C.-K. Shene博士的CS3621 Introduction to Computing with Geometry Notes的第6部分B-spline Curves

2 《非均匀有理B样条(第2版)》是《THE NURBS BOOK 2nd》的中文版翻译

作者: Les Piegl / Wayne Tiller

出版社: 清华大学出版社

译者: 赵罡 / 穆国旺 / 王拉柱

3《An Introduction to NURBS.pdf》

配套源码:http://www.nar-associates.com/nurbs/c_code.html

4 施法中. 计算机辅助几何设计与非均匀有理B样条(修订版)[M]. 北京: 高等教育出版社, 2013.

5 数值分析

6《计算几何算法与实现(Visual C++版)》 孔令德,三次参数样条曲线

7《计算机图形学——基于MFC三维图形开发》 孔令德

8《数值计算方法与算法(第三版)》 张韵华

四、更多的参考博客

曲线数学NURBS之bezier曲线

曲线数学NURBS之B样条曲线

[图形学] B样条曲线 - 原理和C++实现的演示程序(附源码)

三次B样条曲线拟合算法

三次Beizer曲线拟合算法

五、NURBS开源库

NURBS++ ++ libnurbs - Browse Files at SourceForge.net nurbs++-3.0.11

Nurbs3.0.11开源库vs2010源代码-C++文档类资源-CSDN下载 Nurbs3.0.11开源库vs2010源代码

SISL ++ https://github.com/SINTEF-Geometry/SISL SISL

https://github.com/sintefmath/Splipy

SINTEF SISL库是当前可用的最成熟且功能完整的开源NURBS库,尽管它似乎尚未在开源社区中获得关注。 它是GPL许可。 最新版本使用CMake构建。SISL是一个全面的NURBS库,用于对曲线和曲面进行建模和询问。 它用C语言实现,并且经过三十多年的不断发展。

Interpolation — GSL 2.7 documentation GSL

https://github.com/pradeep-pyro/tinynurbs

Primary Reference -- "The NURBS Book," Les Piegl and Wayne Tiller, Springer-Verlag, 1995.

https://github.com/msteinbeck/tinyspline

https://github.com/mcneel/opennurbs

GitHub - OpenNurbsFit/OpenNurbsFit: Open source NURBS fitting library

What is openNURBS? with C/C++

NURBS-Python :: Onur Rauf Bingol ++ GitHub - orbingol/NURBS-Python: Object-oriented pure Python B-Spline and NURBS library

Ayam - Start Ayam is an open source NURBS modeler based on Tcl/Tk and OpenGL.

GitHub - OpenNurbsFit/OpenNurbsFit: Open source NURBS fitting library

https://github.com/q576333/agv_path_smoothing

https://github.com/aijm/NURBS

六、在线绘图工具:贝塞尔曲线生成及测试

GeoGebra - the world’s favorite, free math tools used by over 100 million students and teachers

cubic-bezier.com

七、可视化工具 -- IGOR Pro(商业软件)

一款强大好用的数据绘图和处理工具,igor最突出的特色不是绘图,而完全可以程的特点,软件提供了大量的函数以及命令供用户选择,且拥有易于使用的编程环境,可以将编程当作数据处理的一部分,而且无需任何外部的支持,软件内置了预编译指令、文件包含、条件编译、名称空间等,支持与主流的文件格式兼容,比如HDF、matlaba、mcamp等,支持win、mac等操作系统。

Igor Pro | Igor Pro by WaveMetrics

Curve Fitting

Peak Finding

Global Fitting

八、可视化工具 -- FitYk曲线拟合软件(开源)

curve fitting (peak fitting) software

Fityk --- curve fitting and peak fitting software — Fityk 1.3.1 manual

https://github.com/wojdyr/fityk

九、可视化工具 -- curvefitter(免费不开源)

WELSIM® | Finite Element Analysis Software

Overview - WELSIM Documentation

引申阅读

OpenCV库的拟合算子 approxPolyDP

Halcon库的拟合算子 gen_contour_nurbs_xld

Opencascade库的拟合算子 Geom2dAPI_PointsToBSpline

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

  1. 开源项目推荐:我个人中意的Python/C++/.Net数学库(★精品收藏★)

    Numpy和SciPy 大名鼎鼎的 NumPy python版本 https://github.com/numpy/numpy https://github.com/dpilger26/NumCpp  ...

  2. 开源项目推荐:OpenGL/Vulkan/Cairo/Skia/angle/VTK/OpenVG/MyPaint/GIMP/Krita/Pencil2D/inkspace/enve等绘图库或画图软件

    绘图引擎简介 Windows环境下二维绘图引擎有多种选择:GDI.GDI+.DirectDraw.Qt/QPainter.Agg.Cairo.skia.Direct2D.Direct3D.OpenGL ...

  3. 开源项目推荐:CNC+CRC/SoftPLC/OpenCASCADE/CAD/CAM

    <开源项目推荐:CNC+CRC/SoftPLC/OpenCASCADE/CAD/CAM>

  4. 开源作者在行动:疫情防控相关开源项目推荐

    开源作者在行动:疫情防控相关开源项目推荐: https://blog.gitee.com/2020/02/03/ncov-open-source-project/

  5. springboot 数据权限_13 个最火的 SpringBoot 实战开源项目推荐!总有一个适合你!...

    商城系统 Guide 哥注:下面的商城系统大多比较复杂比如 mall ,如果没有 Java 基础和 Spring Boot 都还没有摸熟的话不推荐过度研究下面几个项目或者使用这些项目当作毕业设计. m ...

  6. 10大Go语言开源项目推荐

    关注公众号 风色年代(itfantasycc) 300G微服务资料等你拿! Go语言诞生5周年!10大Go语言开源项目推荐 - Go语言中文网 - Golang中文社区 引用 2014年11月,Gol ...

  7. 27款实用高效的腾讯热门开源项目推荐

    WeUI 是由微信官方设计团队专为微信移动 Web 应用设计的 UI 库,是一套同微信原生视觉体验一致的基础样式库,为微信 Web 开发量身设计,可以令用户的使用感知更加统一. DEMO:https: ...

  8. 阿里淘系优质开源项目推荐(下)

    开源推动着互联网技术的发展.多年来,阿里巴巴淘系技术一直积极拥抱开源事业,无论是开源软件的应用.回馈以至自研技术的开源都非常活跃,近两年我们更是开源了MNN.飞冰ICE.3D-FUTURE & ...

  9. 开源项目推荐:OpenGL之gult/freeglut/glew/glfw/glad的联系与区别

    本篇内容主要参考了文章:OpenGL+VS2017 环境配置(亲测好使)::附带必要知识点_FuXiii的博客-CSDN博客_vs2017环境配置,但是经过本人局部修改,并添加了个人见解. 1.Ope ...

  10. 开源项目推荐-私人网盘系统项目

    开源项目推荐-私人网盘系统项目 参考网址: https://mp.weixin.qq.com/s/9QzQBAwf2f57PAuBZw6PXg 许多程序员都想搭建一个个人网盘,今天就和大家推荐一个备受 ...

最新文章

  1. php model类,PHP培训之PHP Model类
  2. 如何用SPY++工具查看窗体的句柄
  3. 3/14课程 第三章 结构化的项目前期和面向对象的项目前期实例
  4. 【刷题】洛谷 P2709 小B的询问
  5. 【Git】Python项目依赖库过大无法提交的问题
  6. 新独立版抖音口红机全修复版本附视频教程
  7. HDU 4666 Hyperspace【最远曼哈顿距离+优先队列】
  8. 原来这么简单就可以实现无纸化办公
  9. pandas 保存csv 不要序号
  10. 【优化覆盖】基于matlab改进的鲸鱼算法求解无线传感器WSN覆盖优化问题【含Matlab源码 XYQMDXP001期】
  11. 广数980系统锁解除密码
  12. 网络丢包的四大原因和修复方法
  13. 王艾辉:下方重点关注3140 上方3190 破位则追
  14. 078 周期函数定积分性质及定积分三大性质总结
  15. 学生专用计算机怎样开启关机,怎么设置电脑自动关机?
  16. 《深入理解计算机系统》课本第七章自学笔记——20135203齐岳
  17. 王爽 《汇编语言》之寄存器
  18. selenium源码通读·5 |webdriver/common/action_chains.py-ActionChains类
  19. C++实现学生选课管理系统
  20. 关于PCA主成分分析与KL变换

热门文章

  1. 远程桌面连接报错解决方法
  2. layui使用label标签
  3. Adobe Photoshop CC 2017 (32 Bit) 软件安装
  4. 【English】十大词性之感叹词(感叹句)
  5. [正则表达式]可以为空值,不为空则要验证格式
  6. 4、Android 手机端进行实时目标检测,并使用FFMPEG将检测的视频流推到服务器显示
  7. 什么是网络号,主机号,主机地址,网络地址,主机地址,子网号,子网地址
  8. Python.openpyxl操作Excel
  9. 腾讯地图输入关键字自动补全的应用及遇到的问题详解
  10. Win7, VS2019下, pywin32安装