贝塞尔曲线与贝塞尔曲面

1 贝塞尔曲线(Bézier Curves)

在进入具体原理讲解之前,首先看一下一条实际的贝塞尔曲线长什么样子

其中

控制点,蓝色所表示曲线正是非常著名的贝塞尔曲线了,可以从图中观察到,曲线会与初始与终止端点相切,并且经过起点

与终点
。那么这样一条曲线究竟是怎么得到的呢?

其实贝塞尔曲线的定义很像参数方程,给定一个参数

就能确定贝塞尔曲线上的一点,倘若取完所有t值,就能得到完整的贝塞尔曲线,了解一下大概之后,接下来我们就开始介绍计算曲线的过程。

首先从简单的3个控制点情形出发,示意如何画出曲线。 (n个控制点得到的是n-1次曲线,如图中3个控制点便是2次贝塞尔曲线)

正如一开始所说,第一步选定一个参数

,在
线段之上利用t值进行线性插值:

,得到
之后在
线段上重复做相同的线性插值得到点
:

通过给点参数

计算得到点
之后将两点连接,相信许多读者都能猜到下一步是什么了,没错就是在
线段之上再进行一次线性插值!

如此便成功获得了如图所示的3个控制点之下的2次贝塞尔曲线上的一点

了,那么对所有的
都重复上述的过程,就可以得到上图所示的蓝色贝塞尔曲线了。通过这样一个简单的3个控制点的例子,相信很快就能理解贝塞尔曲线的原理,那么对于4个控制点,5个控制点,乃至任意控制点步骤都是类似的。

其核心所在就是多次的线性插值,并在生成的新的顶点所连接构成的线段之上递归的执行这个过程,直到得到最后一个顶点

如下图这样一个4个控制顶点的例子,步骤完全类似:

那么我们为何称由n个控制点的贝塞尔曲线为n-1次呢?同样以一开始的3个控制点为例,将贝塞尔曲线方程完全展开看看

其实看到这就已经非常清楚了,最终得到的贝塞尔曲线方程恰好就是一个关于参数 t 的二次方程,如果细心观察的话,其实可以发现控制点的系数是非常有规律的,很像二项系数,因此可以总结规律得到一个任意控制点组成的贝塞尔曲线的方程如下:

对于这样一个特殊系数其实也有一个多项式与之对应,正是伯恩斯坦多项式,其定义如图中下方所示。

好了至此就是贝塞尔曲线原理的所有内容了,相信显现在对于任意的控制点,都能很快的画出对应的曲线,最后我们对贝塞尔曲线的几点性质做一个概括:

1 必定经过起始与终止控制点

2 必定经与起始与终止线段相切

3 具有仿射变换性质,可以通过移动控制点移动整条曲线

4 凸包性质,曲线一定不会超出所有控制点构成的多边形范围

回想一下PS等具有画图功能的软件中的钢笔工具所运用的便是贝塞尔曲线了,除了这个例子之外许多字体或是矢量图都广泛运用了贝塞尔曲线。但对于高阶贝塞尔曲线它有一个严重的缺陷:

对于上图所示的由11个控制点所得到的10次贝塞尔曲线,由于控制点众多,很难控制局部的贝塞尔曲线形状,因此为了解决该问题,有人提出了分段贝塞尔曲线,即将一条高次曲线分成多条低次曲线的拼接,其中用的最多的便是用很多的3次曲线来拼接,如下图:

(注:上图是一个贝塞尔曲线的网页demo,有兴趣读者可以去玩玩) 如果想要使得拼接的点看起来较为光滑的话,就要满足一些连续条件如一阶连续(连接点导数的左右极限相等),二阶连续等等,这些都是高数的基础知识,在此不多做赘述。

对于本文来说,贝塞尔曲线到这里就已经讲解完毕了,但其实除了贝塞尔曲线之外还有B样条曲线,NURBS曲线等等。简单说两句

B样条曲线相对于贝塞尔曲线可以更好的进行局部控制 NURBS曲线可以得到一些B样条曲线无法精准描述的圆锥曲线,如下图:

相对于贝塞尔曲线来说,这两种曲线更加深入与复杂,读者可以自行收集资料,本文不作过多展开

2 贝塞尔曲面(Bézier Surfaces)

其实在理解了贝塞尔曲线之后,贝塞尔曲面的原理也是十分容易理解的了,无非是一个从2维到3维的过渡。

如果说对于曲线来说只有一个参数

那么对于一个面来说,就应该有两个参数,分别设
,具体过程如下图所示:

首先规定一共4x4 = 16个控制点,其水平面位置如图中16个黑点所示(并未表示出高度,防止图形太乱),将这16个点分成4列,图中红色圈中的为一列的具体例子。

第1步 在这4个控制点之下利用第一个参数

运用第一章的计算贝塞尔曲线的方法得到蓝色点,因为有4列,所以一共可以得到如图所示的4个蓝色点。(灰色曲线分别为每列4个点所对应的贝塞尔曲线)

第2步 在得到4个蓝色顶点之后,在这四个蓝色顶点的基础之下利用第二个参数

