这个系列是GAMES302-等几何分析(GAMES 302: Iso-Geometric Analysis)的同步课程笔记。课程内容涉及等几何分析的几何建模理论与方法、等几何分析数值求解器研发基础、基于等几何分析的形状/拓扑优化理论与方法、等几何分析与细分造型、深度学习的交叉融合等内容,并对等几何分析的研究趋势及应用前景进行分析展望。本节课主要介绍曲面、曲线和曲体的相关理论。
几何形状的参数表示
CAGD
计算机辅助几何设计(Computer Aided Geometric Design, CAGD)是研究如何使用计算机来辅助工程中几何对象表示和设计的学科。


解析曲线曲面 VS 自由曲线曲面
随着航空和汽车等现代制造业的发展,传统基于初等解析曲面(平面、圆柱面、锥面、球面、圆环面等)的几何造型设计方法已经不能满足工业生产制造的需求,人们开始使用由数学方法定义的自由曲线曲面来表达复杂的几何外形。我们希望这种由计算机进行表示的方法能够适合计算机进行处理、能够生成满足工业设计的几何形状,同时还能够方便不同系统的交互。


目前常用的几何形状表示方法主要包括显式表示、隐式表示和参数表示三种:
- 显式表示:使用解析的数学表达式来表达
- 隐式表示:使用隐函数来进行表达
- 参数表示:使用参数函数来进行表达

形状描述的发展
早期的曲线曲面表示方法都是由工业界的工程师来开发的。

比如说直线段的参数表示可以通过对两个端点进行插值来得到。

参数曲线
而对于更一般的空间曲线则可以通过不同维度上的参数函数来表示。

最基本的表达方式是使用多项式作为曲线的参数函数。

这种参数曲线的表达方法有很多优势,比如说它是非常精确的而且可以解析地计算曲线的各种几何量。本课程主要介绍以Bézier、B-样条、NURBS曲线曲面为代表的参数化建模技术。

曲线造型理论与算法
Bézier曲线
前面介绍的基于多项式的参数曲线非常不直观,不适于数值计算与工程设计。因此对于多项式函数的一种改进方式是使用全新的基函数进行表达:
\[\mathbf{R} (t) = \sum_{i=0}^n \mathbf{R}_i B_{i, n} (t)\]其中\(\mathbf{R}_i\)为曲线的第\(i\)个控制点。

Bézier曲线就是这样的一种参数曲线,它由雷诺汽车公司的Bézier提出。Bézier曲线的特点是曲线可以通过控制点的坐标来进行表达,设计人员可以对控制点进行操作来方便地修改曲线。可以说Bézier曲线是CAGD领域早期的重要成果。


从数学上来看,Bézier曲线是使用Bernstein基来表示的多项式函数。Bernstein基可以使用二项式系数来表达:
\[B_{i, n} (t) = \begin{pmatrix} n \\ i \end{pmatrix} \ t^i \ (1-t)^{n-i}\]
Bernstein基有很多非常优秀的数学性质:
- 非负性:\(B_{i, n} (t) \leq 0\)
- 单位剖分性:\(\sum_{i=0}^n B_{i, n} (t) = 1\)
- 端点取值为1:\(B_{0, n} (0) = B_{n, n} (1) = 1\)
- \(B_{i, n} (t)\)仅在\(t = \frac{i}{n}\)处取最大值
- 对称性:\(B_{i, n} (1-t) = B_{n-i, n} (t)\)
- 递归定义:\(B_{i, n} (t) = (1-t) \cdot B_{i, n-1} (t) + t \cdot B_{i, n-1} (t)\)

利用Bernstein基函数的性质,我们可以推导出Bézier曲线的性质:
- 端点插值:Bézier曲线一定会通过起始和终止两个端点,\(\mathbf{R}(0) = \mathbf{R}_0\)以及\(\mathbf{R}(1) = \mathbf{R}_n\)
- 对称性:Bézier曲线控制顶点的几何地位是对称的
- 端点切向指向相邻控制点
- 凸包性:Bézier曲线位于控制点构成的凸包内
- 几何不变性:Bézier曲线的形状仅与控制多边形有关,与坐标系无关
- 变差缩减性





利用Bernstein基函数的递归定义,我们可以得到经典的de Casteljau算法。假设我们有三个控制点\(\mathbf{P}_0\)、\(\mathbf{P}_1\)和\(\mathbf{P}_2\),我们先对线段\(\mathbf{P}_0\mathbf{P}_1\)和\(\mathbf{P}_1\mathbf{P}_2\)进行剖分得到新的控制点\(\mathbf{P}_{1,0}\)和\(\mathbf{P}_{1,1}\),然后再对线段\(\mathbf{P}_{1,0}\mathbf{P}_{1,1}\)进行插值即可得到曲线点的坐标。

对于控制点更多的情况,我们只需要递归地缩减控制点的数量直到计算出曲线坐标即可。


除此之外,当我们计算出曲线上点\(\mathbf{C}(u)\)后该点会把曲线分成左右两部分,它们同样是Bézier曲线。如果我们继续进行剖分,当剖分的次数足够多时得到的新控制点可以作为原始曲线的一个近似。


有理Bézier曲线
Bézier曲线虽然有很多优秀的性质,但也存在一些缺陷。实际上Bézier曲线无法精确表示圆锥曲线,这是由于圆锥曲线无法使用多项式函数来精确表示。

在此基础上人们开发出了有理Bézier曲线,它在标准Bézier曲线的基础上为每个控制点引入一个权重系数\(w_i\)。

引入权重系数\(w_i\)后就可以精确表示各种常用圆锥曲线了。


从整体来看Bézier曲线的一大缺陷在于当我们修改某个控制点时整条曲线会同时发生变化,因此在工程中很多时候会把多条分段Bézier曲线连接起来作为一条完整的曲线。

B样条曲线
为了克服Bézier曲线的缺陷,人们开发出了B样条曲线这样的技术来解决Bézier曲线局部修改的问题。


B样条曲线一条分段连续的多项式曲线,它依赖于节点向量的定义。



因此B样条曲线的核心在于B样条基函数,它同样具有很多优秀的性质。

B样条基函数同样可以通过递归的方式来进行推导。

B样条基函数的导数也具有递推的性质。


实际上B样条曲线和Bézier曲线之间还存在着天然的联系。



NURBS曲线
在B样条曲线的基础上人们又开发出了NURBS曲线,它是整个现代工业设计领域的标准方法。




曲面造型理论与算法
参数曲面的思想与参数曲线类似,对于三维空间曲面上的点我们可以使用二维参数平面进行表示。


Coons曲面

Bézier曲面
类似于Bézier曲线我们可以在uv平面上设置一个网格作为控制网,然后通过插值来获得曲面。






B样条曲面




NURBS曲面



曲体造型理论与算法



