非均匀有理B样条

NURBS是非均勻有理B樣條曲線（Non-Uniform Rational B-Splines）的縮寫，NURBS由Versprille在其博士學位論文中提出，1991年，國際標準化組織（ISO）頒布的工業產品資料交換標準STEP中，把NURBS作為定義工業產品幾何形狀的唯一數學方法。1992年，國際標準化組織又將NURBS納入到規定獨立於裝置的互動圖形編程介面的國際標準PHIGS（程式設計師層次互動圖形系統）中，作為PHIGS Plus的擴充部分。Bezier、有理Bezier、均勻B樣條和非均勻B樣條都被統一到NURBS中。 非均勻有理樣條（Non uniform rational B-spline，NURBS），是在電腦圖形學中常用的數學模型，用於產生和表示曲線及曲面。它為處理解析函式和模型形狀提供了極大的靈活性和精確性。NURBS通常在電腦輔助設計（CAD），製造 （CAM），及工程 （CAE） 中有廣泛應用。是眾多行業寬泛標準中的一部分，如IGES, STEP, ACIS和PHIGS。同時在很多不同的3D建模和動畫軟體中也能找到NURBS的工具集。 通過電腦程式，他們可以很有效率的被處理，還允許進行簡單的人機互動。NURBS 曲面是對映到三維的空間中的曲面的兩個參數的函式。由控制點確定曲面的形狀。NURBS 曲面可以用緊湊的形式表示簡單的幾何形狀。T-樣條和細分曲面更適合於複雜的有機形狀，因為和 NURBS 曲面相比，它們減少了控制點數目。 一般情況下，編輯 NURBS 曲線和曲面有高度直觀性和可預測性。控制點要麼和曲線或曲面直接相連，要麼表現的如同他們通過一根橡皮筋而相連。根據使用者介面的類型，可以通過元素的控制點實現編輯，最明顯常見的例子是貝塞爾曲線。

歷史

在電腦處理之前，設計一般是通過在紙上的手繪完成，該過程需要藉助許多繪畫工具。例如直尺用於繪製直線，圓規用於繪製圓形，量角器用於繪製角度。但是許多不規則形狀的曲線，例如船艏，是無法通過這些工具繪製的。雖然可以通過在手繪板上徒手完成，但由於尺寸原因這種手稿無法在實際生產中得到應用。 1946年，數學家開始研究樣條形狀，該形狀通過分段的多項式公式推匯出來，因為其和機械生產中的樣條相類似，I. J. Schoenberg將其命名為樣條曲線或樣條函式。 NURBS的發展始於1950年代，它是由需要像在車體和船殼中使用的自由曲面的數學上的精確表示的工程師們所發現的，它可以在任何技術上需要的時候精確的複製出來。以前這類曲面的表示只存在於設計者建立的實體模型。
該發展的先驅包括：皮埃爾·貝塞爾（Pierre Bézier）和Paul de Casteljau兩個法國人， 前者曾是雷諾的工程師，後者在標緻工作。貝塞爾基本是和de Casteljau獨立發展的，兩人互相不知道對方的工作。但是因為貝塞爾發表了他的工作的結果，今天的一般的電腦圖形學用戶認為樣條 -- 通過在曲線上的控制點表示的那類 - 為貝塞爾樣條，而de Casteljau的名字僅作為他為計算參數化曲面所設計的演算法而為人所知。在1960年代，人們認識到非均勻有理B樣條是貝塞爾曲線的一個推廣，而貝賽爾曲線可以視為均勻有理B樣條。
最初NURBS僅用於汽車公司私有的電腦輔助設計包。後來它們成為標準電腦圖形包的一部分，包括OpenGL圖形庫。
NURBS曲線和曲面的實時、互動繪製最初由Silicon Graphics工作站於1989年提供。在1993年，CAS Berlin（一個和柏林工大合作的小創業公司）開發了第一個個人機上的互動式NURBS建模器，稱為NöRBS。今天多數桌上型電腦上的專業電腦圖形應用程式提供NURBS技術，一般通過整合一個從專用公司來的NURBS引擎。

