張劍英 ,許 徽,陳 娟,韋文思 ,夏 杰
(1.中國礦業大學 信電學院,江蘇 徐州 221116;2.中國礦業大學 材料科學與工程學院,江蘇 徐州 221116;3.河南煤業化工集團焦煤公司計訊處,河南 焦作 454002)
樣條函數自提出以來,以其構造簡單、易于計算、及很好的力學背景等特點被廣泛用于科學計算、工程設計和計算機輔助設計等領域,從而成為最重要的曲線和曲面構造方法之一[1]。
三次樣條曲線在使用中存在局限性,且表示方法缺乏幾何不變性[2]。即當平面直角坐標系中的型值點發生旋轉等幾何變形時,其曲線的形狀也發生變形,嚴重時甚至不能保證滿足x1<x2<…<xn的條件,對表現曲線的幾何形狀極為不便;在使用AutoCAD中spline命令繪制樣條曲線時,可能導致各型值點的橫坐標也不能滿足x1<x2<…<xn的條件。為了解決這些問題,一些學者運用向心參數法在周期性三次樣條曲線擬合控制多邊形時,取得了較小的偏差[3];基于累加弦長的三次參數樣條曲線插值在數控系統中取得了較好的效果[4],但是以累加弦長為參數的三次參數樣條曲線插值和基樣條的函數插值在各分段曲線兩端曲率的符號相同的情況下都有可能產生這段曲線上的拐點,造成曲線不光順。因此一些準則提出檢查多余的拐點[5],YE J等人修正了Kjellander的方法[6],并從累加弦長參數化和光順函數兩方面消除了三次參數樣條曲線的振蕩和回折[7]。章虎冬等人提出了基于離散曲率的三次參數樣條曲線的自動光順算法[8]。
本文以三次樣條曲線的第i段的弦長為參數實現該段的三次樣條曲線的參數化繪制。
AutoCAD提供了多種軟件接口[9],包括 AutoLISP(Auto List Progressing),ADS(AutoCAD Development System,C-based),DCL(Dialog Control Language),ARX(Auto-CAD Runtime Extension,C++based),VBA(Visual Basic for Applications)和 COM/OLE/ActiveX來實現 AutoCAD與其他軟件的數據交換。HAO J P等人采用AutoCAD和VBA的可靠性分析可視化系統[10]。于代俊等人在Auto-CAD平臺上和VC++開發環境下,利用ObjectARX開發工具包完成了基于三次參數樣條曲線等高線的矢量化繪制[11]。ObjectARX開發的應用程序是動態鏈接庫(DLL),該程序與AutoCAD共享一個地址空間,并可直接調用AutoCAD的內部函數,直接訪問AutoCAD數據庫結構、圖形系統以及AutoCAD幾何造型核心,實現快速、穩定、實時擴展AutoCAD的功能。本文以圖形交換文件(DXF)格式實現AutoCAD與VC++之間的數據交換。
DXF是AutoCAD領域的一種標準數據交換格式,其包含了所有圖層的幾何形狀和幾何尺寸,該格式對于提取AutoCAD文件的幾何信息提供了強有力的支持。本文將AutoCAD繪制的三次樣條圖形導出形成DXF格式文件之后,提取出各三次樣條曲線的起始端點切向、終止端點切向、型值點數及相應的型值點的坐標值,然后利用提取出的數據繪制三次參數樣條曲線。
圖1所示為運用高級軟件VC++編程提取DXF文件中三次樣條曲線的數據和參數繪制三次樣條曲線的流程圖。
三次參數樣條函數的基本要求是:已知n個型值點Pi(i=1,2,…,n),且相鄰型值點不重合;若 P(t)滿足下列條件:(1)型值點 P 在函數 P(t)上;(2)P(t)在整個[Pi,Pn]上二次連續可導;(3)在每個子區間[Pi,Pi+1]上(i=1,2,…,n-1),Pi(t)都是參數 t的三次多項式,而參數 t以相鄰型值點之間的弦長為取值變化范圍。則稱P(t)是過型值點的三次參數樣條曲線。

如果取消了這些向量中的z分量,就變成了二維曲線。
由于本文繪制二維的三次參數樣條曲線,所以第i段的三次參數樣條曲線的表達式為:
洪口型為[n、?]尾二分型,根據初步調查,洪口方言中中古咸、深、山、臻攝讀作[n]尾,宕、江、曾、梗、通攝讀作[?]尾。 例如:

