一、曲线

1.Bézier Curves—贝塞尔曲线

贝塞尔曲线也是一种显式的几何表示方法。贝塞尔曲线定义了一系列的控制点,致使确定满足这些控制点关系的唯一一条曲线:如上图定义的贝塞尔曲线满足 起始点为p0,结束点为p3,起始点的切线方向是p0p1方向,结束点切线方向是p2p3方向。

而事实上,我们在实际情况需要计算任意多个控制点的情况,也就是说不只是四个点才能画出一条贝塞尔曲线,一条贝塞尔曲线可以由任意多个控制点决定,那么如何根据这些控制点确定一条贝塞尔曲线呢?接下来我们将介绍几种算法。

(1)de Casteljau 算法

de Casteljau 算法其实是一种递归思想,我们以上图中的三个控制点的贝塞尔曲线也就是二次贝塞尔曲线为例,我们把每两个点b0-b1,b1-b2分别用0-1代替,中间某个时刻设为t,那么加入我们要找贝塞尔曲线上t时刻的点,假如是1/3,那么如上图,我们在b0-b1上找一点1/3,b1-b2上找一点1/3,把它们相连得到一条新的直线,在这条新的直线上再找1/3处一点,就是b1,b2,b3这三个控制点控制下的贝塞尔曲线的1/3处的位置,而遍历0-1间所有的t值,就可以得到这条贝塞尔曲线了。

四个控制点的贝塞尔曲线同理,只不过多了一步取t位置的操作。

(2)代数公式法

de Casteljau算法可以得到一个系数金字塔,我们从上图可以看出,每一层都相当于在两点之间做了一个插值运算,从而最终形成一个金字塔。我们当然可以用数学形式把它表示出来如下图:

上图展示了三个控制点的贝塞尔曲线的代数表示形式,很好理解,如第一个公式:当t=0时,点的位置就是在最左边的点b0上,下面的公式都同理。最终得到最下面的公式很像1的展开,我们当然也可以通过这个三个控制点的公式推广出n个控制点的贝塞尔曲线的代数公式。

也就说给定n+1控制点,我们就可以得到一个n阶的贝塞尔曲线,这个贝塞尔曲线在任意时间t都是前面给出的n+1个控制点的线性组合,线性组合的系数是一个和时间有关的多项式,这个多项式就是伯恩斯坦多项式(Bernstein),也就是描述二项分布的多项式。简单的说,就是任意一个n阶贝塞尔曲线,它的时间为t的点位置就是由伯恩斯坦多项式为系数对给定的一系列控制点的加权。

同时我们也并没有说,贝塞尔曲线只能在平面上定义,我们可以把控制点设为三维空间中的坐标从而得出三维空间中的贝塞尔曲线代数公式,如上图

Bernstein多项式

(3)贝塞尔曲线的性质

前两条性质我们前面已经提到过了,直接看第三条,贝塞尔曲线的控制点在仿射变换后,如果把这些控制点再连成新的贝塞尔曲线,那么前后两个贝塞尔曲线是不变的,但也仅仅是在仿射变换下,如投影变换则不满足这种性质。第四条凸包性质:贝塞尔曲线一定在自己所有控制点所连成的凸包多边形的里面。如下图中的蓝色线为控制点连成的凸包,那么这几个控制点所形成的贝塞尔曲线一定在蓝色线框的里面。

2.Piecewise Bézier Curves—逐段贝塞尔曲线

为什么要引进逐段贝塞尔曲线呢?如上图中的一段贝塞尔曲线,对于这种过于曲折的贝塞尔曲线,我们想通过一系列控制点控制是非常难的,于是人们想到了办法,用较少的几个控制点控制一小段贝塞尔曲线,当想表示的段数足够时,把它们连在一起就是想要的完整的贝塞尔曲线。

如上图中的黑色点就是每段贝塞尔曲线的起止点,而蓝色点则是和黑色起止点相连并控切线方向的点,通过每四个点定义一段贝塞尔曲线,并且最终把它们连起来的方法就是逐段贝塞尔曲线。

