ベジェ曲線

game
スポンサーリンク
スポンサーリンク

ベジェ曲線とは?

ベジェ曲線とは、N個の制御点から得られる(N−1)次曲線です。
滑らかな曲線を描く場合にベジェ曲線はよく利用され、ツールやゲームに使うことが出来ます。

ベジェ曲線ソースコード

下記にC++で、ベジェ曲線上での座標計算プログラムを紹介します。

struct Vector3 {
	union {
		struct { float x,y,z; };
		float v[3];
	};

	float &operator[](unsigned int idx) {
		return v[idx];
	}
	const float &operator[](unsigned int idx) const {
		return v[idx];
	}

};

/*!\brief	ベジェ曲線座標取得
 *\param[out]	rslt	:座標格納
 *\param[in]	p0	:始点
 *\param[in]	p1	:制御点1
 *\param[in]	p2	:制御点2
 *\param[in]	p3	:終点
 *\param[in]	t	:時間 (0.0f <= t <= 1.0f)
 */
void GetBezierCurvePoint(Vector3 &rslt, const Vector3 &p0, const Vector3 &p1, const Vector3 &p2, const Vector3 &p3, float t)
{
	float mP0 =             (1-t)*(1-t)*(1-t);
	float mP1 = 3 * t     * (1-t)*(1-t);
	float mP2 = 3 * t*t   * (1-t);
	float mP3 =     t*t*t;
	rslt[0]	= p0[0]*mP0 + p1[0]*mP1 + p2[0]*mP2 + p3[0]*mP3;
	rslt[1]	= p0[1]*mP0 + p1[1]*mP1 + p2[1]*mP2 + p3[1]*mP3;
	rslt[2]	= p0[2]*mP0 + p1[2]*mP1 + p2[2]*mP2 + p3[2]*mP3;
}
game
スポンサーリンク
muffinをフォローする
エンジニア情報局

コメント

タイトルとURLをコピーしました