SSブログ

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を使いました。

order5.png

次に7次ですが(偶数次数は計算していません)、以下のとおりとなります。
(クリックで別ウィンドウで表示します)

order7.png

9次は以下のとおりです。一部約分されている分母があることに注意してください。
(クリックで別ウィンドウで表示します)

order9.png

11次は以下のとおりです。これも一部約分されている分母があることに注意してください。
(クリックで別ウィンドウで表示します)

order11.png


最後に、3次から11次でどう変わるかを示します。
フューチャー・ホームページのプログラムでの点P0からP4で各次B-スプラインで描画した結果です。
(DrawSpline(Graphics g, double t)内でのfor文jの範囲は次数に応じて増やしてください)
描画にはgnuplotを使ったので、Y座標の上下が逆になっています。

points.png


共通テーマ:パソコン・インターネット

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。