ベジエ ブレンドの計算が間違っていますか? どんな助けでも大歓迎です。どうもありがとうございました。
double bezierBlend(int i, double u, int m) {
double blend = 1;
blend = factorial(m) * pow(u, i) * pow(1 - u, (m - i)) / (factorial(i) * factorial(m - i));
return blend;
}
以下は、定式化に直接従う、ベジエ ブレンド関数を計算するサンプルです。
double choose( long n, long k )
{
long j;
double a;
a = 1;
for (j = k + 1; j <= n; j++)
a *= j;
for (j = 1; j <= n - k; j++)
a /= j;
return a;
};
double bezierBlend( int i, double t, int n )
{
return choose( n, i ) * pow(1 - t, n - i) * pow( t, i );
}
ただし、ほとんどのアプリケーションでは、累乗と二項係数を毎回計算するのは非常に非効率的です。典型的なアプリケーションでは、曲線の次数は一定 (たとえば、2 次の場合は 2、3 次の場合は 3) であり、式を前もって拡張することで関数をより効率的に計算できます。3 次曲線の例を次に示します。
double BezCoef(int i, double t)
{
double tmp = 1-t;
switch (i)
{
case 0: return tmp*tmp*tmp;
case 1: return 3*tmp*tmp*t;
case 2: return 3*tmp*t*t;
case 3: return t*t*t;
}
return 0; // not reached
}