Bezier Curves Defined in Parametric Terms

简介: 跟国内大多数计算机辅助几何造型或计算几何的教材不同,《Focus on Curves and Surfaces》介绍Bezier的方法简单,让人易于接受。现将本节内容翻译如下,若有错误,请指出。

    跟国内大多数计算机辅助几何造型或计算几何的教材不同,《Focus on Curves and Surfaces》介绍Bezier的方法简单,让人易于接受。现将本节内容翻译如下,若有错误,请指出。国内教材上来就是给出定义,而她是按几何方法推导出了二次Bezier曲线的伯恩斯坦(Bernstein)基函数,让人豁然开朗。

==================================================================================================================================================

Bezier曲线的参数方程定义 Bezier Curves Defined in Parametric Terms

原来的CAD/CAM工具和高精度的机器设备、工程师和绘图师绘制的曲线非常粗糙,精度不高。典型地,他们先标记出曲线上很少的几个点,再使用一个曲线板或其它类似的工具画出一条通过这些点的最佳配合的曲线。当引入计算机辅助制造技术后,这种方法就不能接受啦,因为自动化的设备可以制造出高精度的零件。Pierre Bezier在1960年代法国雷诺汽车公司工作时也遇到了这个问题。他发明了Bezier曲线作为高精度拟合曲线的一种方法。计算机驱动的机床设备可以精确地、可靠地的制造出曲线。和其它伟大的发明一样,其他的发明家也同时做出了成绩,但是这种拟合曲线的方法还是以Bezier的名字命名。

注:在第四章,B样条曲线,你将会学到Bezier曲线可以认为是B样条曲线的一个特例。本章中我将用严格的术语来解释,为了后面更通用的B样条曲线。

一些推导Bezier曲线的数学概念超出了本书的范围,对于应用的人来说也不是很重要,所以我将用基本的几何术语来描述这个公式。我已经讲过了直线的参数方程,现在将把这些概念扩展到曲线。要画一个线性曲线,至少需要三个点。这三个点叫做控制顶点(Control Points),把控制顶点连接起来就形成了特征多边形(Control Polygon)。图3.2所示为由三个控制顶点形成的二次曲线。

Quadratic Curve

在我讲述怎样用参数方程的方法创建曲线之前,先考虑一个很简单的几何方法。图3.2中的曲线可以用一个基本的细分方法来创建。对每个直线段,选中其中点,并将其相连,重复直到直线段太短而不能再细分时就创建出了光滑的曲线。图3.3所示为使用这种方法的几个步骤:

Curve with Subdivision

若你只是画曲线,几何方法完全够用啦。在实际应用中,你很快就会发现这种方法的局限性。如果其中任意一点改变了,你必须重复所有的细分步骤只为了计算出一个点。显然地,你需要一个方法来描述曲线上任意一点,这个方法就是通过控制顶点的方程来实现。这样你只需要计算控制顶点的方程来求出曲线上的点而不需要再用细分方法啦。这听起来你像是参数方程的活!

图3.4与图3.2有着相同的控制顶点,唯一的不同就是通过直线的参数方程来定义点。

Describing points on the two line segments

现在连接Q1和Q2。图3.5所示为点Q3的参数方程与Q1和Q2的关系。

Connecting the points with another parametric line

所以对于参数t的任意值,都可以在每条线段上找到一个与之对应的点,把它们连接上,就找到连接生成的新的直线上的一个点。图3.5中的Q3即是如此。Q3的位置是由参数t和Q1、Q2的方程确定的,即是由A、B、C和t确定。把Q1、Q2的方程代入Q3的方程可以推导出Q3关于控制顶点和参数t的方程。推导过程如下:

方程的最终形式将推导出相同的二次曲线,如图3.2 和3.3。也是二次Bezier曲线的方程。也可以将其看作一系列基函数和相应的控制顶点和乘积。如下方程所示:

由基函数表示的Bezier曲线上的点:

