1. 程式人生 > >課堂筆記_ B樣條曲線和NUBRS

課堂筆記_ B樣條曲線和NUBRS

為什麼學習B樣條

Bezier曲線/曲面不支援區域性的修改和編輯
Bezier曲線/曲面拼接時,滿足幾何連續條件是十分困難的

B樣條的歷史

1946年,Schoenberg提出了一種基於樣條的方法來近似曲線;

B樣條的動機源於插值中的Runge-Kutta現象:高階多項式很容易產生不穩定的上下抖動。

為什麼不用分段低階多項式通過連續的連線來代替高階多項式呢?這就是樣條(分段低階多項式)的思想。

1972年,基於Schoenberg的工作,Gordon和Riesenfeld提出了B樣條以及一系列對應的幾何演算法。

如何求解B樣條

樣條函式的插值,可以通過求解一個三對角方程來進行。
對於一個給定的區間劃分,可以類似的計算樣條曲線的插值。
給定區間上的所有樣條函式組成一個線性空間。這個線性空間的基函式就叫做B樣條基函式。

B樣條基函式

P(t)=i=04PiNi,4
1.B樣條基函式Ni,k(t)的非零區間是什麼? (ti,ti+k)
-小部分非0,大部分為0,保證了B樣條的區域性性。

2.一共需要多少個節點?
P0對應N0,4,N0,4對應的非零區間為(t0,t4
P1對應N1,4,N1,4對應的非零區間為(t1,t5
P2對應N2,4,N2,4對應的非零區間為(t2,t6
P3對應N3,4,N3,4對應的非零區間為(t3,t7
P4對應N0,4,N4,4對應的非零區間為(t4,t8

-共(N+K+1)個

3.B樣條插值出的曲線的定義區間是什麼?
基函式定義區間


上圖中t3-t5有定義,其他區間無意義。總共五個基函式。k階指的是一段內必須有k個基函式,這樣才有意義,否則基底少了一個就不完備了。每個基函式跨越了k個區間

性質1
性質2

B樣條分類

一般的曲線可以根據起始點和終止點是否重疊來進行分類:
- 不重合:開曲線
- 重合:閉曲線
根據節點向量中節點的分佈,B樣條可以分為如下四類:

(1)均勻B樣條
節點成等差數列均勻分佈排布,例如:0,1,2,3,4,5,5,7
均勻B樣條
0,1,2,3定義一段,1,2,3,4定義另一段。兩端之間有三個點之間重合,就可以兩次連續。

最大特定:給定控制網格,就可以畫出(估計出)曲線。

如1,3兩點的中點與2相連,相連線段的三分之一處為均勻B樣條的起始點;2,4兩點的中點與3相連,相連線段的三分之一處為均勻B樣條過的點;這樣依次連線,就可以大概畫出均勻B樣條。

(2)準均勻B樣條:將起點和終點的都有k的重複度, 曲線就會經過端點。(對比均勻B樣條,起點應在1,3兩點的中點與2連線,取連線的三分之一處。)
準均勻B樣條

(3)分段Bezier曲線:起始節點和終止節點都具有k的重複度,所有其他節點都具有k-1的重複度。
分段Bezier曲線
以上所有的分段都為Bezier曲線,對於分段Bezier曲線,不同的曲線段相互獨立,移動控制點只會影響其所在的Bezier曲線段,而其他的Bezier曲線段都不會改變,甚至所有關於Bezier曲線的演算法可以同樣地適用於分段Bezier曲線。

但是分段Bezier曲線需要使用更多的引數和變數來進行控制:更多的控制點和更多的節點。

(4) 非均勻B樣條
節點向量T=[t0,t1,,tn+k]中的節點呈非減序列排布,並且滿足:
起始節點和終止節點的重複度均小於等於k;
其他節點的重複度小於等於k-1。

性質1:區域性支援性
區間t[ti,ti+1]上的曲線僅至多k個控制點Pj(j=ik+1,i)決定,因為在t[ti,ti+1]區間上最多有k個控制點有定義。

修改控制點Pi僅會影響到區間(ti,ti+k)的曲線。

性質2:連續性
P(t)在每一個重複度為r的節點上具有Ck1r的連續性。
解釋:假如k階曲線,且節點向量不重複,由於k階曲線是k-1階連續。樣條的概念是要比多項式低一次的幾何連續性,所以k階曲線在節點向量不重複的情況下,是k-1-1次連續。例如4階曲線是(4-1-1=2)的連續。

性質3:凸包性
一個B樣條曲線被包圍在其控制頂點的凸包內部。

性質4:變差縮減性(Variation Diminishing Property)
任何一條直線與B樣條曲線的交點樹木不會超過該直線與B樣曲線的控制多邊形的交點數目。

性質5:仿射不變形
對曲線的變化可以通過對頂點的控制來選擇。

性質6:直線保持性
如果控制多邊形退化成為一條直線,那麼B樣條曲線依然在這條直線上。

性質7:靈活性
使用B樣條曲線可以方便地構建如線段,尖點,切線等特殊效果。

以4階B樣條為例,如果需要包含一條線段,只需要指定控制頂點Pi,Pi+1,Pi+2,

相關推薦

課堂筆記_ B曲線NUBRS

為什麼學習B樣條 Bezier曲線/曲面不支援區域性的修改和編輯; Bezier曲線/曲面拼接時,滿足幾何連續條件是十分困難的。 B樣條的歷史 1946年,Schoenberg提出了一種基於樣條的方法來近似曲線; B樣條的動機源於插值中的Ru

計算機圖形學--------充分理解B曲線

樣條(spline)二字,從英文翻譯過來的,讓人費解。B樣條的數學定義更是讓人匪夷所思。看了好幾本參考教材,還是把總結一下B樣條這個概念。 一、解釋什麼是樣條。 實際應用中,樣條是一根富有彈性的細木條或塑料條。在應用CAD/CAM技術以前,航空、船舶和汽車製造業普遍採用手

B-曲線:定義

其中 Ni,p(u)是 p次B-樣條基函式。  B-樣條曲線形式與貝塞爾曲線相似 。不像貝塞爾曲線, B-樣條曲線包含更多資訊,即:一系列的 n+1 個控制點, m+1個節點的節點向量,次數 p。 注意n, m 和 p必須滿足m = n + p + 1。更準確地,如果我們想要定義一個有 n + 1控制點的p次

B-spline Curves 學習之B曲線定義(4)

轉自:http://www.cnblogs.com/icmzn/p/5100789.html   給定 n + 1個控制點P0, P1, ..., Pn 和一個節點向量U = { u0, u1, ..., um },  p 次B-樣條曲線由這些控制點和節點向量U 定義  

B曲線B-spline Curves)

關鍵字:NURBS,基函式,控制點,節點, 看了網上很多相關資料才得以下筆,資料太多,這裡就不一一列舉了,感謝各位大佬的資料 本部落格順序不太好,看前面的東西可能需要提前看後面的東西。正在努力修煉,敬請諒解 寫了個B樣條曲線計算的完成程式,包括繪圖,https://

B-spline Curves 學習之B曲線的移動控制點、修改節點分析(7)

轉自:http://www.cnblogs.com/icmzn/p/5101424.html   B-樣條曲線:移動控制點   移動控制點是改變B-樣條曲線形狀的最明顯的方法。在前面頁討論的區域性修改方案說明了修改控制點 Pi 的位置僅影響在區間[ui, ui+p+1)

OpenGL 繪制B曲線

ember direction onexit cti target get 說明 spa glbegin http://blog.csdn.net/yangtrees/article/details/9026411 繪制B樣條曲線: #include <stdli

從零開始的openGL——四、紋理貼圖與n次B曲線

前言 在上篇文章中,介紹瞭如何載入繪製模型以及滑鼠互動的實現,並且遺留了個問題,就是沒有模型表面沒有紋理,看起來很醜。這篇文章將介紹如何貼紋理,以及曲線的繪製。 紋理貼圖 紋理載入 既然是貼圖,那首先我們得要有合適的紋理圖片,openGL中支援的圖片為bmp格式。在這裡我還用到了個額外的庫glaux,但當時在

[摘抄] Bezier曲線BNURBS

  Bezier曲線、B樣條和NURBS,NURBS是Non-Uniform Rational B-Splines的縮寫,都是根據控制點來生成曲線的,那麼他們有什麼區別了?簡單來說,就是: Bezier曲線中的每個控制點都會影響整個曲線的形狀,而B樣條中的控制點只會影響整個曲線的一部分,顯然B樣條提供了

問題六十一:三次b(b-spline)曲線的控制點曲線形狀的對應——以迴旋體的“基本曲線”為例

在這一章節,我們以其中一段曲線段為例,改變其對應的控制點,看看曲線段形狀的改變,同時也看看對應的迴旋體圖形的改變。 控制點座標如下圖: “問題六十”中的“基本曲線”的控制點對應如上ABCDEF六個點(其中A點在1位置)。對應輸出的迴旋體圖形如下(再次貼出來): 說

B基函式——B-Spline Basis Functions

B-Spline Basis Functions     摘要Abstract:直接根據B樣條的Cox-deBoor遞推定義寫出計算B樣條基函式的程式,並將計算結果在OpenSceneGraph中顯示。    關鍵字Key Words:B Spline Basis Functions、OpenScene

Bobo老師機器學習筆記第九課-PR曲線ROC曲線

在上篇文章中,我們已經概述了PR曲線。現在做個簡單的迴歸 1、什麼是PR曲線?  PR曲線是精準率(Precision)和召回率(Recall)的縮寫, 精準率表示在預測的關注事件中,其中預測正確的有多少。  Precision = TP / (TP + FP)

採用Cardinal法構造插枝分段三次曲線 : 實戰篇

本文由timewolf完成,首發於CSDN,作者保留版權。未經許可,不得使用於任何商業用途。如需聯絡請發郵件:karla9(AT)eyou(dot)com 下面會給出一個簡單的例子: 在視窗上用滑鼠點8個點,然後就會將這8個點的座標畫出來~~~, 我共總用了3

採用Cardinal法構造插枝分段三次曲線 : 程式碼篇

說明:Spline類就是Cardinal樣條曲線了,這個類裡面記錄了4個控制點:m_startControlPoint, m_startPoint, m_endPoint, m_endControlPoint, 分別按順序對應Pk-1, Pk, Pk+1, Pk+2, 由於C

(27)三次插值曲線

三次插值樣條曲線在靈活性和計算速度之間進行了合理的折中。與更高次樣條相比,三次插值樣條只需較少的計算和儲存,且較穩定。與二次插值樣條相比,三次插值樣條在模擬任意形狀時顯得更靈活。 三次插值樣條曲線由

Matlab之三次畫圖表示式

    這一題是得到資料點(0,3),(1,5),(2,4),(3,1)並得到它的三次樣條表示式和畫出三次樣條後的圖圖形。     以及對資料點(-1,3),(0,5),(3,1),(4,1),(5,1)並得到它的三次樣條表示式和畫出三次樣條後的圖圖形。     用函

《MySQL必知必會》學習筆記——附錄B 例表

notes 解決 你在 出現問題 出現 可用 為我 date country 附錄B 樣例表 本附錄簡要描述本書中所用的表及它們的用途。 編寫SQL語句需要對基礎數據庫的設計有良好的理解。不知道什麽信息存儲在什麽表中,表之間如何關聯以及行內數據如何分解,是不可能編寫出高效的

分段三次Hermite曲線的應用(Unity 動畫曲線AnimationCurve的實現方法的還原)

分段三次Hermite插值是一種光滑的分段插值。 分段三次Hermite插值函式要滿足的條件: 1. 已知節點(x_i,y_i) 及微商值 k_i (i = 0 , 1, 2, ....... n); 2. 在每個小區間[x_i , x_i_1] 上是不高於三次的多項式

課堂筆記_ 光線跟蹤原理

Turner Whitted於1980年首次提出一個包含光反射和折射效果的模型:Whitted模型,並第一次給出光線跟蹤演算法的示例,是計算機圖形學歷史上的里程碑。發表於Communications of the ACM 1980。 定義: 特徵

使用MFC進行程式設計,繪製直線橢圓以及曲線

新建基於MFC的空檔案,新增.cpp檔案,新增.h檔案.相應的檔案內容為; hello.h檔案 #ifndef __HELLO_H #define __HELLO_H //#include &l