回答:
ベジエの代わりに、おそらくbスプラインまたはcatmull-romスプラインが必要です。
float bspline(float t, float p0, float p1, float p2, float p3)
{
float it = 1.0f - t;
float b0 = it*it*it * (1.0f / 6.0f);
float b1 = (3*t*t*t - 6*t*t +4) * (1.0f / 6.0f);
float b2 = (-3*t*t*t +3*t*t + 3*t + 1) * (1.0f / 6.0f);
float b3 = t*t*t * (1.0f / 6.0f);
return
b0*p0 +
b1*p1 +
b2*p2 +
b3*p3;
}
float catmullrom(float t, float p0, float p1, float p2, float p3)
{
return 0.5f * (
(2 * p1) +
(-p0 + p2) * t +
(2 * p0 - 5 * p1 + 4 * p2 - p3) * t * t +
(-p0 + 3 * p1 - 3 * p2 + p3) * t * t * t
);
}
使用法:tの範囲は0から1で、値は2つの制御点間のスプラインを補間し、フロートp0、p1、p2およびp3は制御点(前、現在、次、および次)を表します。n次元の曲線を補間するには、軸ごとに1回だけ関数を呼び出します。
bsplinesとcatmull-romの実際的な違いは、基本的にはcatmull-romがすべての制御点を通過する一方で、bsplinesがよりスムーズになることです。
float it = 1.0f - t
と使用it
のためのb0
値は?キャットマルromではなく、なぜbsplineにそれを行うのですか?
私は他の人に役立つかもしれないいくつかのリンクを見つけました:
JSでのベジェ実装のスクリプト例
http://jsfromhell.com/math/bezier
JavaScriptまたはActionScriptから使用して、ベジェパスに沿ってアニメーション化できます。
http://code.google.com/p/javascript-beziers/
オンライン描画スクリプト/プロット。いくつかのテストを行う場合に非常に役立ちます。
http://jsdraw2d.jsfiction.com/demo/curvesbezier.htm