5次,7次,9次,11次のB-スプライン曲線 [プログラム]
B-スプライン曲線について、理解してプログラムまでそれなりに時間がかかってしまったので、ひょっとすると同じことを考えているかもしれない人向きに、ここに結果だけ書いておきます。
なお、ここでいう「n次」とは、B-スプライン曲線の中で計算するtの最高次数がnであるものとします。
まず、個人的には、以下の2つのページをおすすめします。
そして、5次から11次の結果については、「フューチャー・ホームページ」の「B-スプライン関数」のページの計算プログラムをベースにします。
フューチャー・ホームページのB-スプライン関数:
http://www1.u-netsurf.ne.jp/~future/HTML/bspline.html
Wikipedia(英語):
https://en.wikipedia.org/wiki/B-spline
まず、3次のB-スプライン曲線ですが、先程のフューチャー・ホームページ内に記述されています。
そこのプログラムのCoefficent(double t)が、3次のB-スプラインの計算の中心部分です。
で、5次ですが、これは、英語のWikipediaの方をみて、あれこれ試して調べた結果がこれです。変数tのかわりにuを使っています。
なお計算には、MAXIMAを使いました。
次に7次ですが(偶数次数は計算していません)、以下のとおりとなります。
(クリックで別ウィンドウで表示します)
9次は以下のとおりです。一部約分されている分母があることに注意してください。
(クリックで別ウィンドウで表示します)
11次は以下のとおりです。これも一部約分されている分母があることに注意してください。
(クリックで別ウィンドウで表示します)
最後に、3次から11次でどう変わるかを示します。
フューチャー・ホームページのプログラムでの点P0からP4で各次B-スプラインで描画した結果です。
(DrawSpline(Graphics g, double t)内でのfor文jの範囲は次数に応じて増やしてください)
描画にはgnuplotを使ったので、Y座標の上下が逆になっています。
なお、ここでいう「n次」とは、B-スプライン曲線の中で計算するtの最高次数がnであるものとします。
まず、個人的には、以下の2つのページをおすすめします。
そして、5次から11次の結果については、「フューチャー・ホームページ」の「B-スプライン関数」のページの計算プログラムをベースにします。
フューチャー・ホームページのB-スプライン関数:
http://www1.u-netsurf.ne.jp/~future/HTML/bspline.html
Wikipedia(英語):
https://en.wikipedia.org/wiki/B-spline
まず、3次のB-スプライン曲線ですが、先程のフューチャー・ホームページ内に記述されています。
そこのプログラムのCoefficent(double t)が、3次のB-スプラインの計算の中心部分です。
で、5次ですが、これは、英語のWikipediaの方をみて、あれこれ試して調べた結果がこれです。変数tのかわりにuを使っています。
なお計算には、MAXIMAを使いました。
次に7次ですが(偶数次数は計算していません)、以下のとおりとなります。
(クリックで別ウィンドウで表示します)
9次は以下のとおりです。一部約分されている分母があることに注意してください。
(クリックで別ウィンドウで表示します)
11次は以下のとおりです。これも一部約分されている分母があることに注意してください。
(クリックで別ウィンドウで表示します)
最後に、3次から11次でどう変わるかを示します。
フューチャー・ホームページのプログラムでの点P0からP4で各次B-スプラインで描画した結果です。
(DrawSpline(Graphics g, double t)内でのfor文jの範囲は次数に応じて増やしてください)
描画にはgnuplotを使ったので、Y座標の上下が逆になっています。