B-spline Curves 學習之B樣條基函式的定義與性質(2)
轉自:http://www.cnblogs.com/icmzn/p/5100761.html
B-spline Basis Functions:Definition
貝塞爾基函式用作權重。B-樣條基函式也一樣;但更復雜。但是它有兩條貝塞爾基函式所沒有的特性,即(1)定義域被節點細分(subdivided); (2) 基函式不是在整個區間非零。實際上,每個B樣條基函式在附近一個子區間非零,因此,B-樣條基函式相當“區域性”。
設U 是m + 1個非遞減數的集合,u0
<= u2 <= u3 <= ... <= um。ui稱為節點(knots), 集合U 稱為節點向量(knot vector
節點可認為是分隔點,將區間[u0,
um]細分為節點區間。所有B-樣條基函式被假設定義域在[u
為了定義B-樣條基函式,我們還需要一個引數,基函式的次數(degree)p,第i個p次B-樣條基函式,寫為Ni,p(u),遞迴定義如下:
上述公式通常稱為Cox-de Boor遞迴公式。 這個定義看起來很複雜;但是不難理解。如果次數(degree)為零(即,
p = 0),這些基函式都是階梯函式,這也是第一個表示式所表明的。即,如果u是在第i個節點區間[ui,
ui+1)上基函式Ni,0(u)是1。 例如,如果我們有四個節點u0 = 0,
u1 = 1, u2 = 2和 u3 = 3, 節點區間 0, 1 和2是[0,1), [1,2), [2,3),0次基函式是N
為了理解p大於0時計算Ni,p(u)的方法,我們使用三角計算格式。所有節點區間列在左邊(第一)列,所有零次基函式在第二列。見下圖。
為了計算Ni,1(u),需要Ni,0(u)和Ni+1,0(u)。因此,我們可以計算N0,1(u), N1,1(u), N2,1(u), N3,1(u) 等等。所有這些Ni,1(u)寫在第三列。一旦所有Ni,1(u)計算完畢,我們可以計算Ni,2(u)並將其放在第四列。繼續這個過程直到所有需要的Ni,p(u)的計算完畢。
上面我們獲得了針對節點向量 U = { 0, 1, 2, 3 }的N0,0(u), N1,0(u)和N2,0(u) 。現在計算N0,1(u)和N1,1(u)。要計算N0,1(u),因為i = 0和p = 1,從定義出發有
因為u0 = 0, u1 = 1和u2 = 2,上式變為
因為N0,0(u)在[0,1)上非零且N1,0(u)在[1,2)上非零,如果u在[0,1)上 (resp., [1,2) ), 只有N0,0(u) (resp., N1,0(u) )對N0,1(u)有貢獻。因此,如果u 在[0,1)上, N0,1(u) 是uN0,0(u) = u而如果u 在[1,2)上, N0,1(u)是 (2 - u)N1,0(u) = (2 - u)。相似的計算得到N1,1(u) = u - 1如果u 在[1,2)上, 而N1,1(u) = 3 - u 如果 u 在[2,3)上。下圖中,黑色和紅色線分別是N0,1(u)和 N1,1(u)。注意N0,1(u) (resp., N1,1(u))在[0,1) 和[1,2) 上(resp., [1,2) 和 [2,3))是非零的。
一旦獲得N0,1(u)和N1,1(u),可以計算N0,2(u)。由定義得到下式:
代入節點值得到
注意 N0,1(u) 在 [0,1)和[1,2)上非零而N1,1(u) 在[1,2) 和 [2,3)上非零。因此,我們有三種情況要考慮:
(1) u 在 [0,1)上:
這種情況,只有N0,1(u)對N0,2(u)的值有貢獻。因此,N0,1(u)是u, 得到
(2)u 在[1,2)上:
這種情況, N0,1(u)和N1,1(u)都對
N0,2(u)有貢獻。因此N0,1(u) = 2 -
u 且N1,1(u) = u - 1 在[1,2)上,得到
【譯註:上式中間的式子的第二項應為:0.5(3-u)(u-1)】
(3)u 在 [2,3)上:
這種情況,只有N1,1(u)對 N0,2(u)有貢獻。因此N1,1(u) = 3 -
u 在[2,3)上,得到,
如果我們畫出上述三種情況的曲線段,我們會看到兩個相鄰曲線段連線起來形成了在節點上的曲線。更確切地,第一種和第二種情況的曲線段在u = 1處連線起來,而第二種和第三種情況的曲線段在u = 2處連線起來。注意合成曲線是光滑的,但是如果節點向量包含多重節點通常就不是這樣的。
2. 兩個重要的觀察
因為 Ni,1(u) 是從 Ni,0(u) 和 Ni+1,0(u)計算的而 因為Ni,0(u)和Ni+1,0(u) 在區間[ui, ui+1)和[ui+1, ui+2)分別是非零的,Ni,1(u) 在這兩個區間都是非零的。換句話說,Ni,1(u)在[ui, ui+2)上是非零的。相似地,因為 Ni,2(u) 依賴於Ni,1(u) 和Ni+1,1(u)且因為這兩個基函式在[ui, ui+2)和[ui+1, ui+3)分別是非零的,Ni,2(u)在[ui, ui+3)上非零。總之,為確定基函式Ni,p(u), 的非零定義域,可以追溯到三角計算格式直到回到第一列。例如,假設我們想找到 N1,3(u)的非零定義域。基於上述討論,我們可從西北和西南方向追溯直到第一列為止,如下圖中藍色虛線所示。因此 N1,3(u)在 [u1, u2), [u2, u3), [u3, u4) 和[u4, u5)上是非零的。或,相等地,它在[u1, u5)上非零。
總之,我們有下列觀察:
基函式 Ni,p(u) 在[ui, ui+p+1)上非零。或,相等地,Ni,p(u) 在 p+1個節點區間[ui, ui+1), [ui+1, ui+2), ..., [ui+p, ui+p+1)上非零。
接著,我們看相反的方向。給定一個節點區間[ui, ui+1),我們想知道哪個基函式會在計算中使用這個區間。我們可以以這個節點區間開始並畫一個西北界限箭頭和一個西南界限的箭頭。所有封閉在楔形裡的基函式使用 Ni,0(u)(為什麼?)因此在該區間是非零的。因此,所有在[ui, ui+1)上非零的p 次基函式是這個楔形和包含所有Ni,p(u) 的列的交集。實際上,這一列和兩個箭頭形成一個等邊三角形,而這一列是垂直邊。 從 Ni,0(u) 數到 Ni,p(u) 有p+1列。因此,等邊三角形的垂直邊至多有p+1 項,即 Ni,p(u), Ni-1,p(u), Ni-2,p(u), ..., Ni-p+2,p(u), Ni-p+1,p(u) 和Ni-p,p(u)。
讓我們看上圖。為了找到所有3次在 [u4, u5) 上非零的基函式,畫出兩個箭頭和所有在垂直邊的函式是我們想要的。這個例子,是N1,3(u), N2,3(u), N3,3(u), 和N4,3(u).用黃色三角表示。藍色 (resp., 紅色) 三角顯示的是在[u3, u4) (resp., [u2, u3) )上非零的3次基函式。注意在[u2, u3)上只有3個3次基多項式。.
總之,我們觀察到下列特性:
在任何一個節點區間 [ui, ui+1), 最多有 p+1個p 次基函式非零,即:Ni-p,p(u), Ni-p+1,p(u), Ni-p+2,p(u), ..., Ni-1,p(u) 和 Ni,p(u)。
3. 係數的意義是什麼?
最後,讓我們研究下Ni,p(u)定義中係數的意義。當計算 Ni,p(u) 時,它使用Ni,p-1(u)和Ni+1,p-1(u)。前者在 [ui, ui+p)上非零。如果u 是在這個半開區間,那麼u - ui 是u 和這個區間左端之間的距離,區間長度是ui+p - ui, ,而(u - ui) / (ui+p - ui) 是上述距離的比且在0和1之間。見下圖。第二項,Ni,p-1(u),在[ui+1, ui+p+1)上非零。如果u 在該區間,那麼ui+p+1 - u 是 u 到該區間右端的距離,ui+p+1 - ui+1 是區間長度,而(ui+p+1 - u) / (ui+p+1 - ui+1) 是這兩個距離的比且值在0和1之間。因此, Ni,p(u) 是Ni,p-1(u) 和Ni+1,p-1(u)的線性組合,有兩個係數,都在 u上是線性的,在0和1之間。
B-spline Basis Functions:Important Properites
1. 這些基函式有如下性質,許多與貝塞爾基函式的相似
(1)Ni,p(u) 是一個在u 上的p 次多項式
(2)非負性
對所有的 i, p 和 u, Ni,p(u) 是非負的
(3)區域性支撐(Local Support)
Ni,p(u) 是在[ui,ui+p+1)上的非零多項式
(4)在任一區間 [ui, ui+1),最多有 p+1 個 p 次的基函式非零
即: Ni-p,p(u), Ni-p+1,p(u), Ni-p+2,p(u), ..., 和 Ni,p(u)
(5)單位分解(Partition of Unity)
所有非零的 p 次基函式在區間[ui, ui+1)上的和(sum)是 1, 上一條性質表明Ni-p,p(u), Ni-p+1,p(u), Ni-p+2,p(u), ..., 和 Ni,p(u) 在[ui, ui+1)上非零這條性質說明這些 p+1 個基函式的累加和1.
(6)如果節點數是 m+1, 基函式的次數是 p, 而p 次基函式的數目是n+1,,那麼m = n + p + 1
這不難理解。 設 Nn,p(u) 是最後一個p 次基函式。它在 [un, un+p+1)上非零因為它是最後一個基函式, un+p+1 肯定是最後一個節點um。因此,我們有 un+p+1 = um 及 n + p + 1 = m. 總之,給定 m 和 p, 設 n = m - p - 1 則 p 次基函式是N0,p(u), N1,p(u), N2,p(u), ..., 和 Nn,p(u).