我们使用一系列的点去定义一条曲线。这些控制点描述了曲线的一些性质。最常见的曲线叫做贝塞尔曲线(Bézier Curve)。
在三个点的情况下。在二维情况下,使用三个控制点画出的贝塞尔曲线称为二次贝塞尔曲线(quadratic Bézier)。这是由Pierre Bézier 和 Paul de Casteljau 提出的算法,称为 de Casteljau 算法。
对于 b0, b1, b2 定义的贝塞尔曲线,我们将求贝塞尔曲线的过程转换成求在 ∈ [0, 1] 时刻,对应贝塞尔曲线上的点。
在某一时刻 对应的点可以按照以下方法求出:
这是一个递归的计算过程。任何一个点都是时间 的一个映射,因此这是显式的几何表示。
在多个点的情况下
在多个点的情况下,我们只需要仿照三个点的情况,每一次都在对应线段上找到对应时刻 所对应的点,并将相邻的点连成线段后重复上面的过程,直到得到最后一个点
通过上一节我们可以看出贝塞尔曲线的画法是类似于递归的方式画出的。我们也知道贝塞尔曲线上的点只和参数 有关。因此我们可以得到曲线的数学表示。
其中 () 是 Bernstein 多项式,它是 ( + (1 − )) 二项分布的第 项展开:
在三维情况下,公式不变。所有的点变成三维空间上的点进行计算即可。
贝塞尔曲线满足以下性质:
当我们使用过多的控制点定义一条曲线时,曲线会变得比较平滑,并且不便控制。因此我们一般使用逐段的方式定义贝塞尔曲线。我们每次使用 4 个控制点。我们会把前两个点和后两个点各看作一个控制杆来控制整个曲线。这和 Photoshop 中的钢笔工具是一致的。
对于逐段的贝塞尔曲线,我们需要保证其连续性,我们对连续性有以下定义:
一边情况下 C1 连接就显得足够光滑。在某些特殊情况下我们需要更高阶的连续。
样条曲线(Split Curve)可以形象地理解为在定义了多个控制点后,在这些控制点上固定一个有弹性的木条形成的曲线。在任何一点上不论几阶导数都是连续的。最常见的样条曲线称为 B-样条(Basis)。
我们可以通过曲线的定义扩展出曲面(Surface)的定义。
贝塞尔曲面的计算类似于双线性插值的过程。我们使用 4 × 4 个点形成贝塞尔曲面。首先,我们在每一行生成 4 条贝塞尔曲线,接下来在 4 条贝塞尔曲线上找到相同时刻对应的 4 个点生成一条新的贝塞尔曲线。这些贝塞尔曲线的集合形成了贝塞尔曲面。对于贝塞尔曲面,我们需要两个变量 , 对其进行数学表示。