日期:2024年6月6日标签:Algorithm/Math

埃尔米特曲线 #

通过拉格朗日插值艾特肯插值并不能获得理想的曲线,因为经常会出现曲线越过节点的情况。

所以这里介绍另一种曲线:Hermite Curves,即埃尔米特曲线。

可以在这里查看埃尔米特曲线演示:https://www.geogebra.org/m/cs4dvwbh

埃尔米特曲线是一个三次曲线,三次曲线有四个系数,它由以下几个信息构建而来:

  • 曲线起点的位置,即参数 t=0t=0 的位置。
  • t=0t=0 时的一阶导数,即曲线在起点的速度。
  • 曲线终点的位置,即参数 t=1t=1 的位置。
  • t=1t=1 时的一阶导数,即曲线在终点的速度。

我们称起点和终点分别为 p0p_0p1p_1,速度分别为 v0v_0v1v_1,下图是一些埃尔米特曲线。

hermite curves

三次曲线方程为:

p(t)=c0+c1t+c2t2+c3t3p(t) = c_0 + c_1t + c_2t^2 + c_3t^3

所以有以下等式成立:

p(0)=p0=>c0=p0v(0)=v0=>c1=v0v(1)=v1=>c1+2c2+3c3=v1p(1)=p1=>c0+c1+c2+c3=p1\begin{aligned} p(0) = p_0 \qquad &=> \qquad c_0 = p_0 \\ v(0) = v_0 \qquad &=> \qquad c_1 = v_0 \\ v(1) = v_1 \qquad &=> \qquad c_1 + 2c_2 + 3c_3 = v_1 \\ p(1) = p_1 \qquad &=> \qquad c_0 + c_1 + c_2 + c_3 = p_1 \\ \end{aligned}

将上式转换为:

c0=p0c1=v0c2=3p02v0v1+3p1c3=2p0+v0+v12p1\begin{aligned} c_0 &= p_0 \\ c_1 &= v_0 \\ c_2 &= -3p_0 - 2v_0 - v_1 + 3p_1 \\ c_3 &= 2p_0 + v_0 + v_1 - 2p_1 \end{aligned}

可以将曲线的参数方程表示为矩阵形式:

p(t)=Ct=[c0c1c2c3][1tt2t3]p(t) = Ct = \begin{bmatrix} c_0 & c_1 & c_2 &c_3 \end{bmatrix} \begin{bmatrix} 1 \\ t \\ t^2 \\ t^3 \end{bmatrix}

注意 cic_i 是一个列向量,它的维数与几何维数有关(1D,2D 或者 3D)。

ccpip_i 和速度 viv_i 的公式可以将上述矩阵转换为称如下的 PHt 格式:

p(t)=Ct=PHt=[p0v0v1p1][1032012100110032][1tt2t3]=p(Ht)=[p0v0v1p1][13t2+2t3t2t2+t3t2+t33t22t3]p(t) = Ct = PHt = \begin{bmatrix} p_0 & v_0 & v_1 &p_1 \end{bmatrix} \begin{bmatrix} 1 & 0 & -3 & 2 \\ 0 & 1 & -2 & 1 \\ 0 & 0 & -1 & 1 \\ 0 & 0 & 3 & -2 \\ \end{bmatrix} \begin{bmatrix} 1 \\ t \\ t^2 \\ t^3 \end{bmatrix} \\ = p(Ht) = \begin{bmatrix} p_0 & v_0 & v_1 &p_1 \end{bmatrix} \begin{bmatrix} 1-3t^2 + 2t^3 \\ t - 2t^2 + t^3 \\ -t^2 + t^3 \\ 3t^2 - 2t^3 \end{bmatrix}

所以得到 Hi(t)H_i(t) 为:

H0(t)=13t2+2t3H1(t)=t2t2+t3H2(t)=t2+t3H3(t)=3t22t3\begin{aligned} H_0(t) &= 1-3t^2 + 2t^3 \\ H_1(t) &= t - 2t^2 + t^3 \\ H_2(t) &= -t^2 + t^3 \\ H_3(t) &= 3t^2 - 2t^3 \end{aligned}

所以可以得到 p(t) 最终公式如下:

p(t)=[p0v0v1p1][H0(t)H1(t)H2(t)H3(t)]=H0(t)p0+H1(t)v0+H2(t)v1+H3(t)p1\begin{aligned} p(t) &= \begin{bmatrix} p_0 & v_0 & v_1 &p_1 \end{bmatrix} \begin{bmatrix} H_0(t) \\ H_1(t) \\ H_2(t) \\ H_3(t) \end{bmatrix} \\ &= H_0(t)p_0 + H_1(t)v_0 + H_2(t)v_1 + H_3(t)p_1 \end{aligned}

(完)

目录