滑らかな線を描く時によく使われますが、私はよく物体の動作に使ってます。
ベジェ曲線を知らない人はwikiをどうぞ
http://ja.wikipedia.org/wiki/%E3%83%99% ... 2%E7%B7%9A
このベジェ曲線を簡単に使えるクラスを作ってみました。
http://dixq.net/zip/blog/Bezier.zip
定義値である
#define X1とY1がP1
#define X2とY2がP2
を示しています。0~1の値をセットして、変更して実行してみると関係が良く分かります。
以下、いくつか試してみました。
[youtube][/youtube]
これって二次元平面上を移動する時にも使えますが、私はモーションを徐々にブレンドしたり、
サッと動き始めて徐々に止まるなんて時に使ってます。
動画の最後を見て頂ければ分かりますが、y成分はxに関係なく決まるんですよね。
この値をブレンド率などに適用してやれば、sin波を使った滑らかな遷移のようなことが出来ます。

βスプライン等と違って2点に依存するので、「動き初めは早く、動き終りは遅く」なんてことが可能です。
作ったクラスはtが時間で0から1まで変化する時
Bezier.Get( x1, y1, x2, y2, t );
みたいな感じで渡せばその時の座標を返してくれますが、このままではsin波を使った滑らかな遷移のような適用には適しません。
そこで
Bezier.Get( 動き初めは速く, 動き終りはゆっくり, モーション時刻 );
みたいな使い方が出来るようにしてみました。
float Get( ePrm_t ePrm1, ePrm_t ePrm2, float fRate );
と書いているのがそれです。コードを載せると長くなるので、ご覧になりたい方は配布コードをご覧ください。
最後にコメントアウトしているコードをループ内に移してもらえれば、それが確認出来ます。
しかし、本当はベジェよりもっとキツイカーブを描く曲線を作りたいんですよね・・。
今の実行結果って精一杯引っ張ってもせいぜいS字にしかならないですが、「直角なんじゃない?」って位まで大袈裟にカーブする曲線が作りたい・・。
もっとカーブ具合のパラメータがいじれる計算式ってないんでしょうかね~。