【轉】Bezier曲線、B-Spline和NURBS的區別與《THE NURBS BOOK 2nd》簡介
原地址:https://libaineu2004.blog.csdn.net/article/details/103287767
一、基本概念
B-Spline:B樣條曲線
NURBS(Non Uniform Rational B-Spline):非均勻有理B樣條曲線
B樣條曲線有三種類型:
這裡寫圖片描述
當起始點和終止點的重複度為最高次數加1是,開B樣條變為Clamped B樣條,當起始點和終止點重合且重複度為p+1時為閉B樣條曲線。如上圖的clamped有 n+1個控制點(n=9)以及 p = 3. 。那麼,, m 必須是13 所以節點向量有14個節點。為了有clamped效果,前p+1 = 4 和最後4個節點必須一樣。其餘14 - (4 + 4) = 6 個節點可在定義域任何位置。實際上,曲線是用節點向量 U = { 0, 0, 0, 0, 0.14, 0.28, 0.42, 0.57, 0.71, 0.85, 1, 1, 1, 1 }產生的。
二、詳情
在CAD中,設計師需要設計出各種各樣的曲線;數學中,曲線是通過各種各樣的方程表示的,比如一條通過點A(0,0)、B(1,1)的直線可以表示為:
y=x
或者用引數方程表示:
P(u) = (1-u)A+tB
再比如一個通過原點(1,2)、半徑為2的圓可以表示為:
(x-1)^2 + (y-2)^2 = 4
或者用引數方程表示:
x = 2cos(u)+1
y = 2sin(u)+2
上面舉例的是兩種很簡單的曲線,對於更復雜的曲線可以用更復雜的方程來表示(比如用高次多項式);
如果我們的設計師是一位數學家就好了,他可以根據自己的需要,設計出一個複雜的方程來表示自己想要的一條優美的曲線,但是事與願違,設計師們往往想通過一種直觀的方式來設計曲線,而不是利用方程。
因此,諸位科學家和工程師設計出了Bezier曲線、B-Spline樣條曲線和NURBS,下面是一個有四個控制點的Bezier曲線:
可以通過改變一個控制點的位置來改變曲線的形狀,比如將上圖曲線中左邊第二個控制點往上移,就可以得到下面的曲線:
可以看到,這種曲線生成方式比較直觀和靈活,我只需要放置控制點,然後調整控制點的位置來得到想要的曲線,這就避免了和複雜的數學方程打交道,豈不快哉?
Bezier曲線、B樣條和NURBS都是根據控制點來生成曲線的,那麼他們有什麼區別了?簡單來說,就是:
§ Bezier曲線中的每個控制點都會影響整個曲線的形狀,而B樣條中的控制點只會影響整個曲線的一部分,顯然B樣條提供了更多的靈活性;
§ Bezier和B樣條都是多項式引數曲線,不能表示一些基本的曲線,比如圓,所以引入了NURBS,即非均勻有理B樣條來解決這個問題;
Bezier曲線只是B樣條的一個特例而已,而B樣條又是NURBS的一個特例,它們的關係可以圖示為:
B樣條克服了Bezier曲線的一些缺點,Bezier曲線的每個控制點對整條曲線都有影響,也就是說,改變一個控制點的位置,整條曲線的形狀都會發生變化,而B樣條中的每個控制點只會影響曲線的一段引數範圍,從而實現了局部修改。
三、推薦閱讀
1 《The NURBS Book 2nd》 英文版
國外講義NURBS的經典書籍,涉及到NURBS曲線和曲面的基本定義和屬性講解,對NURBS曲線和曲面的相關操作及演算法。如果想了解幾何裡面的曲線和曲面的知識,這本書很值得推薦!書籍從淺入深剖析樣條曲線,採用通俗易懂的用詞。能很輕鬆的看懂。裡面有很多虛擬碼,能很方便修改成C/C++程式碼,然後直接套用。
原始碼:NLib source code has it's origins in code developed by Wayne Tiller and Les Piegel, based on their reference work "The Nurbs Book".
http://www.smlib.com/Manual/NLibIntro.html
http://www.smlib.com/Manual/
C.-K. Shene博士的CS3621 Introduction to Computing with Geometry Notes的第6部分B-spline Curves
2 《非均勻有理B樣條(第2版)》是《THE NURBS BOOK 2nd》的中文版翻譯
作者: Les Piegl / Wayne Tiller
出版社: 清華大學出版社
譯者: 趙罡 / 穆國旺 / 王拉柱
3《An Introduction to NURBS.pdf》
配套原始碼:http://www.nar-associates.com/nurbs/c_code.html
4 施法中. 計算機輔助幾何設計與非均勻有理B樣條(修訂版)[M]. 北京: 高等教育出版社, 2013.
5 數值分析
四、參考部落格
曲線數學NURBS之bezier曲線
曲線數學NURBS之B樣條曲線
[圖形學] B樣條曲線 - 原理和C++實現的演示程式(附原始碼)
三次B樣條曲線擬合演算法
三次Beizer曲線擬合演算法
五、NURBS開源庫
http://libnurbs.sourceforge.net/old/ ++ https://sourceforge.net/projects/libnurbs/files/ nurbs++-3.0.11
https://download.csdn.net/download/zhai_ht/4983882 Nurbs3.0.11開源庫vs2010原始碼
https://www.sintef.no/projectweb/geometry-toolkits/sisl/ ++ https://github.com/SINTEF-Geometry/SISL SISL
https://github.com/sintefmath/Splipy
SINTEF SISL庫是當前可用的最成熟且功能完整的開源NURBS庫,儘管它似乎尚未在開源社群中獲得關注。 它是GPL許可。 最新版本使用CMake構建。SISL是一個全面的NURBS庫,用於對曲線和曲面進行建模和詢問。 它用C語言實現,並且經過三十多年的不斷髮展。
https://www.gnu.org/software/gsl/doc/html/interp.html GSL
https://github.com/pradeep-pyro/tinynurbs
Primary Reference -- "The NURBS Book," Les Piegl and Wayne Tiller, Springer-Verlag, 1995.
https://github.com/msteinbeck/tinyspline
https://github.com/mcneel/opennurbs
https://github.com/OpenNurbsFit/OpenNurbsFit
https://developer.rhino3d.com/guides/opennurbs/what-is-opennurbs/
https://onurraufbingol.com/NURBS-Python/ ++ https://github.com/orbingol/NURBS-Python python
http://ayam.sourceforge.net/ Ayam is an open source NURBS modeler based on Tcl/Tk and OpenGL.
————————————————
版權宣告:本文為CSDN博主「libaineu2004」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/libaineu2004/article/details/103287767