分段插值/Hermite插值

  • 1. 交互控制
  • 2. 埃尔米特曲线段
  • 2.1 埃尔米特混合函数
  • 2.2 艾尔米特导数


曲线和曲面的方法一般都是基于点的----使用多项式,可以很容易的构造通过给定一维数组或二维点网格的参数曲线段(或曲面贴片)。

这些方法的缺点在于它们不是交互式的。如果生成的曲线或曲面不是设计师想要的,那么修改它的唯一方法就是添加点。移动这些点不是一个选项,因为曲线必须经过原始数据点。添加点可以控制曲线的形状,但会降低计算速度。

一个实用的、有用的曲线/曲面设计算法应该是交互式的。它应该提供用户控制的参数,以可预测的、直观的方式修改曲线的形状。Hermite 插值 就是这样一种方法。

埃尔米特插值基于两点 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组埃尔米特插值python程序 埃尔米特插值的优缺点_埃尔米特插值python程序_02 以及两个切向量 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_03埃尔米特插值python程序 埃尔米特插值的优缺点_曲线拟合_04。它计算从 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组 开始朝向 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_03埃尔米特插值python程序 埃尔米特插值的优缺点_埃尔米特插值python程序_02 结束朝向 埃尔米特插值python程序 埃尔米特插值的优缺点_曲线拟合_04 的曲线段。下图显示了几个不同的埃尔米特曲线段,以及它们的端点切向量:

埃尔米特插值python程序 埃尔米特插值的优缺点_插值_09

很明显,一个单独的艾尔米特片段可以有许多不同的形状。它甚至可以有一个尖,可以发展成一个循环。然而,一个完整的曲线,通常需要有几个连续的线段,样条方法构造这样的曲线将在之后讨论。

1. 交互控制

艾尔米特插值具有重要的优势:它是互动的。如果艾尔米特曲线段有一个错误的形状,用户可以通过修改切向量来编辑它。

下图显示了如何通过修改矢量的振幅来编辑曲线。图中显示了三条曲线,开始在一个 埃尔米特插值python程序 埃尔米特插值的优缺点_埃尔米特插值python程序_10 的方向,最后垂直下降。这里展示的效果很简单,随着起始切线的大小增加,曲线在原方向上继续延长。这种行为意味着段切线产生了一个曲线,改变了它的方向,并开始向终点直线移动。这样的曲线接近于直线段,因此我们得出结论,长切线会产生松曲线,而短曲线会产生紧曲线。

埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_11


切线的大小(而不仅仅是方向)影响曲线形状的原因是,三维的艾尔米特段是一个三维参量,计算一个三次幂需包含四个系数,每一个都是三个一组,总共有 12 个未知数。两个端点提供了 6 个已知量,两个切线提供了剩下的 6 个量。然而,如果我们只考虑向量的方向而不考虑它的大小,那么向量 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_12

2. 埃尔米特曲线段

艾尔米特曲线段很容易推导。它是一个有四个系数的三次幂曲线,其系数取决于两端点和两切线。三次曲线的基本方程为:
埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_13

这是这条曲线的代数表示,其中四个系数仍然未知。一旦这些系数用已知的几何量表示出来,曲线就会以几何形式表示出来。

曲线 埃尔米特插值python程序 埃尔米特插值的优缺点_曲线拟合_14 的切向量为导数 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_15,用 埃尔米特插值python程序 埃尔米特插值的优缺点_埃尔米特插值python程序_16 来表示。因此,该曲线的切向量为:
埃尔米特插值python程序 埃尔米特插值的优缺点_埃尔米特插值python程序_17
我们用 埃尔米特插值python程序 埃尔米特插值的优缺点_埃尔米特插值python程序_18 来表示两个给定点 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组埃尔米特插值python程序 埃尔米特插值的优缺点_埃尔米特插值python程序_02 以及两个给定的切线 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_21埃尔米特插值python程序 埃尔米特插值的优缺点_曲线拟合_22。方程 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_23,其显式表示为:
埃尔米特插值python程序 埃尔米特插值的优缺点_埃尔米特插值python程序_24

很容易解得:
埃尔米特插值python程序 埃尔米特插值的优缺点_曲线拟合_25

将这些解带入方程,整理可得:
埃尔米特插值python程序 埃尔米特插值的优缺点_曲线拟合_26

其中,
埃尔米特插值python程序 埃尔米特插值的优缺点_埃尔米特插值python程序_27

埃尔米特插值python程序 埃尔米特插值的优缺点_插值_28 为队列 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_29埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_30 为行 埃尔米特插值python程序 埃尔米特插值的优缺点_样条_31

埃尔米特插值python程序 埃尔米特插值的优缺点_插值_32

函数 埃尔米特插值python程序 埃尔米特插值的优缺点_插值_33 为 Hermite 混合函数。它们在曲线上创造了四个给定量的混合点,如上图所示。注意 埃尔米特插值python程序 埃尔米特插值的优缺点_埃尔米特插值python程序_34埃尔米特插值python程序 埃尔米特插值的优缺点_样条_35埃尔米特插值python程序 埃尔米特插值的优缺点_样条_36 两个函数混合点不是切向量,因此应该是重心函数。我们也可以写成 埃尔米特插值python程序 埃尔米特插值的优缺点_曲线拟合_37埃尔米特插值python程序 埃尔米特插值的优缺点_插值_38

埃尔米特插值python程序 埃尔米特插值的优缺点_样条_39

曲线现在可以写成:
埃尔米特插值python程序 埃尔米特插值的优缺点_插值_40