这个基函数就是伯恩斯坦基函数(Bernstein polynomials)。它确定对于任意参数值t,每个控制顶点对曲线的影响。Bezier曲线的控制顶点数也是不定的。对于控制顶点数量确定的伯恩斯坦基函数,可由如下方程求出:

使用更多的控制顶点的缺点就是计算量会随着控制顶点数的增加而增加。所以通常人们会限制控制顶点数为三或四。在三章剩余部分都以四个控制顶点为例,即三次Bezier曲线。其基函数可以上述方程求出,但为了简单其见,列出如下:

三次Bezier曲线的四个基函数:

在三章或其它章节中画出基函数有时是很有用的。图3.6所示为四个基函数的图形。参数t的区间是[0,1],函数值的区间也是[0,1]。

Draw Basis Function by Matlab

Basis Functions

图3.6揭示了Bezier曲线的基函数的几个特性。首先:权性。即所有基函数的和在参数t取任意值时都为1。其次,端点性质。即曲线的端点通过特征多边形的首末点。

图3.6也揭示了Bezier曲线的一些局限性。每个控制顶点都会影响曲线上的点,端点除外。这就意味着在计算曲线上的点时需要计算很多控制顶点。结果就是控制顶点的个数决定了曲线的次数。曲线的次数是控制顶点数减1。改变任意一个控制顶点都会影响到曲线上的点,所以这就是没有局部控制的作用。这也是Bezier的不足之处,在你确定曲线最终形状时有点不够灵活。由于这个原因,人们通常会把几个三次Bezier曲线拼接,而不是用很多控制顶点来形成曲线。

目录
相关文章
|
7月前
|
算法 光互联 计算机视觉
Locally Adaptive Color Correction for Underwater Image Dehazing and Matching
该文提出了一种新颖的水下图像处理方法,结合颜色转移和局部调整来校正颜色,以应对水下光照和散射造成的图像退化。传统颜色转移方法基于全局参数,不适应水下场景中颜色变化的局部性质。文章中,作者通过融合策略,利用光衰减水平估计来实现局部颜色校正。首先,通过暗通道先验恢复彩色补偿图像,然后估计光衰减图。接着,创建一个合成图像,该图像的统计特性代表高衰减区域,用于颜色转移。最后,通过加权融合初始图像和颜色转移图像,生成最终的颜色校正图像。这种方法旨在提高水下图像的对比度和颜色准确性,特别关注高衰减区域。
86 1
|
监控
DFNet: Enhance Absolute Pose Regression withDirect Feature Matching
DFNet: Enhance Absolute Pose Regression withDirect Feature Matching
149 0
|
Python
“cosine_distance“ “KMeansClusterer“ is not defined
“cosine_distance“ “KMeansClusterer“ is not defined
120 0
|
C++ 计算机视觉 Python
Finding distance between two curves
http://answers.opencv.org/question/129819/finding-distance-between-two-curves/ 问题: Hello, Im trying to add tangents along the curve in the image below, like the red lines in the second picture.
987 0
|
算法
Convert BSpline Curve to Arc Spline in OpenCASCADE
Convert BSpline Curve to Arc Spline in OpenCASCADE eryar@163.com Abstract. The paper based on OpenCASCADE algorithms to approximate the NURBS curve to arc spline.
1531 0
|
算法 图形学 数据可视化
OpenCASCADE Hidden Line Removal
OpenCASCADE Hidden Line Removal eryar@163.com Abstract. To provide the precision required in industrial design, drawings need to offer the possibilit...
2015 0
|
C++ Unix
Simplify Path
Given an absolute path for a file (Unix-style), simplify it. For example,path = "/home/", => "/home"path = "/a/.
794 0
|
C语言 Windows 开发工具
OpenCASCADE Conic to BSpline Curves-Parabola
OpenCASCADE Conic to BSpline Curves-Parabola eryar@163.com Abstract. Rational Bezier Curve can represent conic curves such as circle, ellipse, hyperbola, .
1042 0