2017-08-02 87 views
-2

有沒有什麼辦法使用scipy evllute BSpline/Nurbs在給定的點?我搜索只需要給定點,結矢量和樣條線順序的方法。Python BSpline/Nurbs評估在給定點使用scipy

我找到了評估樣條函數的方法,但我只想評估給定點的基本元素。那麼有人可能知道在這種情況下使用什麼?它甚至有可能嗎?

另一方面,我已經實現了Cox de Boor算法,但由於他的遞歸定義,評估速度很慢。

回答

0

在SciPy的0.19.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不可用於scipy開箱即用。一種方法是對BSpline進行小類歸類,並重新定義__call__方法來評估分子和分母(通過委託給BSpline.__call__)。 YMMV。

+0

這個功能在我看來沒有意義。如果我有一個結矢量[0,0,0,0,0.2,0.4,0.6,0.8,1,1,1],我應該得到如6級的基礎元素,如N = {N_ {1,3},N_ {2,3},...,N_ {6,3}}。現在我想在給定的Point x處評估所有這些Basis元素。但函數spl = BSpline.basis_element只是給了我一個值。 –

+0

BSpline.basis_element只構造一個基本元素。 –