已知 埃尔米特插值python程序 埃尔米特插值的优缺点_插值_41,也就是 埃尔米特插值python程序 埃尔米特插值的优缺点_埃尔米特插值python程序_42。矩阵 埃尔米特插值python程序 埃尔米特插值的优缺点_插值_43 称为 Hermite 基矩阵。

2.1 埃尔米特混合函数

继续分析上面示例中的四个混合函数,对这些函数的分析对于彻底理解艾尔米特插值方法是必不可少的。

埃尔米特插值python程序 埃尔米特插值的优缺点_插值_32

函数 埃尔米特插值python程序 埃尔米特插值的优缺点_样条_35 为分配给起始点 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组 的权重。它从最大值 埃尔米特插值python程序 埃尔米特插值的优缺点_曲线拟合_47埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_48。这说明了为什么当 埃尔米特插值python程序 埃尔米特插值的优缺点_样条_49 值很小时,曲线接近 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组 且说明了为什么对于较大的 埃尔米特插值python程序 埃尔米特插值的优缺点_样条_49 值,埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组 造成的影响很小或者说几乎没有影响。相反的结论对 埃尔米特插值python程序 埃尔米特插值的优缺点_样条_36(末端点 埃尔米特插值python程序 埃尔米特插值的优缺点_埃尔米特插值python程序_02 的权重) 也成立。函数 埃尔米特插值python程序 埃尔米特插值的优缺点_曲线拟合_55 有点棘手。它从 0 开始,在 埃尔米特插值python程序 埃尔米特插值的优缺点_样条_56

  1. 对于小的 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_57 值,函数 埃尔米特插值python程序 埃尔米特插值的优缺点_插值_58 几乎没有影响。曲线一直靠近 埃尔米特插值python程序 埃尔米特插值的优缺点_曲线拟合_59
  2. 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_57 值在 埃尔米特插值python程序 埃尔米特插值的优缺点_样条_61 左右时,权重 埃尔米特插值python程序 埃尔米特插值的优缺点_插值_58 对曲线有一定影响。对于这些 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_57 值,权重 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_64 很小,曲线近似为点 埃尔米特插值python程序 埃尔米特插值的优缺点_埃尔米特插值python程序_65(贡献大),点 埃尔米特插值python程序 埃尔米特插值的优缺点_曲线拟合_66(贡献小) 和向量 埃尔米特插值python程序 埃尔米特插值的优缺点_曲线拟合_67 的和。一个点 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_68 和 一个向量 埃尔米特插值python程序 埃尔米特插值的优缺点_插值_69 的和是一个位于 埃尔米特插值python程序 埃尔米特插值的优缺点_样条_70 的点,这就是权重 埃尔米特插值python程序 埃尔米特插值的优缺点_插值_58 如何沿着切向量方向 埃尔米特插值python程序 埃尔米特插值的优缺点_插值_72
  3. 对于较大的 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_57 值,函数 埃尔米特插值python程序 埃尔米特插值的优缺点_插值_58 再次几乎没有影响。曲线的移动更接近 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_75 因为权重 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_76

函数 埃尔米特插值python程序 埃尔米特插值的优缺点_插值_77 可作类似解释。它对 埃尔米特插值python程序 埃尔米特插值的优缺点_样条_49 的大小几乎没有影响。它的最大值(实际上是最小值,因为它是负的)出现在 埃尔米特插值python程序 埃尔米特插值的优缺点_插值_79 处,所以它只影响这个区域的曲线。当 埃尔米特插值python程序 埃尔米特插值的优缺点_样条_49 的值接近 埃尔米特插值python程序 埃尔米特插值的优缺点_埃尔米特插值python程序_81,曲线近似为点 埃尔米特插值python程序 埃尔米特插值的优缺点_曲线拟合_82(贡献大),点 埃尔米特插值python程序 埃尔米特插值的优缺点_插值_83(贡献小) 和向量 埃尔米特插值python程序 埃尔米特插值的优缺点_埃尔米特插值python程序_84 的和。因为 埃尔米特插值python程序 埃尔米特插值的优缺点_插值_77 是负的,这个和等于 埃尔米特插值python程序 埃尔米特插值的优缺点_插值_86,这就是曲线接近末端点 埃尔米特插值python程序 埃尔米特插值的优缺点_埃尔米特插值python程序_02 时向方向 埃尔米特插值python程序 埃尔米特插值的优缺点_曲线拟合_04

另一个埃尔米特权重函数的重要特征是,埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_89埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_76。它们一定是这样的,因为它们混合了两个点。从前面公式可知为什么是这样的:
埃尔米特插值python程序 埃尔米特插值的优缺点_埃尔米特插值python程序_24

第一个方程就是 埃尔米特插值python程序 埃尔米特插值的优缺点_插值_92,将第二项减小为了 埃尔米特插值python程序 埃尔米特插值的优缺点_插值_93。第三个方程求解 埃尔米特插值python程序 埃尔米特插值的优缺点_样条_94,第四个方程和第二个方程结合,最终被用来计算 埃尔米特插值python程序 埃尔米特插值的优缺点_样条_95埃尔米特插值python程序 埃尔米特插值的优缺点_曲线拟合_96。所有这些说明 埃尔米特插值python程序 埃尔米特插值的优缺点_样条_95埃尔米特插值python程序 埃尔米特插值的优缺点_曲线拟合_96 的形式是 埃尔米特插值python程序 埃尔米特插值的优缺点_插值_99。因此最终的曲线有形式:
埃尔米特插值python程序 埃尔米特插值的优缺点_插值_100

其中省略号表示只依赖于切向量的部分,而不依赖于端点。当它重新排列时,结果为:
埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组_101
这就是为什么 埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组埃尔米特插值python程序 埃尔米特插值的优缺点_一维数组

2.2 艾尔米特导数