使用

NURBS對於電腦輔助設計（CAD）、製造（CAM）和工程（CAE）是幾乎無法迴避的，並且是很多業界廣泛採用的標準的一部分，例如IGES， STEP，和PHIGS。
但還是有很多它們在互動式建模中的優點和有用性的錯誤觀念，主要是由於關於單一軟體包及其使用者介面的易用性而得出的猜測。 通常，據說編輯NURBS曲線和曲面是高度直觀和可預測的。控制點總是直接連線到曲線或曲面上或象是通過一根橡皮筋連線。根據使用者介面的類型，編輯可以通過它們各自的控制點實現，這對於貝塞爾曲線是最顯然和最一般的，或者也可以通過高層的工具，例如樣條建模或者階層的編輯。高層工具可以設計得很強大，並得益於NURBS建立和建立不同層次的連續性的能力： c0連續性表示連通性，c1連續性可以視為沒有尖角，而c2連續性通常稱為幾何連續性，視覺上也就是「光滑」的東西，用NURBS還可以達到更高階的連續性，它們可以導致"亮度連續性"。這被新車模型的攝影師所倚重，他們熱衷於展示霓虹燈在車身上的鏡像。燈光可以展示出完美的光滑度，這在沒有NURBS的情況下實際上是不可能。

定義

NURBS是Non-Uniform Rational B-Splines的縮寫，是非均勻有理B樣條的意思。具體解釋是：
Non-Uniform（非均勻性）：是指一個控制頂點的影響力的範圍能夠改變。當建立一個不規則曲面的時候這一點非常有用。同樣，統一的曲線和曲面在透視投影下也不是無變化的，對於互動的3D建模來說這是一個嚴重的缺陷。
Rational（有理）：是指每個NURBS物體都可以用有理多項式形式運算式來定義。
B-Spline（B樣條）：是指用路線來構建一條曲線，在一個或更多的點之間以內插值替換的。
簡單地說，NURBS就是專門做曲面物體的一種造型方法。NURBS造型總是由曲線和曲面來定義的，所以要在NURBS表面里生成一條有稜角的邊是很困難的。就是因為這一特點，我們可以用它做出各種複雜的曲面造型和表現特殊的效果，如人的皮膚，面貌或流線型的跑車等。

連續性

考慮在建造中的曲面。例如馬達遊艇的船體，其表面通常由一些 NURBS 曲面構成。這些曲面能夠被裝配在一起使得它的邊界線不可見，這是幾何連續性的數學表達。通過研究NURBS的特性，能夠得到一些高階的工具來建立一個不同層次的幾何連續性條件：
位置連續性認為只要兩條曲線或曲面的結束位置相吻合。曲線或曲面可能在某個角度上相吻合，形成一個尖利的拐角或邊緣。
相切連續性要求曲線或曲面的結束向量相平行或指向同樣的方向，排除了鋒利的邊緣。因為焦點落在切線連續的邊緣總是連續的，看起來很自然，這種程度的連續性通常被認為是充足的。
曲率連續性 進一步要求結束向量具有相同的長度和長度變化率。亮點落在曲率連續的邊緣不會顯示任何的變化，使得兩個曲面顯示如同一個曲面。這可以直觀地認識為非常"光滑"。這一級別的連續性在建立需要許多雙立方曲面構成的模型中非常有用。
幾何連續性條件主要是指形狀的表面 ；因為 NURBS 曲面是函式，也有可能討論其參數導數的曲面，這就是所謂的參數連續性。一定程度的參數連續性意味著在那種程度上的幾何連續性。
第一和第二級的參數連續性是為位置和相切的連續性相同的實用目的設定。然而三級參數連續性不同於曲率連續性，其參數也是連續的。在實踐中，如果使用均勻 B 樣條三級參數連續性更容易實現。
n級連續性的定義要求某點鄰域內的n階導數在那點相等。注意曲線或曲面的偏導數是有方向和數值的向量，這兩者都應該彼此相等。高光和反射可以揭示完美的平滑，除了G²連續性的NURBS曲面沒有其他方法可以在實際中做到。
連續性和度數是有關係的。一個度數為3的等式能產生C2連續性曲線。NURBS造型通常不需要這麼高度數的曲線。 一條不同片斷的NURBS曲線可以用不同級別的連續性。具體來說，在同樣的位置或非常靠近的地方放置一些可控點，會降低連續性的級別。兩個重疊的可控點會使曲率變尖銳。三個重疊的可控點會在曲線里建立一個有角度的尖角。附加一個或兩個可控點會在曲線的附近聯合它們的影響力。 從可控點中刪除一個離開它們，就增加了曲線的連續性的級別。在3DMAX里，Fuse（熔化）可控點會在曲線里建立一個假象的曲率或尖角。如果要恢復原狀，Unfuse（反熔化）那個點就可以了。

