ベジェ曲線とは、N個の制御点からなるN-1次曲線のこと。 wikipedia: ベジェ曲線
このシリーズでは、プログラムの様々なことに応用することを目指して、ベジェ曲線について調べます。
制御点を B0, B1, …, BN-1 とすると、ベジェ曲線は、
と表現される。ここで、Jni(t) はバーンスタイン基底関数のブレンディング関数である。
t が 0 から 1 まで変化する時、B0 と BN-1 を両端とするベジェ曲線が得られる。
ベジェ曲線の式は、引用のとおりであるらしい。 通常良く使われるベジエ曲線は、N=4 の3次ベジェ曲線。 Bi は、各制御点の座標。 2行目は、 “バーンスタイン基底関数のブレンディング関数” とのことらしいが、よくわからない。 特に、 ( n i ) と書いてあるベクトルらしきものがわからない。 散々調べた結果、これは 組み合わせの数 nCi という意味だった。 こちらの関数で、n = N-1 ということなので少し注意。
static public PointF curve(PointF[] pt, float t) { PointF total = new PointF(0.0f, 0.0f); int n = pt.Length - 1; int i; for (i = 0; i < pt.Length; i++) { total.X += pt[i].X * mCn(n, i) * (float)Math.Pow((double)t, i) * (float)Math.Pow(1.0 - t, (double)n - i); total.Y += pt[i].Y * mCn(n, i) * (float)Math.Pow((double)t, i) * (float)Math.Pow(1.0 - t, (double)n - i); } return total; }
3次ベジェ曲線がよく使われている。4つの制御点を持ち、3次式で表される。
(a, b, c, d は制御点。)
(tについて整理すると以下の様になる。)