目录

前言

一、bazier曲线

1.bazier曲线的由来

二、B-spline

1.为何要引入B-spline曲线,Bazier曲线有何不足

2、B-spline曲线方法

前言

写这篇文章是因为最近在阅读无人机路径规划算法ego-planner,其中轨迹优化部分使用到了B样条优化,但是本人对于计算机图形学的知识不够了解,所以从头开始了解计算机图形学的知识,主要包含两种轨迹逼近算法:bazier曲线和B样条曲线

一、bazier曲线

在进入正文之前,先引入两个数值分析上的概念:插值和逼近,区别在于插值需要经过给定的点,学过数值分析的同学一定都知道lagrange插值以及Newton插值,这里不再赘述,有兴趣的同学可以翻下数值分析这本书,而本文介绍的bazier曲线B-spline曲线方法都属于逼近的范畴:

1.bazier曲线的由来

在上个世纪工业设计的领域,前期进行设计的时候,画曲线很困难,所以很多设计师期望可以通过绘制样品的轮廓然后使用曲线来进行逼近,从而得到较为平滑的曲线,于是在1962年,法国数学家Pierre Bézier研究了通过给定控制点来绘制曲线的方法,并给出了计算公式,原始的bazier曲线计算公式如下:

其中p(t)代表贝塞尔曲线,ai是控制点,是基函数,称为贝塞尔基函数,这也是贝塞尔曲线基函数最原型,可以看出这个基函数十分复杂,并不利于计算,有意思的是Pierre Bézier也没有给出贝塞尔基函数的详细推导,不过后人还是给出了这个基函数的推导。针对贝塞尔基函数繁琐的缺点,在1972年,剑桥大学的博士生Forrest发表了论文《Computer Aided Design》,这篇论文的突出贡献就是证明了贝塞尔基函数可以简化成伯恩斯坦基函数

那么计算贝塞尔曲线的公式就可以变形为:

伯恩斯坦基函数在数学上的表示已经比较简明,但是在计算机程序中,阶乘的计算量还是过大,十分影响程序的执行效率,所以de Casteljau提出了Bazier曲线的递推算法:Bazier曲线上的任一个点P(t),都是其它相邻线段的同等比例(t)点处的连线,再取同等比例(t)的点再连线,一直取到最后那条线段的同等比例(t)处,该点就是Beizer曲线上的点P(t)。这个定义听起来十分晦涩难懂,所以直接上图:

连成的多边形称为特征多边形这条线段1/3处的点, 这条线段1/3处的点,而是 这条线段1/3处的点,即是贝塞尔曲线上t = 1/3处的点,依此类推即可得到贝塞尔曲线上每一个点,这里所有的线段都是一阶的,不会带来复杂的计算量

将前两个式子代入第三个式子,即可得到:

这个式子表达了当t从0到1变化时,由三个控制点定义的贝塞尔曲线,推广到(n+1)个控制点:

由此就可以得到贝塞尔曲线的递推计算公式:

二、B-spline

1.为何要引入B-spline曲线,Bazier曲线有何不足

先探讨下Bazier曲线的不足之处:

(1)一旦确定了特征多边形的顶点数(n+1)个。也就确定了曲线的阶次(n)

(2)Bazier曲线的拼接比较复杂

(3)Bazier曲线不能作局部修改——牵一发而动全身

所以,1972年。Gordon、Riesenfeld等人提出了B-spline方法,既保留了Bazier曲线方法的全部优点,同时也克服了其缺点。

2、B-spline曲线方法

B-spline 核心思想:整条曲线用完整的表达形式,但内在的量是一段一段的,比如一堆的三次曲线拼接,两两之间满足二次几何连续(在结合处的一阶导成比例并且二阶导也成比例,简称连续),如此一来既克服了Bazier曲线拼接产生间断点导致的波动现象,同时也能保证曲线的低阶特性,同时也有统一的表达式。

B-spline曲线的数学表达式:

可以看出B-spline曲线的数学表达式和Bazier曲线的表达式十分类似,区别有两点,一是基函数的下标,即表示基函数的阶次不同,二是参数u的区间不同。

称为k阶(k-1)次B-spline基函数,k是刻画次数的。k可以是2到控制点个数(n+1)之间的任意整数。B-spline基函数是一个称为节点矢量的非递减的参数u的序列所决定的k阶分段多项式,这个序列称为节点向量,如下图所示:

那么B-spline基函数如何得到,这里就要提到最为推崇的de Boor-Cox递推定义,其原理是,对于k阶(k-1)次B-spline基函数,构造一种递推的公式,由0次构造1次,1次构造2次...依次类推。具体的表现形式如下:

是节点值,构成了k阶(k-1)次B样条函数的节点矢量

