次の方法で共有


D3DXVec2CatmullRom

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

D3DXVECTOR2 * 
D3DXVec2CatmullRom(
  D3DXVECTOR2 * pOut,
  CONST D3DXVECTOR2 * pV0,
  CONST D3DXVECTOR2 * pV1,
  CONST D3DXVECTOR2 * pV2,
  CONST D3DXVECTOR2 * pV3,
  FLOAT s
);

パラメータ

  • pOut
    処理の結果を表わす D3DXVECTOR2 構造体へのポインター
  • pV0
    演算対象の位置ベクトルを表す D3DXVECTOR2 構造体へのポインターです。
  • pV1
    演算対象の位置ベクトルを表す D3DXVECTOR2 構造体へのポインターです。
  • pV2
    演算対象の位置ベクトルを表す D3DXVECTOR2 構造体へのポインターです。
  • pV3
    演算対象の位置ベクトルを表す D3DXVECTOR2 構造体へのポインターです。
  • s
    加重係数。「解説」を参照してください。

戻り値

Catmull-Rom 補間の結果を格納した D3DXVECTOR2 構造体へのポインターです。

解説 

4 つの点 (p1、p2、p3、p4) を与えると、次のような関数 Q(s) を検索します。

 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