AutoCAD中的Spline曲線算法分析(一)

AutoCAD中的Spline曲線算法分析(一)

      AutoCAD是一款應用廣泛的工程繪圖軟件,其中樣條Spline曲線是使用頻繁的功能之一。在計算機中,通過點取屏幕上面的點,並讓一會曲線光順的通過這幾個點,這叫插值曲線。這就是Spline曲線的功能。那這個Spline曲線的數學公式又是什麼樣的呢?當我們知道了AutoCAD中的Spline樣條表達公式,很多軟件之間的Spline轉換就變得更加簡單。

      在研究這個之前,我們查閱了不少資料,很幸運我們發現Nurbs曲線被標準化組織,定義爲唯一表達CAD曲線的標準函數公式。通過對Spline的分析,我們完全可以判定AutoCAD中的Spline樣條曲線就是Nurbs類型曲線。

      關於Nurbs曲線已經是比較成熟的技術了,開放的函數庫也比較多,如OpenNurbs。有時也可以自己寫一個,如果不深入公式推導,只是寫寫程序,對於加深Nurbs的理解還是很有幫助的。Nurbs函數中有幾個感念需要理解,一個是次數,如2次,3次。一般CAD軟件中,直線可以用1次的Nurbs表示,圓弧可以用2次的Nurbs表示,樣條就可以用3次的Nurbs表示。一般用變量K表示函數的次;還有一個就是節點矢量Knot Vector,節點矢量是計算基函數值的依據,它的取值方式,直接決定了曲線的樣式。所以,節點矢量knot Vector是我們重點要研究的。下面收集了幾種計算節點矢量的方法:

1.均勻參數化

使每個節點區間長度(用向前差分表示),即節點在參數軸上呈等距分佈,爲處理方便起見,常取成整數序列

    Ui = i    i=0,1,...,n

這種參數化法僅適合於數據點多邊形各邊 或者稱弦 接近相等的場合。否則,在相鄰段弦長相差懸殊的情況下,生成插值曲線後弦長較長的那段曲線顯得扁平,弦長較短的那段曲線則膨得厲害,甚至出現尖點或打圈自交又稱爲三重點的情況。

2. 積累弦長參數化

這種參數化法如實反映了數據點按弦長的分佈情況,一直被認爲是最佳參數化法。它克服

了數據點按弦長分佈不均勻情況下采用均勻參數化所出現的問題。在較多情況下能獲得較滿意的結果,即所得插值曲線具有較好的光順性。弦長參數化法生成的插值曲線在某種程度上可看作爲較好光順性的解釋。應該指出,插值曲線的光順性不僅與數據點的參數化有關,還與所採用的插值法有關。當數據點取得足夠密,且當插值法具有收斂性質,即加密數據點時插值曲線收斂到被插值曲線的性質時,將生成近似弧長參數化的插值曲線。但在工程實踐中,都不希望費這樣的麻煩,人們希望能夠儘可能少但又足以表示形狀的數據點,方便地生成所需要的曲線。

3.向心參數化

從積累弦長參數化法並不總能保證生成光順的插值曲線出發,認爲問題在於未考慮數據點的折拐情況。就像汽車在高速公路上行駛那樣,司機驅車的安全性與舒適感取決於使向心速度在一定

界限內平穩地變換。由此他假設在一段曲線弧上的向心力與曲線切矢從該弧段始端至末端的轉角成正比,加上其它一些簡化假設,導出如上的參數化法,與積累弦長參數化法在計算上的差別,這裏取成了弦長平方根的累計,故又稱爲平方根法。

計算節點矢量的方法還有Foley參數化等。

現在,回到AutoCAD中來,解決Nurbs的算法表示的樣條曲線問題,重點是弄清楚它的節點矢量的計算公式。通過,多次的研究發現Spline採用三次曲線,爲保證曲線通過首尾,並且在首尾處相切,使用K+1,也就是4重節點。並在節點矢量剩下的值,採用均勻參數化。

如:一個擁有n=7個控制點的Spline曲線。採用k=3次樣條表示。

它的首端應該有0,0,0,0 ,末端應該有1,1,1,1,在節點矢量上,應該有m=n+k+1,也就是11=7+3+1個點,現在還需要計算節點矢量上中間的三個值(11-8=3),這三個點通過平分0-1之間的值,也就是1/4,2/4,3/4。這樣完整的節點矢量應該是ui ={0,0,0,0,0.25,0.5,0.75,1,1,1,1}。

有了節點矢量,再計算Nurbs基函數的值,最後計算出在曲線上的座標值。通過驗算,這個算法完全符合在AutoCAD程序中,對Spline的函數表示。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章