Catmull-Romスプライン

ざーっとメモ(相当端折ってる)



指定した点を確実に通るタイプのスプライン曲線
(補完型スプライン曲線)

Farguson/Coons曲線式に、指定した4点から導き出した速度を入れるだけ。

4点をp1,p2,p3,p4とすると、Catmull-Romで求まるのはp2とp3の間の曲線だけなので
全点を綺麗に通る曲線を作るには少々工夫が必要かも・・・?

(式) ※1

x(t) = ((2*x0 - 2*x1 + v0 + v1)*t3) + ((-3*x0 -3*x1 -2*v0 -v1)*t2) + v0 * t + x0;

↑これより展開した式の方が使いやすい
       ↓

x(t) = ((-t3+2*t2-t)*p1+(3*t3-5*t2+2)*p2+(-3*t3+4*t2+t)*p3+(t3-t2)*p4) / 2;


行列使って更に見やすくする事も可能。


※1
x -> 補完された位置(pos)
t -> 時間(0-1)
x0 -> 始点(p1)
v0 -> 初速((p3-p1)/2)
x1 -> 終点(p4)
v1 -> 最終速度((p4-p2)/2)

参考にしたサイト
http://markun.cs.shinshu-u.ac.jp/learn/cg/cg3/index5.html
http://msdn.microsoft.com/ja-jp/library/cc372964.aspx