1. 程式人生 > >Revit二次開發:NurbSpline中各個引數的含義

Revit二次開發:NurbSpline中各個引數的含義

摘自百度的回答,基本滿足二開需求。瞭解一下:

NURBS是Non-Uniform Rational B-Splines的縮寫,是非統一有理B樣條的意思。具體解釋是:

.Non-Uniform(非統一):是指一個控制頂點的影響力的範圍能夠改變。當建立一個不規則曲面的時候這一點非常有用。同樣,統一的曲線和曲面在透視投影下也不是無變化的,對於互動的3D建模來說這是一個嚴重的缺陷。

.Rational(有理):是指每個NURBS物體都可以用數學表示式來定義。

.B-Spline(B樣條):是指用路線來構建一條曲線,在一個或更多的點之間以內插值替換的。

簡單地說,NURBS就是專門做曲面物體的一種造型方法。NURBS造型總是由曲線和曲面來定義的,所以要在NURBS表面裡生成一條有稜角的邊是很困難的。就是因為這一特點,我們可以用它做出各種複雜的

曲面造型和表現特殊的效果,如人的面板,面貌或流線型的跑車等。
一條NURBS曲線中有四個重要的定義專案:degree值,Control points控制點,knots節點和evaluation rule評定的規則。 

degree 值 

degree的值是一個正整數。 
這個值通常為1,2,3或5。RHINO的線段和複合線段的degree的值為1。圓degree的值為2,而大部分RHINO的自由曲線的degree的值為3或5。RHINO所使用的NURBS曲線的degree的值可以設定從1到32。而通常我們把這些degree的值,稱之為Linear,Quadratic, Cubic, Quintic。 Linear代表著degree的值為1,Quadratic代表著degree的值為2, Cubic代表著degree的值為3 ,Quintic代表著degree的值為5。 


你可以參閱參考文獻裡關於NURBS曲線的order部分。NURBS曲線的order是個正整數,且等於degree+1。所以degree的值等於order –1。 
在改變NURBS曲線的degree的值的過程中,你有可能只增加degree的值而不影響到NURBS曲線的形狀。但是,你無法在減小degree的值的過程中不影響到NURBS曲線的形狀。RHINO所提供的工具能讓你自由地設定NURBS曲線的degree的值,從1到32。 

Control points 控制點 

Control points最少是degree+1個點。 
移動控制點,是改變NURBS曲線最簡單的方法。RHINO提供了很多方法來移動控制點。如果需要有較大彈性的自由曲面,你可以只使用滑鼠來快速的移動和改變控制點,以繪製你的模型。而相對於準確性要求較高的曲線,RHINO則提供了其它精確性高的工具,以供使用。 


Control points有一個相關的值---Weight。除了少數例子外,weight的值通常是正數。Control points是一串至少是degree+1個點,此曲線狀況稱之為non-rational;而如果weight的值並不完全相同時,此曲線狀況稱之為rational。NURBS曲線中的R為rational的縮寫。但這只是代表這條曲線有可能是rational。在範例裡,有大部分的NURBS曲線都是non-rational。只有一些NURBS曲線是rational,如:圓,橢圓等明顯的案例。RHINO提供一些工具來檢測和更改Control points的weight值。 

knots節點 

knots節點是一串degree+N-1的數字,其中N為Control points的數字編號。有時我稱這串數字為knot vector。在這裡的vector並不是指3-D向量或方向性。 
這串節點數字必須符合一些技術上的條件。這裡列出了幾項符合knot技術上所需要的條件值。基本的條件為:這連串的數字必須相同,或順序越後的數字越大,而且如果數字重複了,重複的次數不可以超過degree的值。例如一degree的值為3的NURBS曲線,其Control points的數量為11,而這串數字為0,0,0,1,2,2,2,3,7,7,9,9,9,符合knot數字串的要求。但假如knot數字值為0,0,0,1,2,2,2,2,7,7,9,9,9,這就不符合技術上所需要的條件值了。因為有4 個2,已超出了degree的值3的數量。 
相同的knot數字值的數量,我們稱之為multiplicity.在上一個範例中,符合了knot技術上所需要的條件值,其knot值為0的有multiplicity 3,其knot值為1的有multiplicity 1,其knot值為2的有multiplicity 3,其knot值為7的有multiplicity 2,其knot值為9的有multiplicity 3。當knot的multiplicity值與其degree的值一樣時,我們將之稱為Full – multiplicity。在上一個範例中,knot的值為0,2,9,都是Full – multiplicity。當knot的multiplicity值為1時,我們將之稱為Simple – multiplicity。在上一個範例中,knot的值為1,3,都是Simple – multiplicity。 
假如一曲線其knot的值開始於Full – multiplicity,然後接著Simple – multiplicity,結尾又是Full – multiplicity,而且其值之間的間隔相同,那這個knot稱之為uniform。例如一NURBS曲線,其degree的值為3,Control points的數量為7,knot的值為0,0,0,1,2,3,4,4,4,那此曲線就可稱之為uniform曲線。而假如knot的值為0,0,0,1,2,5,6,6,6,那此曲線就不是uniform曲線,我們稱之為non-uniform。NURBS裡的NU字母就是non-uniform的縮寫。表示knots節點在NURBS曲線中是允許non-uniform的情形。 
相同的knot數字值的數量,如果集中在值的中央部位,那這一NURBS曲線是較不圓滑的。例如有一曲線其knot值的中央有一Full – multiplicity,那就是表示此NURBS曲線會被彎成一銳角。因此,有些人會想要以增加或減少knots的數量,然後調整Control points使得曲線變得更加平順或更銳利。RHINO提供了工具讓你自由的增加或減少knots的數量。之前有提到過knots的值為degree+N-1,其N為Control points的值。所以當你增加knots的數量,同時也增加了Control points的數量;減少knots的數量,同時也減少了Control points的數量。knots的數量可以被增加,而不會影響到NURBS曲線的外形。而在一般情況下,減少數量會影響到NURBS曲線的外形。RHINO提供了一個減少knots的進階工具,當你刪除Control points時,它會自動調整knots的位置到最適當的位置。 

Knots和control points 

一般人常會誤解,在NURBS曲線裡的一個Control points會對應一個knot。而這種情況通常只會發生在degree的值為1的NURBS曲線上(通常是polylines)。在degree的值較高的NURBS曲線上,是由degree+1個Control points群組對應2倍degree值的knots群組。例如:假設我們有一個degree值為3的NURBS曲線,其Control points為7和knots為0,0,0,1,2,5,8,8,8。這時,前四個Control points和前六個knots為一組。而第二到第五個Control points和knots 0,0,1,2,5,8,為一組。而第三到第六個Control points和knots 0,1,2,5,8,8為一組。最後四個Control points和最後六個knots為一組。 
現在還有些軟體使用舊版本的NURBS轉換法。舊版本的NURBS轉換法在計算knots值時,須在總額為degree+N+1 knots再額外多加兩個knots值。當RHINO在輸入或輸出NURBS幾何資料到這些軟體時,會自動地增加或減少兩個多餘的knots值以符合其正確性。