逐段贝塞尔怎么确保连续呢?事实上,逐段贝塞尔有许多不同的连续,如上图所示就是逐段贝塞尔的C0连续,它代表只要曲线在中间没有间断,两段曲线都经过一个点(第一段终止点等于第二段起点)。

第二种连续是切线连续,也就是C1连续,两端切线长度要相等,且一阶导数相等。这样不仅能保证几何上的链接,还可以保证光滑。当然我们还有很多其它的连续,比如当二阶导数相等,或者更高阶的导数相等。但在这里我们只介绍这两种。

3.Spline—样条

图形学中运用的曲线不止贝塞尔曲线,还有其它,如样条:一条由一系列控制点控制的一条连续的曲线,在任一点都满足一定的连续性,几阶连续取决于实际情况。

4.B-splines—B样条

B样条也就是basis样条,也就是基函数样条,具有局部性。我们提到当有多个,如十个控制点的时候,想调整一整个曲线是非常困难的,因为一个控制点的调整会影响许多其它控制点,于是我们引入了逐段贝塞尔曲线,但是逐段仍然够简便,所以我们又引入了B样条,它不仅具有局部性,而且是一整段连续的曲线,同时它也比贝塞尔曲线更复杂,这里不做过多介绍。还有更复杂的NURBS,感兴趣的朋友可以自行了解。

二、曲面

1.Bézier Surfaces—贝塞尔曲面

贝塞尔曲面,也就是贝塞尔曲线的扩展, 如上图,我们可以想象有一个4x4的网格,在一个方向上的四条线对应了四条贝塞尔曲线,而在另一个方向坐标值相同的一行,每条曲线上有4个点,它们也会构成一条贝塞尔曲线,那么只要将这条直线一扫,就可以得到一个贝塞尔曲面。当然,这里也有很多问题,比如,不同的贝塞尔曲面,要怎么把它们严丝合缝的拼在一块,这里同样不介绍,感兴趣的朋友自行了解。

那么如何找到贝塞尔曲面上任意一点的位置,我们可以想到,当扩展成曲面之后,我们则需要两个时间变量t,这里我们设为u和v。

那么我们只要现在如上图的4x4的平面中的的灰线方向找到一个时间u,再在另一个方向,也就是蓝色线上找到一个时间v,就可以找到对应的曲面上的点的位置,这也是为什么贝塞尔曲面是显式表示的原因,因为这也是通过参数映射定义的。

参考:

