D3DXVec2Hermite 函数 (D3DX10Math.h)

注意

D3DX10 实用工具库已弃用。 建议改用 DirectXMath

使用指定的 2D 向量执行 Hermite 样条内插。

语法

D3DXVECTOR2* D3DXVec2Hermite(
  _Inout_       D3DXVECTOR2 *pOut,
  _In_    const D3DXVECTOR2 *pV1,
  _In_    const D3DXVECTOR2 *pT1,
  _In_    const D3DXVECTOR2 *pV2,
  _In_    const D3DXVECTOR2 *pT2,
  _In_          FLOAT       s
);

参数

pOut [in, out]

类型: D3DXVECTOR2*

指向 D3DXVECTOR2 的指针,该 D3DXVECTOR2 是操作的结果。

pV1 [in]

类型: const D3DXVECTOR2*

指向源 D3DXVECTOR2 结构的指针,即位置向量。

pT1 [in]

类型: const D3DXVECTOR2*

指向源 D3DXVECTOR2 结构的指针,一个正切向量。

pV2 [in]

类型: const D3DXVECTOR2*

指向源 D3DXVECTOR2 结构的指针,即位置向量。

pT2 [in]

类型: const D3DXVECTOR2*

指向源 D3DXVECTOR2 结构的指针,一个正切向量。

s [in]

类型: FLOAT

加权系数。 请参阅“备注”。

返回值

类型: D3DXVECTOR2*

指向 D3DXVECTOR2 结构的指针,该结构是 Hermite 样条内插的结果。

备注

D3DXVec2Hermite 函数使用 Hermite 样条内插从 (positionA、tangentA) 到 (positionB、tangentB) 。

样条内插是缓入、缓和样条的泛化。 坡道是 Q () 的函数,具有以下属性。

Q () = Asー + Bs² + Cs + D (,因此,Q' () = 3As² + 2Bs + C)

a) Q (0) = v1,因此 Q' (0) = t1

b) Q (1) = v2,因此 Q' (1) = t2

v1 是 pV1 的内容,v2 在 pV2 的内容中,t1 是 pT1 的内容,t2 是 pT2 的内容。

这些属性用于求解 A、B、C、D。

D = v1  (from a)
C = t1  (from a)
3A + 2B = t2 - t-1 (substituting for C)
A + B = v2 - v1 - t1 (substituting for C and D)

插入 A、B、C 和 D 的解决方案,以生成 Q () 。

A = 2v1 - 2v2 + t2 + t1
B = 3v2 - 3v1 - 2t1 - t2
C = t1
D = v1

这会生成:

Q (s) = (2v1 - 2v2 + t2 + t1) sー + (3v2 - 3v1 - 2t1 - t2) s² + t1s + v1

可将其重新排列为:

Q (s) = (2s² - 3s² + 1) v1 + (-2sー + 3s²) v2 + (sー - 2s² + s) t1 + (sー - s²) t2

Hermite 样条对于控制动画很有用,因为曲线穿过所有控制点。 此外,由于位置和切线在每个段的末端显式指定,因此,只要确保起始位置和正切值与最后一段的结束值匹配,就很容易创建 C2 连续曲线。

此函数的返回值与 pOut 参数中返回的值相同。 这样, D3DXVec2Hermite 函数就可用作另一个函数的参数。

要求

要求
标头
D3DX10Math.h

D3DX10.lib

另请参阅

数学函数