====== 為何我需要了解NURBS? ====== ======更多詳情====== http://en.wikipedia.org/wiki/NURBS ======Non-Uniform Rational B-Spline (NURBS)====== "NURBS"這個字的由來? NURBS 是 Non-Uniform Rational B Spline (非一致有理 B 雲形線) 的縮寫, NURBS 可用於呈現 3D 幾何圖形。 ======使用 NURBS 呈現 3D 幾何圖形的優點====== NURBS 幾何圖形有五個重要的特質,這些特質讓它成為電腦輔助建模的理想選擇。 * 目前有許多交換 NURBS 幾何圖形的標準,用戶可以在許多建模、彩現、動畫、工程分析軟體之間轉移 3D 模型,而且以 NURBS 儲存的幾何圖形在二十年後仍然可以使用。 * NURBS 有精確及廣為人知的特質,各主要的大學也都有教授 NURBS 幾何圖形數學及電腦科學的課程,這代表專業軟體廠商、工程團隊、工業設計公司及動畫公司可以找到受過 NURBS 程式訓練的程式設計師。 * NURBS 可以精確地呈現標準的幾何圖形 (直線、圓、橢圓、球體、環狀體) 及自由造型的幾何圖形 (車身、人體)。 * 以 NURBS 呈現的幾何圖形所需的資料量遠比一般的網格型式要少。 * NURBS 的估算法則可以有效並精確地在電腦上執行,下面將會繼續討論。 ======NURBS 幾何圖形是什麼?====== 有許多方式可以回答這個問題,如果您對數學方程式有興趣,您可以在**[[developer:opennurbs:home| openNURBS 網站 ]]**找到許多與 **NURBS相關的書藉及文章**,以取得更多、更詳細的資訊。 Rhino 以 NURBS 呈現曲線及曲面,NURBS 曲線與曲面有非常類似的特性,並且共用許多專有名詞。Rhino 的曲面結構和以下會提到的曲線結構非常類似,因為曲線比較容易描述,我們將詳細解說曲線的結構 。 NURBS 曲線是由以下四項所定義:**階數、控制點、節點及估算法則**。 **階數 (Degree) **是正整數。 這個數字通常是 1、2、3 或 5,Rhino 的直線和多重直線的階數是 1,圓的階數是 2,大部分自由造型曲線的階數是 3 或 5。Rhino 可以讓您以階數 1 至 32 的 NURBS 作業。有時候,Rhino 會用到線性、二次方、三次方或五次方等術語,線性代表階數為 1、二次方代表階數為 2、三次方代表階數為 3、五次方代表階數為 5。 您也可能會看到某些地方提及 NURBS 曲線的次數 (Order),一條 NURBS 曲線的次數等於 (階數 + 1) 的正整數,所以階數也等於 (次數 - 1)。 Rhino提供可改變階數的工具,可由1到32階數任意改變調整。提升一個NURBS曲線階數時有可能可以不改變整體形狀,但降低階數時,外觀則一定會有某種程度的變形。 **控制點**是一個點的清單,控制點的最小數目是 (階數 + 1)。 改變 NURBS 曲線的形狀最簡單的方法之一是移動控制點,Rhino 有幾種移動控制點的方式,您可以使用滑鼠移動控制點對曲線形狀做大幅度的自由調整,也可以使用其它專門設計的微調工具。 控制點帶有一個數值,稱為**權值(weight)**,除少數特例以外,控制點的權值都是正數。曲線的所有控制點的權值都相同時 (通常是 1) 稱為非有理曲線,有控制點的權值不一致時稱為有理曲線。NURBS 這個字裡的 R 為 Rational (有理) 的縮寫,代表 NURBS 可以是有理曲線的可能性。除了圓弧、圓、橢圓曲線以外,NURBS 曲線通常是非有理曲線,但 Rhino 有檢查與變更控制點權值的指令。 **節點(knots)**是階數 + N - 1 個數字的清單,N 代表控制點的數目,這個數字的清單有時候也稱為節點向量,這裡的"向量"並非指 3D 空間中的方向。 節點清單上的數字必須符合幾個條件,確定條件是否符合的標準方式是清單由上往下數字必需維持不變或變大,而且數字重複的次數不可以比階數大。例如,階數 3 有 15 個控制點的 NURBS 曲線: * 清單數字為 0,0,0,1,2,2,2,3,7,7,9,9,9 是一個符合條件的節點清單。 * 清單數字為 0,0,0,1,2,2,2,2,7,7,9,9,9 則不符合,因為此清單中有四個 2,而四比階數大 (階數為 3)。 節點值重複的次數稱為**節點的重數 (Multiplicity)**,上述的例子符合條件的節點清單中,節點值 0 的重數值為三;節點值 1 的重數值為一;節點值 2 的重數為三;節點值 7 的重數值為二;節點值 9 的重數值為三。如果節點值重複的次數和階數一樣,該節點稱為完全重數節點 (Full-Multiplicity Knot)。在上面的例子中,節點值 0、2、9 有完整的重數,只出現一次的節點值稱為單純節點 (Simple Knot),節點值 1 和 3 為單純節點。 如果在節點清單中是以完全重數節點開始,接下來是單純節點,再以完全重數節點結束,而且節點值為等差級數,稱為一致 ( Uniform )。例如,如果階數為 3 有 7 個控制點的 NURBS 曲線,其節點值為 0,0,0,1,2,3,4,4,4,那麼該曲線有一致的節點。如果節點值是 0,0,0,1,2,5,6,6,6 不是一致的,稱為非一致 ( Non-Uniform )。在 NURBS 的 NU 代表“非一致”,意味著在一條 NURBS 曲線中節點可以是非一致的。 在節點值清單中段有重複節點值的 NURBS 曲線比較不平滑,最不平滑的情形是節點清單中段出現完全重數節點,代表曲線上有銳角。因此,有些設計師喜歡在曲線上插入或移除節點,然後調整控制點,使曲線的造型變得平滑或尖銳,Rhino 也有移除或插入節點的工具。因為節點數等於 (N + 階數 - 1),N 代表控制點的數量,所以插入一個節點會增加一個控制點,移除一個節點也會減少一個控制點。插入節點時可以不改變 NURBS 曲線的形狀,但通常移除節點必定會改變 NURBS 曲線的形狀。Rhino 也允許您直接刪除控制點,刪除控制點時也會刪除一個節點。 控制點和節點是一對一成對的是常見的錯誤概念,這種情形只發生在 1 階的 NURBS (多重直線)。較高階數的 NURBS 的每 (2 x 階數) 個節點是一個群組,每 (階數 + 1) 個控制點是一個群組。例如,一條 3 階 7 個控制點的 NURBS 曲線,節點是 0,0,0,1,2,5,8,8,8: * 前四個控制點是對應至前六個節點 * 第二至第五個控制點是對應至第二至第七個節點 0,0,1,2,5,8 * 第三至第六個控制點是對應至第三至第八個節點 0,1,2,5,8,8 * 最後四個控制點是對應至最後六個節點。 某些建模器使用較舊的 NURBS 估計演算法,該演算法需要額外的兩個節點值,總數為 (階數 + N + 1) 個節點。當 Rhino 匯出或匯入這種類型的 NURBS 幾何圖形時會自動加入或移除兩個節點。 輸入一個數字到 **NURBS 估算法**則使用的數學方程式會得到一個點。 該方程式涉及階數、控制點、節點,並含有某些 B-雲形線基礎函數 (B-spline basis functions)。NURBS 的 BS 代表 B-雲形線 (B-Spline)。NURBS 的估算法則是由參數開始,您可以將估算法則視為一個黑盒子,每當這個黑盒子吃進一個參數就會產生一個點座標,而黑盒子如何運作是階數、節點、控制點所控制。 Rhino 有一些估計工具可以讓您選取一條 NURBS 曲線,輸入參數值產生相對應的點。 概念上,節點決定 B-雲形線的基礎函數,參數值的 B-雲形線基礎函數值決定如何平均控制點及權值以產生點。您可以在許多教科書和網站找到 NURBS 的估算法則及 B-雲形線基礎函數的詳細資料。