天天看點

B樣條曲線貝塞爾函數不足B樣條曲線

學習B樣條曲線需要先學習貝塞爾曲線,若未了解,看我一篇上部落格https://blog.csdn.net/weixin_42513339/article/details/83019610

貝塞爾函數不足

由于貝塞爾曲線存在以下不足:

        1 )缺乏局部修改性,即改變某一控制點對整個曲線都有影響。

        2 )n 較大時,特征多邊形的邊數較多,對曲線的控制減弱。

        3 )幂次過高難于修改。(而在外形設計中,局部修改是随時要進行的)。

是以提出了B樣條曲線,B樣條曲線有以下優點:

  1 )逼近特征多邊形的精度更高。

  2 )多邊形的邊數與基函數的次數無關。

  3 )具有局部修改性。

首先,貝塞爾公式為:

B樣條曲線貝塞爾函數不足B樣條曲線
B樣條曲線貝塞爾函數不足B樣條曲線

其中,  為伯恩斯坦基函數(BEZ)

B樣條曲線貝塞爾函數不足B樣條曲線

是以公式可以寫成

B樣條曲線貝塞爾函數不足B樣條曲線

B樣條曲線

B樣條曲線,用B樣條基函數代替伯恩斯坦基函數如下所示:

B樣條曲線貝塞爾函數不足B樣條曲線
B樣條曲線貝塞爾函數不足B樣條曲線
B樣條曲線貝塞爾函數不足B樣條曲線

這裡的你隻是一個比例系數,但是這裡把你從0到1分成很多段。如果節點等間距(即  ui +1 -  ui  是一個常數,對0 <=  i  <=  m  - 1),節點向量或節點序列稱為均勻的;否則它是非均勻的。

節點可認為是分隔點,将區間[ u0,um]細分為節點區間。所有B樣條基函數被假設定義域在[ u0,um ]上。uo  = 0和um  = 1,是以定義域是閉區間[0,1]。

相關定義

在圖形學書裡,也寫明了若此時線段的頂點個數為m + n + 1(m為最大段号,n為階次)

B樣條曲線主要也是為了平滑曲線,而且這裡的階次,換個說法就是目前這個點能夠影響它附近多少個點。

多重節點與簡單節點

如果一個節點ui出現k次(即,ui = ui + 1 = ... = ui + k-1),其中k> 1,ui是一個重複度(multiplicity)為k 的多重節點,寫ui(k否則),如果使用者界面隻出現一次,它是一個簡單節點。

B樣條基函數

區間我的ķ次B樣條基函數,寫為鎳,K(U),遞歸定義如下:

B樣條曲線貝塞爾函數不足B樣條曲線

K = 0時的Ni,k(u)

    如果次數為零(即k = 0),這時基函數都是階梯函數,如果你是在第i個節點區間[ui,ui + 1)上,那麼基函數的Ni,0(U)= 1。

例:

    有四個節點U = {0,1,2,3},節點區間0,1,2分别對應[0,1),[1,2),[2,3]。(這裡你的範圍也隻是一個比例關系)

B樣條曲線貝塞爾函數不足B樣條曲線
B樣條曲線貝塞爾函數不足B樣條曲線
B樣條曲線貝塞爾函數不足B樣條曲線

畫出圖如下所示:

B樣條曲線貝塞爾函數不足B樣條曲線

若K = 1時的的Ni,K(U)

B樣條曲線貝塞爾函數不足B樣條曲線
B樣條曲線貝塞爾函數不足B樣條曲線
B樣條曲線貝塞爾函數不足B樣條曲線
B樣條曲線貝塞爾函數不足B樣條曲線

下圖中,黑色和紅色線分别是N0,1(u)和N1,1(u)。

B樣條曲線貝塞爾函數不足B樣條曲線

PS:

 為了了解 階數k 大于0時,計算Ni,k(u)的方法,我們使用三角計算格式。所有節點區間列在左邊(第一)列,所有零次基函數在第二列。見下圖。

B樣條曲線貝塞爾函數不足B樣條曲線

從這一張圖裡,我們可以很清楚的看到,如果想計算某個基函數,那麼就必須要知道哪些零次基函數,然後需要哪兩個計算,都可以從圖裡看出來。

比如:

我們繼續計算K = 2時的鎳,K(U),如下:

B樣條曲線貝塞爾函數不足B樣條曲線
B樣條曲線貝塞爾函數不足B樣條曲線

其中,當你在[0,1)上時,這種情況,隻有N0,1(u)對N0,2(u)的值有貢獻。是以,N0,1(u)是你,得到

B樣條曲線貝塞爾函數不足B樣條曲線

你在[1,2]上: 

這種情況,N0,1(u)和N1,1(u)都對N0,2(u)有貢獻。在[1,2]上N0,1(u)= 2 - u和N1,1( u)= u - 1,得到: 

B樣條曲線貝塞爾函數不足B樣條曲線

你在[2,3]上: 

這種情況,隻有N1,1(u)對N0,2(u)有貢獻。在[2,3]上N1,1(u)= 3 - u,得到:

B樣條曲線貝塞爾函數不足B樣條曲線

可以最後得到N0,2(u)函數圖形 

B樣條曲線貝塞爾函數不足B樣條曲線

基函數的非零定義域的确定

實際上也是主要通過圖來看如下圖,我們可以得知:如果我們要計算N1,3(U),那麼它的有效定義域是u1到u5通過下圖可以直接看出。

B樣條曲線貝塞爾函數不足B樣條曲線

說的更加理論一點就是:

基函數Ni,p(u)在[ui,ui + k + 1)上非零。或,相等地,Ni,k(u)在k + 1個節點區間[ui,ui + 1],[ui + 1,ui + 2),...,[ui + k,ui + k + 1)上非零。

在這裡,我們可以觀察出重要的一點,為什麼B樣條曲線的頂點數是m + n + 1,因為跟它的定義域是有關的。

非零定義域對應的基函數

與上面正好相反,我們可以通過基函數的階數,來确定他的定義域。

同樣,一個定義域,我們也可以看出(如下圖):

任何一個節點區間[ui,ui + 1],最多有k + 1個k次基函數非零,即:Ni-k,k(u),Ni-k + 1,k(u),Ni-k + 2,k(u),...,Ni-1,k(u)和Ni,k(u)。

B樣條曲線貝塞爾函數不足B樣條曲線

系數的意義

B樣條曲線貝塞爾函數不足B樣條曲線

第一項,Ni,k-1(u),在[ui,ui + k)上非零。如果u是在該區間,那麼你 - ui是u到該區間左端的距離,區間長度為ui + k - ui,(u - ui)/(ui + k - ui)是你在上述區間的歸一化位置。

第二項,Ni + 1,k-1(u),在[ui + 1,ui + k + 1)上非零。如果u在該區間,那麼ui + k + 1 - u是u到該區間右端的距離,ui + k + 1 - ui + 1是區間長度,(ui + k + 1 - u)/(ui + k + 1 - ui + 1)是u在上述區間的歸一化位置。

B樣條曲線貝塞爾函數不足B樣條曲線

繼續閱讀