0、前言
本博客是我在学习的时候翻译前人博客的版本,在翻译过程中出现了很多问题,大家多多反馈。
感谢“密歇根理工大学--计算机科学系--Dr. C.-K. Shene 教授”做出的杰出贡献。
1、介绍
我们的第一个问题是:为什么我们需要新的参数曲线形式?一个直接的答案是,在前一单元(内容太多,建议点击自己去看)讨论的那些参数曲线不是很几何。更准确地说,给定这样一个参数形式,如果不进行进一步分析,很难知道它所代表的底层几何。方程的系数没有任何几何意义,如果修改一个或多个系数,几乎不可能预测形状的变化。因此,设计遵循一定轮廓的曲线是非常困难的。
在实践中,设计师或用户通常不关心底层的数学(当然还有方程式)。他们或多或少专注于完成工作。为此,一个支持用户设计的系统 曲线必须是
1、直观:
我们期望每个步骤和每个算法都有直观的几何解释。
2、灵活:
该系统应该为用户提供更多的控制来设计和编辑曲线的形状。创建和编辑曲线的方式应该是简单的、直观的和几何的,而不是通过操纵方程。
3、统一的方法:
不同类型曲线(如直线、圆锥曲线、三次曲线)的表示、创建和编辑方式必须相同。也就是说,它不需要不同的技术来操作不同的曲线(即,二次曲线和三次曲线)。
4、不变:
所表示的曲线在平移、旋转、仿射等几何变换下不会改变其几何形状。
5、效率和数值稳定性:
曲线设计系统的用户可能不关心底层几何结构的美观;但是,他/她希望系统能够快速准确地提供他/她想要的曲线。此外,大量的计算不会“扭曲”曲线的形状(即数值稳定性)。
本单元的重点是一些曲线设计技术,可以满足上述标准。我们将在这里讨论Bézier曲线,并在接下来的两个单元中讨论b样条曲线和NURBS曲线。这些技术的统一主题包括以下优点:
1、用户为系统布置一组控制点,以得出或多或少遵循控制点集趋势的曲线。
2、用户可以改变一些控制点的位置和一些其他特征来修改曲线的形状。不需要方程,因为曲线的方程通常不存储。
3、如果需要,用户可以在不改变曲线形状的情况下添加控制点和其他重要信息。通过这种方式,4、用户可以更自由地编辑曲线,因为添加控制点和其他信息增加了曲线的自由度。
5、用户甚至可以将曲线分成两段进行“微”编辑,然后再将它们合并成一段。
6、在不知道曲线方程的情况下,有非常几何的、直观的和数值上稳定的算法来找到曲线上的点。
7、一旦你知道了曲线,表面对应的东西就几步之遥了。更准确地说,从曲线到曲面的过渡不会造成太大困难,因为你从曲线中学到的东西直接适用于曲面。
我们将从本单元最基本的开始: Bézier曲线。大约在50年代末和60年代初,雪铁龙的保罗·德·卡斯特约和雷诺的皮埃尔·e·巴姆齐耶同时发现了巴姆齐耶曲线。Basis Bspline,或简称b样条,是由N.罗巴切夫斯基知道并研究的,他对数学的主要贡献可能是在18世纪后期所谓的双曲(非欧几里得)几何。然而,我们将采用C. de Boor, M. Cox和L. Mansfield在70年代末开发的现代版本。注意,Bézier曲线是b样条的特殊情况。
b样条曲线和 Bézier曲线都是多项式参数曲线。正如前一单元所讨论的,多项式参数形式不能表示一些简单的曲线,如圆。因此,Bézier曲线和b样条只能表示多项式参数形式所能表示的。通过引入齐次坐标使之有理,将Bézier齐次曲线和b样条推广为有理Bézier齐次曲线和非均匀有理b样条,简称NURBS。显然,有理 Bézier曲线比 Bézier曲线更强大,因为有理Bézier曲线现在可以表示圆和椭圆。同样,NURBS比b样条更强大。这四种曲线表示之间的关系如下所示。

2、Bézier曲线的构造
给定n+1个空间中的P0、P1、P2…Pn控制点,由这些控制点定义的Bézier曲线是


其中系数定义如下:
(译者建议:可以先从两个点自己慢慢推导,即点在直线上运动,学习参考入口
两个点形式===》简单得到:C(u)=(1-u)P0+uP1,u∈[0,1]
三个点形式==》l=(1-u)P0+uP1,m=(1-u)P1+uP2,C(u)=(1-u)l+um,带入得到:
,u∈[0,1]
四个以上类推得到如下)

因此,在Bézier 曲线上对应于u的点是所有控制点的“加权”平均值,其中权重是系数。线段P0P1, P1P2,…, Pn-1Pn,称为边(leg),按这个顺序连接形成一条控制折线。许多作者更喜欢把这种控制折线称为控制多边形。函数
, 0 <= i <= n,称为Bézier基函数或Bernstein多项式。
注意u的定义域是[0,1]。因此,所有基函数都是非负的。在上面的例子中,由于u和i都可以是0,1 - u和n - i也可以是0,我们采用惯例00等于1。下图显示了由11个控制点定义的Bézier 曲线,其中蓝点是曲线上的一个点,对应于u=0.4。如图所示,曲线或多或少遵循折线。Bézier 曲线的以下特性很重要:

