貝茲曲線和nurbs曲線有什麼關係嗎?

在學習平面和3D軟體的時候會遇到這兩個名詞。
今天突然想,這兩種曲線有什麼關係嗎?
求大師指教。

------

多謝答主們!
可能我的問題沒有說清楚。兩者的區別我知道的。只是我很好奇為什麼會用到兩種曲線的描畫方式?因為看起來好像貝茲曲線在3D裡面也是可以使用的。即使有一些不適合三維空間的地方,稍作修改就可以了。

為什麼會產生兩種曲線描畫方式?看似很多餘啊?一種不就可以了嗎?在兩者產生、演化的歷史上,這兩者有什麼關係嗎?


NURBS是有理B-splines曲線,它的基函數是有理函數。而Bezier曲線和B-splines曲線更接近一些,基函數都為多項式函數。從Bezier 到 B-splines 到 NURBS的演化過程是一種擴展,應用這些曲線能夠準確描述的幾何範圍依次變大。

Bezier曲線可以看成B-splines曲線的特殊形式。當B-splines曲線的參數空間只有一個區間,並且對應的knot vector是open時則和Bezier曲線的定義相同。例如二階Bezier曲線:

此時的Knot Vector為{0,0,0,1,1,1},參數空間為[0,1]

當B-spline曲線的knot vector不只有一個區間時,其基函數就可能在多個區間都不為零。例如
knot vector = {0,0,0,0.5,1,1,1},參數空間共有兩個區間分別為[0,0.5)和[0.5,1]

上圖中的第2個和第3個基函數在兩個區間都不為零,而第1個和第4個基函數分別指在前一區間和後一區間有非零值。

直接結果就是如果移動第1個和第4個基函數對應的控制點,P0和P4,只會對曲線的部分產生影響。 例如如果移動P0的位置,那麼只有參數區間[0,0.5)在物理空間中的象會改變。

如果移動第2個和第3個基函數對應的控制節點,那麼整個曲線都會改變。

當對B-splines曲線使用knot inversion演算法在其參數空間插入已經存在的節點,是所有中間節點的重複次數都等於曲線的階數時,B-splines曲線可看作首尾相連的多個分段的Bezier曲線。

剛才二階B-splines曲線的knot vector由 {0,0,0,0.5,1,1,1}變為 {0,0,0,0.5,0.5,1,1,1}。中間節點0.5重複兩次後得到

注意觀察圖中右邊的基函數圖像,並和第一張圖中的基函數對比。

(截圖來源於一個網頁上的NURBS小工具: http://geometrie.foretnik.net/files/NURBS-en.swf)

---------

而NURBS曲線可看作為B-splines曲線的擴展形式。利用NURBS可以完美地表示圓錐曲線。幾何上,可以將NURBS曲線理解為B-spllines曲線在某一平面的投影。例如

上圖中黑色的三維曲線是B-splines曲線,而紅色的圓為NURBS曲線。藍色和綠色的虛線分別是它們的控制網格。 紅色的圓可看作是黑色的三維曲線投影到z=1的平面形成的。

具體的數學方法是給每個控制節點加上一個權重值,然後基函數由原來的多項式變為有理函數

上式中N代表B-splines的基函數而R代表NURBS的基函數,w則是各個控制點的權重。

--------

題主提到了樣條曲線的歷史和演變,個人印象中(有待確認)的過程大概是:

Mechanical splines -&> Bezier curve -&> B-splines -&> NURBS -&> T-splines

從Bezier開始都算是Digital 或者 Numerical spline了。此外NURBS之後應該還有個hierarchical B-splines,和T-splines一樣可以是實現局部精細化,可以準確地描述如螺旋槳這樣複雜的曲面。不過我還沒在常見的CAD軟體中見到過,貌似Rhino什麼的只支持NURBS。

更正:
Autodesk有提供收費的T-spline插件給Rhino。

---------

最近正好看到一篇blog關於樣條的歷史,這裡貼出來:
On the Spline: A Brief History of the Computational Curve (Full)

文中有一張圖用以展示演變過程:


樓上軒轅的回答是錯誤的,當然,要弄清這兩者的區別,首先還要引入階數和控制點的概念,在所有的非封閉曲線中,如果控制點數=階數+1,那麼這就是貝塞爾線,如果控制點數—階數—1&>0那麼就說明這個是nurbs線,控制點數—階數—1=節點數,簡單說貝塞爾線沒有節點,而nurbs一般指的是有節點的曲線。以後再補充


簡單講,貝塞爾曲線是用四個點控制一段曲線,由多組點控制一系列曲線。nurbs是用一系列點控制一系列曲線。


推薦閱讀:

P 圖時真的能做到「毫無 ps 痕迹」嗎?
繪畫後期顏色如何調整?
Sai或PS如何勾出如圖一般漂亮又乾淨的線條?
如何在PS里製作有質感毛玻璃 ?求詳細的方法

TAG:工業設計 | AdobePhotoshop | CG | Rhino | 曲率連續 |