贝塞尔曲线与贝塞尔曲面

发布时间:2026/7/10 13:08:08
贝塞尔曲线与贝塞尔曲面 1. 贝塞尔曲线 (Bézier Curves)在进入具体原理讲解之前首先看一下一条实际的贝塞尔曲线长什么样子其中为控制点蓝色所表示曲线正是非常著名的贝塞尔曲线了可以从图中观察到曲线会与初始与终止端点相切并且经过起点与终点。那么这样一条曲线究竟是怎么得到的呢其实贝塞尔曲线的定义很像参数方程给定一个参数就能确定贝塞尔曲线上的一点倘若取完所有t值就能得到完整的贝塞尔曲线了解一下大概之后接下来我们就开始介绍计算曲线的过程。首先从简单的3个控制点情形出发示意如何画出曲线。n个控制点得到的是n-1次曲线如图中3个控制点便是2次贝塞尔曲线正如一开始所说第一步选定一个参数在线段之上利用t值进行线性插值即得到之后在线段上重复做相同的线性插值得到点通过给点参数t计算得到点之后将两点连接相信许多读者都能猜到下一步是什么了没错就是在线段之上再进行一次线性插值如此便成功获得了如图所示的3个控制点之下的2次贝塞尔曲线上的一点了那么对所有的都重复上述的过程就可以得到上图所示的蓝色贝塞尔曲线了。通过这样一个简单的3个控制点的例子相信很快就能理解贝塞尔曲线的原理那么对于4个控制点5个控制点乃至任意控制点步骤都是类似的。其核心所在就是多次的线性插值并在生成的新的顶点所连接构成的线段之上递归的执行这个过程直到得到最后一个顶点如下图这样一个4个控制顶点的例子步骤完全类似那么我们为何称由n个控制点的贝塞尔曲线为n-1次呢同样以一开始的3个控制点为例将贝塞尔曲线方程完全展开看看其实看到这就已经非常清楚了最终得到的贝塞尔曲线方程恰好就是一个关于参数 t 的二次方程如果细心观察的话其实可以发现控制点的系数是非常有规律的很像二项系数因此可以总结规律得到一个任意控制点组成的贝塞尔曲线的方程如下对于这样一个特殊系数其实也有一个多项式与之对应正是伯恩斯坦多项式其定义如图中下方所示。好了至此就是贝塞尔曲线原理的所有内容了相信显现在对于任意的控制点都能很快的画出对应的曲线最后我们对贝塞尔曲线的几点性质做一个概括必定经过起始与终止控制点必定经与起始与终止线段相切具有仿射变换性质可以通过移动控制点移动整条曲线凸包性质曲线一定不会超出所有控制点构成的多边形范围回想一下PS等具有画图功能的软件中的钢笔工具所运用的便是贝塞尔曲线了除了这个例子之外许多字体或是矢量图都广泛运用了贝塞尔曲线。但对于高阶贝塞尔曲线它有一个严重的缺陷对于上图所示的由11个控制点所得到的10次贝塞尔曲线由于控制点众多很难控制局部的贝塞尔曲线形状因此为了解决该问题有人提出了分段贝塞尔曲线即将一条高次曲线分成多条低次曲线的拼接其中用的最多的便是用很多的3次曲线来拼接如下图注上图是一个贝塞尔曲线的网页demo有兴趣读者可以去玩玩如果想要使得拼接的点看起来较为光滑的话就要满足一些连续条件如一阶连续连接点导数的左右极限相等二阶连续等等这些都是高数的基础知识在此不多做赘述。对于本文来说贝塞尔曲线到这里就已经讲解完毕了但其实除了贝塞尔曲线之外还有B样条曲线NURBS曲线等等。简单说两句B样条曲线相对于贝塞尔曲线可以更好的进行局部控制NURBS 曲线可以得到一些B样条曲线无法精准描述的圆锥曲线如下图:相对于贝塞尔曲线来说这两种曲线更加深入与复杂读者可以自行收集资料本文不作过多展开2. 贝塞尔曲面 (Bézier Surfaces)其实在理解了贝塞尔曲线之后贝塞尔曲面的原理也是十分容易理解的了无非是一个从2维到3维的过渡。如果说对于曲线来说只有一个参数转存失败重新上传取消那么对于一个面来说就应该有两个参数分别设具体过程如下图所示首先规定一共4x4 16个控制点其水平面位置如图中16个黑点所示并未表示出高度防止图形太乱将这16个点分成4列图中红色圈中的为一列的具体例子。第1步 在这4个控制点之下利用第一个参数 u转存失败重新上传取消运用第一章的计算贝塞尔曲线的方法得到蓝色点因为有4列所以一共可以得到如图所示的4个蓝色点。灰色曲线分别为每列4个点所对应的贝塞尔曲线第2步 在得到4个蓝色顶点之后在这四个蓝色顶点的基础之下利用第二个参数 v 转存失败重新上传取消 便可以成功得出贝塞尔曲面上的正确一点第3步 遍历所有的 u, v 值就可以成功得到一个贝塞尔曲面