-2
有沒有什麼辦法使用scipy evllute BSpline/Nurbs在給定的點?我搜索只需要給定點,結矢量和樣條線順序的方法。Python BSpline/Nurbs評估在給定點使用scipy
我找到了評估樣條函數的方法,但我只想評估給定點的基本元素。那麼有人可能知道在這種情況下使用什麼?它甚至有可能嗎?
另一方面,我已經實現了Cox de Boor算法,但由於他的遞歸定義,評估速度很慢。
有沒有什麼辦法使用scipy evllute BSpline/Nurbs在給定的點?我搜索只需要給定點,結矢量和樣條線順序的方法。Python BSpline/Nurbs評估在給定點使用scipy
我找到了評估樣條函數的方法,但我只想評估給定點的基本元素。那麼有人可能知道在這種情況下使用什麼?它甚至有可能嗎?
另一方面,我已經實現了Cox de Boor算法,但由於他的遞歸定義,評估速度很慢。
在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.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只是給了我一個值。 –
BSpline.basis_element只構造一個基本元素。 –