成果物
www.youtube.com
端の処理で結構時間がかかってしまいましたが、無事に完成しました。もう少し改良できる点もありますが、ひとまず実用に耐えるレベルのものができました。次数の変更だけでなく、先端を繋ぐか開くかの変更もできます。
コード
Nth_order_B_Splineという名前で追加しています。
github.com
仕組み
線上のtの位置での座標を求める式はこのようになっています。
b()はB-Splineの基底関数(各頂点の重み)で、このように、再帰的に求めることができます。はみ出した…
今回tは、この式のように均一に分布させています。この分布を変えることで端の処理ができるはずなのですが、Division by zeroエラーが出たので別の方法を使っています。
先端の処理は、このサイトを参考にしました。Bスプラインの特性も学ぶことができて本当に参考になりました。
techblog.kayac.com
NURBSとの関係
基底関数に重み(任意)を掛け合わせ、全ての重みの和で割るとNURBSになります。詳しくはこちらをご覧ください。
NURBSとは? - Qiita