Li為第i段的弦長,且有:

根據定義中給出的已知條件,確定其各待定系數。
對Pi(t)2次求導有:

圖1 提取DXF文件中三次樣條曲線數據流程圖

當 t=0時,第 i段子曲線對應于端點 Pi,則

當 t=Li時,第 i段子曲線對應于端點 Pi+1,則

設第i段子曲線在型值點Pi處的二階導數向量為Mi,則有:

由上述4式可求得各系數向量為:


因此可得第i段型值點處的二階導數向量,該段三次參數樣條函數為:

利用函數P(t)的一階導數連續求解各型值點處的二階導數向量Mi。
又 P′i-1(Li-1)=P′i(0)

則有λiMi-1+2Mi+μiMi+1=Dii=2,3,…,n-1
在AutoCAD中,用spline命令繪制三次樣條曲線時,采用邊界約束為夾持端,所以

此時各型值點的二階導數向量Mi可用矩陣表示如下:

用三對角矩陣的追趕法[12]求得二階導數向量Mi的值,從而寫出第i段弦長為參數的三次參數樣條曲線函數表達式。
本文用VC++編程從AutoCAD將繪有三次樣條曲線圖形導出DXF格式文件,并從該DXF格式文件中提取所有三次樣條曲線的起始端點切向、終止端點切向、擬合點數與擬合點的坐標值。編程求出所有三次樣條曲線各段三次參數樣條曲線函數表達式,最后用所求的表達式將各三次樣條曲線繪制出來。如圖2(除外面邊框外)、圖4(除外面邊框和中心的兩圓外)所示的圖形都是用AutoCAD的spline命令繪制的三次樣條曲線。圖3、圖5分別為圖2、圖4在AutoCAD中用DXFOUT命令導出形成DXF文件格式,并用VC++編程提取出來的DXF文件信息繪制的三次參數樣條曲線圖。

圖2 AutoCAD繪制的三次樣條曲線

圖3 VC++繪制的三次參數樣條曲線

圖4 AutoCAD繪制的三次樣條曲線

圖5 VC++繪制的三次樣條曲線
本文介紹了三次參數樣條曲線的研究現狀和Auto CAD軟件接口,提出了以DXF文件格式為橋梁,實現AutoCAD圖形與VC++之間的數據交換,并運用高級語言VC++編程從DXF文件中提取出各三次樣條曲線的起始端點切向、終止端點切向、型值點數及相應型值點坐標。同時,提出了三次參數樣條曲線的生成原理,并應用該原理VC++編程實現了三次參數樣條曲線的繪制。從曲線生成原理及最后結果可以看出,該方法有效地解決了三次樣條曲線的參數化繪制,準確地再現了真實的圖形。
[1]張彩明.高精度三次參數樣條曲線的構造[J].計算機學報,2002,25(3):262-268.
[2]魏海濤.計算機圖形學[M].北京:電子工業出版社,2001.
[3]MISCHAEL S, Floater.On the deviation of a parametric cubic spline interpolant from its date polygon[J].Computer Aided Geometric Design, 2008,25:148-156.
[4]談勇,王治森,閆曉婧.基于累加弦長的三次參數樣條曲線的插補控制[J].合肥工業大學學報(自然科學版),2004,27(6):619-622.
[5]蘇步青.關于三次參數樣條曲線的一些注記[J].應用數學學報,1976(1):49-58.
[6]KJELLANDER JA P.Smoothingofcubicparametric splines[J].Compute Aided Des, 1983,15:175-179.
[7]YE J, QU R.Fairing of parametric cubic splines[J].Mathematical and Computer Modeling, 1999,30:121-131.
[8]章虎冬,蔣大為.三次參數樣條曲線的自動光順算法[J].陜西郵電學院學報,2006,11(3)116-118.
[9]MANSOUR N, MOHAMMAD J, DREES I.Cost estimation of structural skeleton using an interactive automation algorithm: A conceptual approach[J].Automation in Construction, 2007,16:797-805.
[10]HAO J P, YU Y L, XUE Q.A maintainability analysis visualization system and its development under the Auto-CAD environment[J].Journal of Materials Processing Technology, 2002,129:277-282.
[11]余代俊,耿留勇.三次參數樣條曲線在等高線矢量化中的化中的應用[J].測繪與空間地球信息,2007,60(6):153-155.
[12]關治.數值分析[M].北京:清華大學出版社,2006.