Lecture 11 Geometry 2 (Curves and Surfaces)_哔哩哔哩_bilibili

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

  1. [计算机图形学]纹理的高级应用(前瞻预习/复习回顾)

    一.前言 上节课我们讲了纹理的放大缩小产生问题后,我们的解决方法,那么纹理是什么呢?在现代GPU中,我们可以理解为是内存+范围查询(滤波),也就是对一块区域做点查询/范围查询,并且做的非常快,也就是说 ...

  2. [计算机图形学]重心坐标应用纹理(前瞻预习/复习回顾)

    一.重心坐标,插值 上篇的最后我们提到了,当顶点在纹理上的对应uv坐标成功找到之后,三角形三个顶点中间的值需要用三角形的重心坐标插值计算得到,那么这个运算是怎么进行的,本篇我们将介绍.插值的运算不仅仅 ...

  3. 10、计算机图形学——几何介绍(曲面的分类以及示例)

    一.隐式曲面及示例 隐式曲面顾名思义就是不能直接看到曲面的形状,而是通过表达式的方式来表示曲面.所以,该曲面的优势就是查找某个点是否在曲面上比较快,而该类型曲面缺点就是曲面的表达不直观 比如下面这三个 ...

  4. [计算机图形学]反走样(前瞻预习/复习回顾)

    一.前言:走样的产生 上一篇我们谈到了光栅化,在讲述光栅化时我们得到了光栅化之后的这样一张图,如下图 显然,这和我们原本的三角形严重不符,原因是像素是方块,而无法完美的拟合三角形. 也就是说我们得到的 ...

  5. [计算机图形学]材质与外观(前瞻预习/复习回顾)

    一.图形学中的材质 不同的物体表面有着不同的材质,而不同的材质意味着它们与光线的作用不同.那么我们之前在介绍辐射度量学和渲染方程提到过其中一个函数,叫做BRDF,而在实际上,也就是BRDF定义了不同的 ...

  6. [计算机图形学]动画与模拟:关键帧动画、质点弹簧系统、运动学与绑定(前瞻预习/复习回顾)

    一.动画的简要概念 动画和语言一样,一开始都是作为传达信息的工具.什么是动画呢?简单的理解就是让画面变成"活的",也就是让它们能够动起来,其次需要一定的美观.在图形学上,我们可以把 ...

  7. [计算机图形学]动画与模拟:欧拉方法、刚体与流体(前瞻预习/复习回顾)

    一.前言 这是本专栏的倒数第二篇文章了,为什么不是最后一篇?因为我要单独写一篇总结哈哈,不管怎么说,从今年的3.13的MVP变换开始写,写到现在,也是一个很大的工程了,我很高兴能在大二下学期的期中这个 ...

  8. 图形学-几何-曲线与曲面

    1.什么是曲线 我们使用一系列的点去定义一条曲线.这些控制点描述了曲线的一些性质.最常见的曲线叫做贝塞尔曲线(Bézier Curve). 1.1 贝塞尔的画法 在三个点的情况下.在二维情况下,使用三 ...

  9. [计算机图形学]光线追踪的基本原理(前瞻预习/复习回顾)

    一.光栅化的弊端 我们为什么要用光线追踪呢,在之前的篇章中,我们提到了,光栅化的方式很难表示一些全局的效果,如(1)软阴影,(2)Glossy的反射(类似镜子但又不像镜子那么光滑的材质,如打磨的铜镜和 ...

最新文章

  1. JavaScript基础(一) 数据类型
  2. Java记录 -24- equals方法重写
  3. 【问题帖】压缩图片大小至指定Kb以下
  4. 查看mysql表中的所有索引
  5. cenos下安装MySQL最新版(5.7.18)记录。附卸载老版本过程
  6. Spring5的AOP 和设备支持
  7. feign调用多个服务_Spring Cloud 快速入门系列之feign–微服务之间的调用
  8. opengl es3.0游戏开发学习笔记2--绘制地月星系
  9. 电气专业学校排名全国计算机专业学校排名,电气工程及其自动化专业学校排名...
  10. 华为命令 hybird实验
  11. WPS下 宏使用js编写及一些脚本
  12. 为什么每天都在学习,生活还是没有任何改善?
  13. 粮食在计算机中的应用,计算机监控系统在粮食仓储中的应用
  14. My Sixth-First - 解数独 - By Nicolas
  15. 智遥工作流连接SAP,查询超时解决方法
  16. 计算机怎么设置内存数据恢复,相机内存卡数据恢复的操作图解
  17. [跟练]基于七普修正Worldpop人口栅格数据(附2020年worldpop100m人口栅格)
  18. JS(JavaScript)验证身份证号码格式的合法性
  19. 蚁视牵手联创互联,可持续拓展“第六媒体”新业态
  20. 互联网应用的特点及其架构演变

热门文章

  1. 人工智能学习07--pytorch18--目标检测:Faster RCNN源码解析(pytorch)
  2. 我用Python写了个整蛊小游戏,女友和好友差点和我绝交
  3. mysql存储过程返回查询结果集_MYSQL存储过程查询返回结果处理方法
  4. 现在陪玩多吗,用Python来看看他们的行情
  5. 2021年安全员-C证(山东省-2021版)报名考试及安全员-C证(山东省-2021版)证考试
  6. Linux Netfilter实现机制和扩展技术
  7. UG在模具设计中的应用解析
  8. 项目实例---随机森林在Kaggle实例:Titanic中的应用(二)
  9. 老婆是这样套老公的话
  10. springboot 错误:找不到或无法加载主类