ルーチンと関数とライブラリとエンジンと
曲線補間関数TDivs


プロローグで触れた開発中の「Grpha」だけでなく、既に公開している
私のプログラム群では昔から独自の曲線関数を使用しています。
「はいけいこうば」ではグラデーションをこれで作ってますし
「LQ」では各パラメータのモーションパスに使ってます。

そのほかにも、ここになんかの曲線を当てはめたら巧く行きそうだが…。
みたいなときにその式が思い浮かばない場合、とりあえずこの曲線で
がんばって近似してみることすらあります。

この曲線は、実は古くMSX時代から愛用しています。始点と終点を考え、その区間を与えられた
パラメータに従って加速−減速して補間するという単純な物です。加速減速の方法は、
キーから現在地の距離によって、べき乗で重みを付けてるだけです。

X68kでCGを作るようになって真っ先にしたのが、フレームソースによるこの補間形式の実現でした。
乗数を制御することで、タメの量を制御できるので、結構便利だったのです。

ライブラリ(プログラムの部品)化するに当たって、前後の区間の状態から適当に乗数を
計算して、任意の数の制御点を含む曲線を描き出すようにしました。


今回はその曲線関数をサンプル込みで紹介します。

サンプル(TDIVSTEST.LZH 191kB, Win)
テストプログラムなので何が起こっても知りません。各自の責任で動かすように。
なおライブラリそのものの公開は、要望があったとしても「Grpha」完成後まで控えさせて頂きます。
なにしろ、3Dのシステムに組み込んで有効かどうか、自分でも自信ない部分もありますので。

以下サンプルの遊び方:

 

タイプMPが、説明した曲線となります。タイプBMは調整中…というか模索中というか。

時間軸をキー時刻にしてドラッグするとキー位置を変更することができます。内角が鋭角になると
曲線が自動的にとがったりもします。これでボールが壁にバウンスする様子も簡単に!(そうか?)

動作原理上、連続した2キー位置を対角とするバウンディングボックスの外側へ
曲線がはみ出すことはありません。しかし、それはキーを回転させた場合、曲線の形が変わるという
非対称性をもつということでもあります。
アニメーションのモーションパスに使用する場合、それは重視しなくていいだろう、と思っていますが。
また非整数のべき乗を使っているので処理速度的には期待できません。まあ、今時のマシン速いし、
そもそもMSX時代にすら問題にならなかったかな。


戻る