ストロークのアイコン

ストローク Q&A

Q.

ベジェ曲線の式(定義)は?

A.

ベジェ曲線は、2 以上の次数で定義されます。よく利用されるのは、2次、3次で、4次以上は、ほとんど利用されていません。2次、3次のスプライン曲線※1 の表現力が十分で、かつ、扱いやすい※2 のがその理由です。

※1 ベジェ曲線を、複数つなげたもの
※2 次数が増えると制御点が増えたり、変数の次数が大きくなって計算が複雑になります

2次ベジェ曲線

2次ベジェ曲線の式は、

P(t)=(1-t)^2P_0+2t(1-t)P_1+t^2P_2

です。P_0P_1P_2 は制御点、t はパラメーターです。t を 0 から 1 に変化させていくことで、P_0P_2 を端点とする曲線の点が計算されます。

3次ベジェ曲線

3次ベジェ曲線の式は、

P(t)=(1-t)^3P_0+3t(1-t)^2P_1+3t^2(1-t)^2P_2+t^3P_3

です。P_0P_1P_2P_3 は制御点、t はパラメーターです。t を 0 から 1 に変化させていくことで、P_0P_3 を端点とする曲線の点が計算されます。P_tP_0P_1P_2P_3 は、位置ベクトル ですが、xy 成分に分けても式の形は変わりません。

x(t)=(1-t)^3x_0+3t(1-t)^2x_1+3t^2(1-t)^2x_2+t^3x_3

3 次ベジェ曲線、c++ コード断片

3 次ベジェ曲線の点を、制御点と t から求める c++ のコードです。

template inline
point<_T> CalcBezierPoint(
  const point<_T>& p0, const point<_T>& p1, 
  const point<_T>& p2, const point<_T>& p3,
  _T t
)
{
  _T u = (_T)1 - t;
  return
    u * u * u * p0
    + t * u * u * 3 * p1 
    + t * t * u * 3 * p2
    + t * t * t * p3;
}

ストローク で実際に使われているコードなので、間違ってないと思いますが、point<_T> や、operator * などを定義しないとコンパイルできません。

今すぐ、無料ダウンロード

ストローク ダウンロード

ご意見・ご要望など

ご意見・ご要望などは フォームメール から送信してください。
更新情報は、 ブログ でも配信してます。

共有