控制點

節點向量是一個參數值的序列，用於決定控制點在何處和如何影響NURBS曲線。節點的個數總是等於控制點的個數加上曲線的階數。節點必須只是用於內部計算，因而一般對於軟體的終端用戶來說是沒有幫助的、不可編輯、甚至不可以見的。

節點向量

節點向量的值必須升序：下面的向量是正確的：[0 0 1 2 3]，而接下來這個不是：[0 0 2 1 3]。也要注意唯一重要的因素是值之間的比例：節點向量[0 0 1 2 3]，[0 0 2 4 6]和[1 1 2 3 4]產生相同的曲線。不可以有比曲線的度數更多的重合值：節點的重複度≤度數。 對於一階NURBS，每個節點和一個控制點結對。
曲線的序大於或等於2，對應與一條線性曲線（序=2，表示一條直線），一條二次曲線（序=3)以及一條三次曲線（序=4）。數學上曲線用同階的多項式表示，一條三次曲線用3階多項式表示，其序為4。另外，控制點的個數必須等於或大於曲線的序。實踐上，3階的三次類型是表示曲線和曲面時最常用的。而4次或5次的有時候有用，特別是用於導數，更高階實際上從來不用因為他們經常導致內部數值問題並趨向於消耗更多的不必要的計算。
非有理曲線有時不夠用，例如用於表示圓。 這是表示一個XY平面上的均勻的圓的控制點，第四個參數是比重：

   cp_circle[0] = Controlpoint( 1、 0、0、     1);
   cp_circle[1] = Controlpoint( 1、 1、0、sqrt(2) / 2.0);
   cp_circle[2] = Controlpoint( 0、 1、0、     1);
   cp_circle[3] = Controlpoint(-1、 1、0、sqrt(2) / 2.0);
   cp_circle[4] = Controlpoint(-1、 0、0、     1);
   cp_circle[5] = Controlpoint(-1、-1、0、sqrt(2) / 2.0);
   cp_circle[6] = Controlpoint( 0、-1、0、     1);
   cp_circle[7] = Controlpoint( 1、-1、0、sqrt(2) / 2.0);
   cp_circle[8] = Controlpoint( 1、 0、0、     1);

產生方法

AutoCAD用 SPLINE 命令建立樣條曲線即 NURBS 曲線。還提供用 PEDIT 命令，平滑多段線（POLYLINE）擬合生成近似樣條曲線，以下稱為「樣條擬合多段線」。這種曲線不是真正意義上的樣條曲線，而是由若干直線（曲線）段構成的多段線，逼近於樣條曲線。但使用 SPLINE 命令可把這種二維和三維樣條擬合多段線轉換為樣條曲線。 用SPLINE命令建立的樣條曲線和編輯平滑多段線生成的樣條擬合多段線相比，有以下不同： 樣條曲線顯然要比樣條擬合多段線精確的多。在工程應用中，樣條擬合多段線不能作為數學分析的基礎，不能在曲線上，生成切線、法線或提取曲線上的點位資料。