2017-08-02 10 views
-2

scipyを使用して、特定のポイントでBSpline/Nurbsを明示する方法はありますか?与えられた点、ノットベクトル、スプラインの次数しか必要としないメソッドを探します。特定のポイントでscipyを使用している特定の時点でのPython BSpline/Nurbs評価

私はSpline関数を評価するメソッドを見つけましたが、私は与えられた点で基底要素を評価したいだけです。だから誰もこの場合に何を使うべきかを知っているだろうか?それも可能ですか?

私はCox de Boorアルゴリズムを実装しましたが、再帰的な定義のため、評価はかなり遅いです。 scipyのダウンロード0.19.0では

答えて

0

以上、あなたはBSplineを使用することができます。

In [1]: from scipy.interpolate import BSpline 

In [2]: spl = BSpline.basis_element([0, 1, 2, 3]) 

In [3]: spl(1.5) 
Out[3]: array(0.75) 

In [4]: spl([1.5, 2, 3.6]) 
Out[4]: array([ 0.75, 0.5 , 0.18]) 

ドキュメント:次スプラインの場合https://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.BSpline.html

を具体的には、あなたが実際に多項式基底で働くCubicSplineを、使用することができます。

NURBSは、購入後すぐに購入することはできません。 1つの方法は、BSplineをサブクラス化し、分子と分母の両方を評価するために__call__メソッドを再定義することです(BSpline.__call__に委任することによって)。しかしYMMV。

+0

この機能は私の意見では意味がありません。私が[0、0、0.、0.2,0.4,0.6,0.8,1,1,1]のような結び目ベクトルを持っていれば、 N = {N_ {1,3}、N_ {2,3}、...、N_ {6,3}}のような次数3の6基本要素。ここで、与えられたPoint xでこれらのBasis要素のすべてを評価したいと思います。しかし関数spl = BSpline.basis_elementはちょうど私に1つの値を与えています。 –

+0

BSpline.basis_elementは、単一の基本要素のみを構築します。 –

関連する問題