便可以成功得出贝塞尔曲面上的正确一点

第3步 遍历所有的 u,v值就可以成功得到一个贝塞尔曲面

到这里整个几何部分的大部分内容就已经讲解完毕了,做个预告,在下篇笔记也是几何的最后一部分我们会去介绍细分曲面的相关知识

Reference

[1] GAMES101-现代计算机图形学入门-闫令琪

[2] 电子科技大学计算机图形学PPT

光滑曲线_计算机图形学十:贝塞尔曲线与贝塞尔曲面相关推荐

  1. 计算机图形学十:几何2—贝塞尔曲线(Bézier Curves)与贝塞尔曲面(Bézier Surfaces)

    贝塞尔曲线与贝塞尔曲面 1 贝塞尔曲线(Bézier Curves) 2 贝塞尔曲面(Bézier Surfaces) Reference (本篇文章同步发表于知乎专栏:https://zhuanla ...

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

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

  3. 计算机图形学中的曲线问题——贝塞尔曲线的绘制

    贝塞尔曲线的绘制 由于 CSDN 的博客修改字数的限制,我们不得不将这一部分放到一个新的博客中.原文详见: GGN_2015 计算机图形学中的曲线问题 贝塞尔曲线的几何作图法 在上面介绍儿时的回忆中, ...

  4. 计算机图形学中的曲线问题

    文章目录 免责 前言 拉格朗日插值多项式 第一步:得到一个基函数 第二步:得到所有基函数 第三步:对所有基函数进行线性组合 举例验证 拉格朗日插值曲线绘制实践 三次埃尔米特插值多项式 第一步:得到第一 ...

  5. 计算机图形学概论论文5000字,《论文_计算机图形学论文李(定稿)》

    <论文_计算机图形学论文李(定稿)> (17页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 14.9 积分 计算机图形学论文学号:专业:计算机 ...

  6. java画bezier曲面_计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制

    <计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制>由会员分享,可在线阅读,更多相关<计算机图形学上机实验4-实现Bezier曲线和Bezier曲面的绘制(9页珍 ...

  7. 计算机图形学空间曲线,课程追忆之《计算机图形学》【曲线曲面篇】

    大家好,距离上一篇博文将近一个月,时间过得好快,原本计划周更的,后面推到半月跟,实际到现在是月更,每次在准备写点什么的时候,都会被一些杂乱的事物打扰,哎,重度拖延症.懒癌晚期- 继上次述说了<计 ...

  8. [计算机图形学]几何:曲线和曲面(前瞻预习/复习回顾)

    一.曲线 1.Bézier Curves-贝塞尔曲线 贝塞尔曲线也是一种显式的几何表示方法.贝塞尔曲线定义了一系列的控制点,致使确定满足这些控制点关系的唯一一条曲线:如上图定义的贝塞尔曲线满足 起始点 ...

  9. 计算机图形学E10——Bezier曲线

    其他计算机图形学实验见 链接 #include<gl/glut.h> #include<iostream> #include<algorithm> #include ...

最新文章

  1. MyBatis -- 结果集映射
  2. 成功解决building ‘snappy._snappy‘ extension error: Microsoft Visual C++ 14.0 is required. Get it with “B
  3. red hat 升级 php 5.6,Centos7下编译php5.6.19出错,怎么解决?
  4. 30道经典SQL面试题讲解(11-20)
  5. java 递归改非递归_使用Java ThreadLocals的意外递归保护
  6. Win7下VS2008进入维护模式不能显示升级输入框,无法升级到正式版~~~!!!
  7. linux 禁止其他用户登录,在Linux中如何禁止用户登录
  8. (32)Gulp CSS hack 与 Autoprefixer
  9. SpringBoot2整合Flyway(二)
  10. Jepack4.5.1上手动安装cuda10.0 cudnn 7, Jepack4.5.1 TX2 i安装pytorch1.6.0
  11. 快逸报表数据库密码加密解决方案
  12. iShot--Mac最强截图工具
  13. 电脑中必装的十四款软件
  14. Nginx支持ipv6
  15. NavigationDuplicated: Avoided redundant navigation to current location
  16. 网页集成高德地图显示
  17. 荆棘鸟(The Thorn bird)
  18. mysql 字段被截断_msyql存储数据时字段被截断
  19. PD3.1 140W双C快充解决方案
  20. 优秀不够,你是否无可替代

热门文章

  1. python 地形图_Python-Evoked地形图可视化
  2. 关于 PoW 和 PoS
  3. 如何对excel某一列的数据进行分列
  4. 程序猿成长之路之密码学篇-DES介绍
  5. jdbc mysql 5.05_JDBC 连接 MySQL 时碰到的小坑
  6. html 设置两个标签的相对距离_HTML 让上下两个DIV之间保持一定距离或没有距离...
  7. 双幂数列(C++)M={2^x,3^y|x=0,y=0}
  8. 北京内推 | 微软研究院科学智能中心招聘多模态学习方向研究实习生
  9. 【转载】阿里面试回来,想和Java程序员谈一谈
  10. 哔哩哔哩bilibili自动上传视频脚本-配合爬虫营销号狂喜