计算机图形学——bazier曲线和B样条曲线相关推荐

  1. 计算机图形学曲线生成原理,计算机图形学_曲线及生成.ppt

    计算机图形学_曲线及生成 华中理工大学计算机学院 陆枫 99-7 1999年7月 7.2.1 曲线的表示要求 1)唯一性 2)几何不变性 3)易于定界 4)统一性 5)易于实现光滑连接 6)几何直观 ...

  2. 计算机图形学Bezier曲线试题,《计算机图形学》试题-C卷及参考答案

    计算机图形学试题 C 一.选择题(20分) 1.计算机图形显示器一般使用什么颜色模型?(A ) A. RGB B. CMY C. HSV D. HLS 2.分辨率为1024×1024的显示器各需要多少 ...

  3. mysql 工具图形学_[计算机图形学]贝塞尔曲线

    一. 贝塞尔曲线 简介摘抄自某度百科: 贝塞尔曲线(Bézier curve),又称贝兹曲线或贝济埃曲线,是应用于二维图形应用程序的数学曲线. 一般的矢量图形软件通过它来精确画出曲线,贝兹曲线由线段与 ...

  4. 计算机图形学:曲线曲面基本理论

    1.几何造型介绍及曲线曲面的参数表示 1.1.几何造型介绍 计算机图形学可以分为三大部分内容,分别是光栅图形显示.几何造型技术和真实感图形显示. ①光栅图形学就是研究如何通过计算机的光栅显示屏来显示图 ...

  5. 计算机图形学(曲线造型)

    一.曲线的概念 曲线的表示: 通常采用参数表示方法来表示自由曲线. 由控制点求曲线的方法: 由控制点求插值曲线或求逼近曲线的问题统称为曲线的拟合. 二.Hermite曲线 1.定义 已知表示一条曲线的 ...

  6. 计算机图形学-贝塞尔曲线

    必须要理解掌握的贝塞尔曲线 在Android开发和面试中(尤其是一些中高级岗位面试),面试官可能会问你自定义控件的详细内容,我们知道自定义控件这一块涉及到的内容很多,回答的越多越深入,那么面试的印象会 ...

  7. C#,计算几何,计算机图形学,三次B样条曲线插值算法(B-Spline Curve Interpolation)的基本原理及源代码

    1.发文初心 样条曲线插值应用挺多的,其实这方面的代码不少. 不过都有一些缺憾,大家使用起来不便利,因而特意改编一个供初学者使用. 本文的程序改编自... 上面的算法与程序有很大的局限性: (1)仅仅 ...

  8. 【CAD算法】【计算机图形学】Bezier贝塞尔曲线生成程序(python/numpy实现)[1]

    整个项目,从Bezier曲线的创建,到Coons Patch曲面的实现,再到网格的实现和优化,还有最后对表面的光顺,链接如下: [CAD算法][计算机图形学]Bezier贝塞尔曲线生成程序(pytho ...

  9. 计算机图形什么叫参数连续性,计算机图形学--参数三次插值样条曲线.ppt

    计算机图形学--参数三次插值样条曲线 参数三次插值样条曲线 三次多项式方程是能表示曲线段的端点通过特定点且在连接处保持位置和斜率的连续性的最低阶次的方程.与更高次的多项式方程相比,三次样条只需要较少的 ...

最新文章

  1. TensorFlow单层感知机实现
  2. 进行短视频app开发工作时,可以加入它来保护青少年...
  3. 如何查看tensorflow源代码
  4. 玩转oracle 11g(14):命令学习2
  5. redis——Redis中的LRU算法改进
  6. python c java_简单明了看懂JAVA,Python和C+的优劣势
  7. php搜索文件名,window_Windows7内置搜索如何同时搜索文件名与内容,  Win7的搜索功能效果非常强 - phpStudy...
  8. php接收post参数乱码,学习猿地-php接收post参数乱码怎么办
  9. 自动化安装DHCP配置脚本
  10. LintCode 二叉树的最小深度
  11. 详解spring 每个jar的作用(转)
  12. 未定义数组索引:_数据结构-数组
  13. Git 头像修改 原
  14. Terrasolid Suite v015-v016 for Microstation CONNECT, V8i, V8 for Windows platforms 1CD
  15. uni-app的基础概念
  16. 第六十八章 Caché 函数大全 $WASCII 函数
  17. 文本和输入:复制和粘贴
  18. ChemDraw 2D与ChemBio 3D之间的信息转换
  19. 基于3D边界特征的视觉定位技术
  20. 树莓派制作minecraft服务器,用树莓派建立Minecraft服务器

热门文章

  1. 阿里云申请免费DV SSl(https证书),及详细配置运用
  2. 基于微型计算机的步进电机系统设计,基于微型计算机的步进电机系统设计本科毕业论文.doc...
  3. 微信小程序与后台交互拿数据
  4. C# 读取系统当前语言
  5. pip永久更换清华源
  6. 手机摄像头的心得体会---camera模组的结构和选择
  7. 【首发】随身wifi编译/使用ffmpeg方法,包含openwrt和debian
  8. 多线程和单线程执行效率比较
  9. 研究生应该具备的学术素养
  10. 【Node.js 微信公众号实战】3.Node.js 自定义微信菜单