次の方法で共有


D3DXVec2CatmullRom 関数 (D3dx9math.h)

Note

D3DX ユーティリティ ライブラリは非推奨です。 代わりに DirectXMath を使用することをお勧めします。

指定した 2D ベクトルを使用して、Catmull-Rom補間を実行します。

構文

D3DXVECTOR2* D3DXVec2CatmullRom(
  _Inout_       D3DXVECTOR2 *pOut,
  _In_    const D3DXVECTOR2 *pV0,
  _In_    const D3DXVECTOR2 *pV1,
  _In_    const D3DXVECTOR2 *pV2,
  _In_    const D3DXVECTOR2 *pV3,
  _In_          FLOAT       s
);

パラメーター

pOut [in, out]

型: D3DXVECTOR2*

操作の結果である D3DXVECTOR2 構造体へのポインター。

pV0 [in]

型: const D3DXVECTOR2*

ソース D3DXVECTOR2 構造体 (位置ベクトル) へのポインター。

pV1 [in]

型: const D3DXVECTOR2*

ソース D3DXVECTOR2 構造体 (位置ベクトル) へのポインター。

pV2 [in]

型: const D3DXVECTOR2*

ソース D3DXVECTOR2 構造体 (位置ベクトル) へのポインター。

pV3 [in]

型: const D3DXVECTOR2*

ソース D3DXVECTOR2 構造体 (位置ベクトル) へのポインター。

s [in]

型: FLOAT

重み付け係数。 「解説」を参照してください。

戻り値

型: D3DXVECTOR2*

Catmull-Rom補間の結果である D3DXVECTOR2 構造体へのポインター。

解説

4 つのポイント (p1、p2、p3、p4) を指定して、次のような関数 Q を見つけます。

Q(s) is a cubic function.
Q(s) interpolates between p2 and p3 as s ranges from 0 to 1.
Q(s) is parallel to the line joining p1 to p3 when s is 0.
Q(s) is parallel to the line joining p2 to p4 when s is 1.

次の設定により、Catmull-Rom スプラインをハーマイト スプラインから派生させることができます。

v1 = p2
v2 = p3
t1 = (p3 - p1) / 2
t2 = (p4 - p2) / 2

ここで、

v1 は pV0 の内容です。

v2 は pV1 の内容です。

p3 は pV2 の内容です。

p4 は pV3 の内容です。

ハーマイト スプラインの数式を使用する:

Q(s) = (2s3 - 3s2 + 1)v1 + (-2s3 + 3s2)v2 + (s3 - 2s2 + s)t1 + (s3 - s2)t2

と を v1、v2、t1、t2 に置き換えることで、次の結果が得られます。

Q(s) = (2s3 - 3s2 + 1)p2 + (-2s3 + 3s2)p3 + (s3 - 2s2 + s)(p3 - p1) / 2 + (s3 - s2)(p4 - p2)/2

これは次のように再配置できます。

Q(s) = [(-s3 + 2s2 - s)p1 + (3s3 - 5s2 + 2)p2 + (-3s3 + 4s2 + s)p3 + (s3 - s2)p4] / 2

要件

要件
ヘッダー
D3dx9math.h
ライブラリ
D3dx9.lib

関連項目

数値演算関数

D3DXVec3CatmullRom

D3DXVec4CatmullRom