Bézier 曲线的以下特性很重要:
- 由n+1个控制点定义的Bézier 曲线的度为n:
在每个基函数中,u的指数为i + (n - i) = n,因此曲线的度数为n。 - C(u)经过P0和Pn:
如上图所示。曲线通过第一个控制点和最后一个控制点。请用一些简单的代数操作自己验证一下。 - Non-negativity:
所有基函数都是非负的。我们之前提到过。 - 分割统一:
在固定u处的基函数和是1。不难证明基函数是表达式1 = (u + (1 - u))^n的二项式展开式中的系数。因此,它们的和是1。此外,由于它们是非负的,我们得出结论,任何基函数的值都在0和1的范围内。

在上面的左图中,我们有一个由五个控制点定义的Bézier 曲线。它的五个基函数是u中的函数,如右图所示。图中显示u=0.5和所有五个基函数。最右边的竖条显示了将1划分为5个区间的方法,因此被称为统一分割。请注意,分区的颜色与用于绘制其相应基函数的颜色相同。
因为所有的基函数都在0到1的范围内,并且和为1,所以在加权平均的计算中可以把它们看作是权重。更准确地说,我们可以说“为了计算C(u),我们取控制点Pi的权重
并将它们相加。”
-
凸包特性:
这意味着由给定的n + 1个控制点定义的Bézier 曲线完全位于给定控制点的凸包中。一组点的凸包是包含所有点的最小凸集。下图中,11个控制点的凸壳以灰色表示。注意,并非所有控制点都在凸包的边界上。例如,控制点3、4、5、6、8和9位于内部。除了前两个端点外,曲线完全位于凸包中。
这个属性很重要,因为我们可以保证生成的曲线将在一个可理解和可计算的区域内,而不会超出该区域。
- 变异递减特性:
如果曲线在一个平面上,这意味着没有一条直线与Bézier 曲线相交的次数比它与曲线的控制折线相交的次数多。
看看上面的图。黄线与曲线相交3次,与折线相交7次;品红线与曲线相交5次,与折线相交7次;青色线与曲线及其折线相交两次。你可以画其他直线来验证这个性质。
如果曲线是空间曲线,用“平面”代替“线”就足够了。然而,可能会出现特殊情况;提出一个考虑到这些特殊情况的适当计数方案并不是一件困难的任务。
那么,这个性质是什么意思呢?它告诉我们曲线的复杂性(即转弯和扭转)并不比控制折线更复杂。换句话说,控制折线比Bézier 曲线更频繁地扭转和转动,因为任意一条线碰到控制折线比碰到曲线更频繁。看一下上图,控制折线比它定义的曲线更复杂。
- 仿射不变性:
如果将仿射变换应用于Bézier 曲线,则可以从其控制点的仿射图像构建结果。这是一个很好的性质。当我们想要对Bézier 曲线进行几何或仿射变换时,这个性质表明我们可以对控制点进行变换,这很容易,一旦得到了变换后的控制点变换后的Bézier 曲线就是由这些新点定义的曲线。
如果u的定义域不是[0,1]怎么办?
有时Bézier 曲线的定义域是[a,b]而不是[0,1]。因此,需要改变变量(归一化)。我们要做的就是把[a,b]中的u转换成[0,1]中的新u,然后在基函数中使用这个u。将u转换为[0,1]的方法如下:

将u代入基函数得到:

这些新的基函数在[a,b]定义域上定义了一条Bézier 曲线。我们将在后面的章节中使用这个事实。
简短的总结(重要)
综上所述,要定义n次的Bézier 曲线,我们需要在空间中选择n + 1个控制点,使它们大致表示所需曲线的形状。然后,如果不符合我们的期望,我们可以移动控制点。当一个或多个控制点被移动时,Bézier 曲线的形状也随之改变。但是,曲线始终处于控制点定义的凸包内(凸包特性),生成的曲线形状比控制折线(变化递减特性)要简单。
3、移动控制点
如果一个控制点移动到一个新的位置,曲线的形状是如何改变的?
假设控制点Pk移动到新的位置Pk + v,其中向量v给出了移动的方向和长度。如下图所示:

设原Bézier 曲线为:

因为新的Bézier 曲线是由P0, P1. ..., Pk+v, ..., Pn,定义的,它的方程D(u)是

在上面的例子中,因为只有第k项使用了不同的控制点Pk + v,重组后我们知道新的曲线是原始曲线和额外的项的和。这意味着:
将原曲线上的u对应点沿v方向平移||,得到新曲线上u的对应点。
更准确地说,给定同一个u,在原始曲线上有点 C(u),而在新曲线上有 D(u)并且。由于 v 给出了运动方向,因此 D(u) 是沿同一方向移动 C(u) 的结果。当然,这个平移的长度是向量
的长度。因此,当
达到最大值时,从C(u)到D(u)的变化最大。
更准确地说,给定一个u,我们在原曲线上有点C(u)在新曲线上有点D(u),且 D(u) = C(u) +

本文主要介绍了Bézier曲线,包括其构造方法,需选择n + 1个控制点,曲线具有凸包、变化递减等特性。还阐述了移动控制点对曲线形状的影响,介绍了在曲线上找点的De Casteljau算法,以及曲线的导数、分割、升度等内容,并给出相关问题供思考。
1961

被折叠的 条评论
为什么被折叠?



