计算机图形学中的 Hermite 曲线

在计算机图形学中,我们经常需要在屏幕上绘制各种类型的对象。这些对象并不总是平坦的,很多时候我们需要绘制曲线来描绘一个物体。

在深入 Hermite 曲线之前,让我们先来探讨一下曲线的基本概念。样条曲线主要分为两种类型:

1. 逼近样条曲线: 在这种情况下,曲线并不经过控制点,而是从控制点附近通过。正如下图所示,Bezier 曲线和 B 样条曲线就是典型的例子。

!Approximation Spline Curve

2. 插值样条曲线: 在这种情况下,曲线会穿过所有的控制点。Hermite 曲线就是一个典型的例子。

!Interpolation Spline Curve

Hermite 曲线是以法国数学家 Charles Hermite 的名字命名的,它是一种插值分段三次多项式曲线。它在每个控制点处都有指定的切线。Hermite 样条曲线可以进行局部调整,因为每一段曲线仅取决于其端点的约束条件。

如果 P(k) 表示控制点 Pk 和 P 之间曲线段的参数三次点函数,那么定义 Hermite 曲线段的边界条件如下:

P(0)= Pk

P(1)= P_k+1

P‘(0)= DPk (P(0) 的导数)

P‘(1)= DP_k+1 (P(1) 的导数)

其中 DPk 和 DPk+1 指定了控制点 Pk 和 Pk+1 处的参数导数值(即曲线的斜率)。生成的 Hermite 曲线如下图所示:

!Hermite Curve

我们要知道 Hermite 曲线是一个三次多项式。所以我们可以这样写:

P(u)= au^3 +bu^2 +cu+d, 其中 0<=u<=1

Px(u)= axu^3+ bxu^2+ cxu+ dx

Py(u)= ayu^3+ byu^2+ cyu+ dy

Pz(u)= azu^3+ bzu^2+ cz^u+ dz

现在让我们对三次多项式 P(u) 进行求导。求导后,我们得到:

P‘(u)= 3au^2+ 2bu+ c

接下来,我们将把边界条件 u=0 和 u=1 应用到 P(u) 上。

我们首先应用 u=0

Pk=P(0)= a0+ b0+ c0+ d1 —-(1)

第二个边界条件 u=1,

Pk=P(1)= a1+ b1+ c1+ d1 ——(2)

对于 P 的导数,我们现在应用边界条件。首先,应用 u=0

P‘(0)= 3a0+ 2b0+ c1+ d0 ——(3)

现在应用 u=1

P‘(1)= 3a1+ 2b1+ c1+ d1 ——(4)

这些就是我们将边界条件应用于 P(u) 和 P‘(u) 后得到的四个线性方程。现在我们将把这四个方程写成矩阵的形式,如下图所示。

\begin{bmatrix} P(0)\\ P(1)\\ P‘(0)\\ P‘(1)\\ \end{bmatrix} or \begin{bmatrix} P{k}\\ P{k+1}\\ DP{k}\\ DP{K+1}\\ \end{bmatrix} = \begin{bmatrix} 0 & 0& 0 & 1\\ 1 & 1& 1 & 1\\ 0& 0 & 1& 0\\ 3& 2& 1 & 0 \end{bmatrix} \begin{bmatrix} a\\ b\\ c\\ d\\ \end{bmatrix}

我们可以通过执行所需的矩阵运算来计算 a, b, c 和 d 的值,如下所示。

\begin{bmatrix} a\\ b\\ c\\ d\\ \end{bmatrix}\begin{bmatrix} 0 & 0& 0 & 1\\ 1 & 1& 1 & 1\\ 0& 0 & 1& 0\\ 3& 2& 1 & 0 \end{bmatrix} = \begin{bmatrix} P{k}\\ P{k+1}\\ DP{k}\\ DP{K+1}\\ \end{bmatrix}

\begin{bmatrix} a\\ b\\ c\\ d\\ \end {bmatrix} = \begin{bmatrix} 0 & 0& 0 & 1\\ 1 & 1& 1 & 1\\ 0& 0 & 1& 0\\ 3& 2& 1 & 0 \end{bmatrix}^{-1} \begin{bmatrix} P{k}\\ P{k+1}\\ DP{k}\\ DP{K+1}\\ \end{bmatrix}

\begin{bmatrix} a\\ b\\ c\\ d\\ \end {bmatrix} = \begin{bmatrix} 2 & -2& 1& 1\\ -3 & 3 & -2 & -1\\ 0& 0 & 1 & 0\\ 1& 0 & 0 & 0 \end{bmatrix} \begin{bmatrix} P{k}\\ P{k+1}\\ DP{k}\\ DP{K+1}\\ \end{bmatrix}

上面计算出的矩阵被称为 Hermite 矩阵,记为 MH。所以我们可以将方程写成如下形式。

\begin{bmatrix} a\\ b\\ c\\ d\\ \end {bmatrix} = MH . \begin{bmatrix} P{k}\\ P{k+1}\\ DP{k}\\ DP{K+1}\\ \end{bmatrix}

我们要知道 P(u)= au^{3}+bu^3+cu+d

P(u)= u^{3}+u^2+u+1 \begin{bmatrix} a\\ b\\ c\\ d\\ \end {bmatrix} = u+u+u+1 . MH \begin{bmatrix} P{k}\\ P{k+1}\\ DP{k}\\ DP{K+1}\\ \end{bmatrix}

在上图中将右侧的矩阵相乘后,我们将得到:

P(u)= Pk (2u3 – 3u2 + 1) + Pk+1(-2u3+3u2) + DPk(u3-2u2+u) + DPk+1(u3-u2)

P(u)= PkH0(u) + Pk+1H1(u) + DPkH2(u) + DPk+1H3(u)

其中 H0, H1, H2, H3 是 Hermite 混合函数。

Hermite 混合函数

  • 概念重新对齐
  • 曲线是点/向量的加权平均值。
  • 混合函数指定了权重。

应用

Hermite 曲线用于在二维平面上对采样点进行插值,从而产生一条光滑的曲线,但它不是自由形式的曲线,这与 Bezier 曲线和 B 样条曲线不同。最常用的三次样条是 3-D 平面曲线。

优点

Hermite 曲线易于计算。它们用于平滑地穿过控制点进行插值。理解 Hermite 曲线的数学背景将有助于我们理解整个样条曲线家族。

缺点

  • 需要一阶导数;对于设计师来说,提供一阶导数并不合适。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/24365.html
点赞
0.00 平均评分 (0% 分数) - 0