跳至內容

B樣條

維基百科,自由的百科全書

數學的子學科數值分析裏,B-樣條樣條曲線一種特殊的表示形式。它是B-樣條基曲線的線性組合。B-樣條是貝茲曲線的一種一般化,可以進一步推廣為非均勻有理B樣條(NURBS),使得我們能給更多一般的幾何體建造精確的模型。

De Boor算法是一個數值上穩定的計算B樣條的方法。

術語 B樣條Isaac Jacob Schoenberg創造的,B 是基(basis)樣條的縮略。

定義

[編輯]

給定m+1 個節點ti ,分佈在[0,1]區間,滿足

一個nB樣條是一個參數曲線

它由nB樣條基(basis B-spline)組成

.

Pi稱為控制點de Boor點. m+1個n次B樣條基可以用Cox-de Boor遞歸公式 定義

當節點等距,稱B樣條為均勻(uniform)否則為非均勻(non-uniform)。

均勻B樣條曲線

[編輯]

當B樣條是均勻的時候,對於給定的n,每個B樣條基是其他基的平移拷貝而已。一個可以作為替代的非遞歸定義是

滿足

滿足

其中

截斷冪函數(truncated power function)

註解

[編輯]

當節點數和多項式次數相等時,B樣條退化為貝茲曲線。即函數的形狀由節點的位置決定。縮放或者平移節點向量不會改變基函數。

樣條包含在它的控制點的凸包

n次B樣條的一個基

僅當在區間[ti, ti+n+1]上非0。就是

換句話說,如果我們操作一個控制點,我們只改變曲線在局部的行為,而不像Bezier曲線那樣是全局行為。

例子

[編輯]

常數B樣條

[編輯]

常數B樣條是最簡單的樣條。只定義在一個節點距離上,而且不是節點的函數。它只是不同節點段(knot span)的指示函數

線性B樣條

[編輯]

線性B樣條定義在兩個相鄰的節點段上,在節點連續但不可微。

三次B樣條

[編輯]

一個片斷上的B樣條的表達式可以寫作:

其中Si是第i個B樣條片斷而P是一個控制點集,ik是局部控制點索引。控制點的集合會是的集合,其中是比重,當它增加時曲線會被拉向控制點,在減小時則把曲線遠離該點。


片段的整個集合m-2條曲線()由m+1個控制點()定義,作為t上的一個B樣條可以定義為

其中i是控制點數,t是取節點值的全局參數。這個表達式把B樣條表示為B樣條基函數的線性組合,這也是這個名稱的原因。

有兩類B樣條-均勻和非均勻。非均勻B樣條相鄰控制點間的距離不一定要相等。一個一般的形式是區間隨着插入控制點逐步變小到0。


B樣條的程式指令

[編輯]

Matlab

[編輯]

In Matlab,the command「spline」 can be used for spline interpolation.

(Note: In the command, the cubic B-spline is used)


Cubic B-Spline Interpolation by Matlab

Generating a sine-like spline curve and samples it over a finer mesh:

x = 0:1:10; % original sampling points

y = sin(x);

xx = 0:0.1:10; % new sampling points

yy = spline(x,y,xx);

plot(x,y,'o',xx,yy)

Python

[編輯]

事前安裝模組

  • pip install numpy
  • pip install scipy
  • pip install matplotlib


Cubic B-Spline Interpolation by Python

from scipy.interpolate import interp1d

import matplotlib.pyplot as plt

import numpy as np

x = np.arange(0, 11) # original sample points, [0, 1, 2, …, 9, 10]

y = np.sin(x)

f = interp1d(x, y, kind=' cubic ') ) # Cubic means the cubic B-spline.

x_new = np.arange(0, 10.1, 0.1) # new sample points, [0, 0.1, 0.2, ….., 9.9, 10]

y_new = f(x_new)

plt.plot(x,y,'o',x_new, y_new)

plt.show()


B樣條曲面

[編輯]

B樣條曲線及曲面相關算法

[編輯]

關於此處涉及的算法,在著作[1]中有針對Bézier、B樣條(B-spline)以及非均勻有理B樣條(Nurbs)的相關算法的詳細數學表達和程序實現方法。

求導

[編輯]

在幾何處理中,對參數曲線及曲面的求導是最基本的運算之一,由於參數表達的特性,在給定點的切線及法線可通過求導直接得到。 先來考察曲線的情形:採用本頁定義中的B樣條曲線表達式 對參數進行求導:

節點插入與刪除

[編輯]

曲線及曲面擬合

[編輯]

應用

[編輯]

參看

[編輯]

參考

[編輯]

本條目部分或全部內容出自以GFDL授權發佈的《自由線上電腦詞典》(FOLDOC)。

  1. ^ Les Piegl and Wayne Tiller: The NURBS Book, Springer-Verlag 1995-1997 (2nd ed).

參考文獻

[編輯]
  • Jian-Jiun Ding, 「Time Frequency Analysis and Wavelet Transforms 」, NTU, 2021.


外部連結

[編輯]