周燕芳
(廣州市城市規(guī)劃勘測設計研究院,廣東廣州 510060)
船體是復雜的不規(guī)則體,傳統(tǒng)的計算實體船體體積方法是先建立數(shù)學模型,再測出特征點、關鍵點后進行擬合。擬合后將船體沿三個互相垂直的方向切片,這樣三維復雜幾何體的幾何特性計算就轉化為一系列平面的幾何特性計算[1]。此方法與現(xiàn)代化的性能分析計算自動化、智能化、高精度的趨勢不相適應。
本文提出并設計了基于 NURBS[2](Non-Uniform Rational B-Spline,非均勻有理B樣條)的船體體積計算程序,能直接在三維空間下計算船體的體積。對已建造好的船體,利用三維激光掃描技術得到船體表面大量激光點云數(shù)據(jù)。經(jīng)過點云數(shù)據(jù)的預處理和分析,重構NURBS曲面來擬合表達船體表面,最終得到用來描述三維船體的互相銜接的 NURBS曲面數(shù)據(jù)。NURBS曲面數(shù)據(jù)可進行規(guī)則化格網(wǎng)輸出,根據(jù)曲面的特性輸出不同間隔的規(guī)則化格網(wǎng)。
基于NURBS曲面數(shù)據(jù)的船體體積計算程序關鍵算法有:
①船體NURBS曲面數(shù)據(jù)的三角剖分算法;
②船體曲面交線三角形的計算;
③船體曲面與任意高度的求交算法;
④封閉三維曲面體的體積計算。
AutoCAD具有強大的圖形交互功能,并且支持多種方式的二次開發(fā)。ObjectARX以C++為編程語言,采用先進的面向對象的編程原理,提供可與Auto-CAD直接交互的開發(fā)環(huán)境。同時包括一組動態(tài)鏈接庫(DLL),庫中包含一組通用工具,使得二次開發(fā)者可以充分利用AutoCAD的開放結構,直接訪問Auto-CAD數(shù)據(jù)庫結構、圖形系統(tǒng)以及CAD幾何造型核心,以便能在運行期間實時擴展AutoCAD的功能[3]?;贠bjectARX進行程序開發(fā),可以讓用戶有更加直觀的了解。
以Visual Studio.net 2005為編程環(huán)境,ObjectARX 2008為開發(fā)工具,程序采用非模態(tài)對話框方式,方便用戶進行圖形交互。對話框界面盡量做到界面簡潔、直觀,如圖1所示。
圖1 程序界面
曲面三角網(wǎng)格生成算法有很多,總的來說可以分為映射法和自動網(wǎng)格生成法兩類[4]。映射法[5]是在參數(shù)域上利用平面網(wǎng)格生成技術進行剖分,然后將參數(shù)域上的網(wǎng)格結點映射到實空間,并保持參數(shù)域上網(wǎng)格結點的連接關系,從而得到曲面的三角剖分。由于船體曲面是基于NURBS的參數(shù)曲面描述,所以采用映射法比較合適。
圖2 曲面數(shù)據(jù)的三角剖分
船體三維激光點云數(shù)據(jù)經(jīng)過預處理后是按規(guī)則化格網(wǎng)輸出的N×M的面片數(shù)據(jù),對每個規(guī)則化格網(wǎng)單元采用三角剖分分為兩個三角形。如圖2所示的點(C0,R0),點(C1,R0),點(C0,R1)和點(C1,R1)構成的格 網(wǎng) 分 成 三 角 形 D(C0,R0)D(C1,R1)D(C1,R0)和 三 角 形D(C0,R0)D(C0,R1)D(C1,R1)。定義三角形結構體,記錄三角形的3個頂點索引值,并計算三角形的法向量、重心坐標,用于判斷三棱錐體積疊加時的正負。
給定計算水線高度hgt,在計算高度附近的三角形會被分割。找出三角形的最大Z值maxz,最小Z值minz,以及Z值等于hgt的頂點的個數(shù)ZEqNum。任意高度水線hgt與三角形之間的關系有如下幾種情況(如圖3):
①hgt≤minz,不參與體積計算;
②hgt==maxz且ZEqNum==2,不參與體積計算,將此三角形作為交線三角形;
③hgt>maxz或者hgt==maxz且 ZEqNum==1,參與體積計算;
④minz<hgt<maxz,且三角形中只有一個點的Z值小于hgt,此三角形不參與體積計算,求出交線點坐標存儲于交線三角形中;
⑤minz<hgt<maxz,且三角形中有兩個點的坐標小于hgt,此三角形不參與體積計算,求出交線點坐標并將相交部分分割為兩個三角形作為交線三角形;
⑥ZEqNum==3,不參與體積計算。
圖3 任意高度水線與三角形的位置關系
在3.3節(jié)所求的交線三角形中,將兩個點的Z值均等于hgt的線段提取出來。根據(jù)線段的空間位置關系(兩線段首尾點的距離理論上為0,對個別曲面有交錯的情況可放寬連接條件)將所有線段連接成首尾相接的閉合曲線。然后利用CAD中多義線的getArea函數(shù)即可獲得閉合曲線所圍成的面積。對于如圖4所示的一閉合曲線包含于另一閉合曲線的特殊情況,被包含閉合曲線的面積應為負,包含閉合曲線的面積為正,任意兩個多邊形的關系可采用文獻[6]所述方法進行判斷。
圖4 多邊形位置關系
當確保所有三角形的法向量均朝外后,選擇任意的起算點(坐標原點或封閉區(qū)域的重心點等)與三角形構成三棱錐,船體的體積可以分為三部分計算:①位于交線下面的完整的三角形與起算點所構成的三棱錐的體積;②交線三角形與起算點所構成的三棱錐的體積;③交線所圍成的不規(guī)則閉合曲面與起算點所構成的不規(guī)則體的體積。計算時均需考慮三角形法向量與所選計算起點和三角形重心所構成的向量之間的方向余弦(圖5):若方向余弦為正,則三棱錐體積為正;若方向余弦為負,則三棱錐體積為負。
圖5 三角形方向余弦
用三維激光掃描的方法對某一封閉艙室進行掃描并得到其NURBS曲面數(shù)據(jù),對其進行三角剖分如圖6所示。三角形所有法向量均朝外,不需要進行修改。程序所算體積與傳統(tǒng)方法所算的體積如表1所示。由于掃描時艙室存在晃動,用NURBS曲線擬合出來的船體下部存在凹凸不平,因此底部計算的體積的相對誤差較其他高度大。但總的看來,兩者的差別不大,在允許誤差范圍之內(nèi)。
圖6 艙室三角剖分網(wǎng)圖
計算體積比較 表1
本文設計并實現(xiàn)了基于NURBS曲面數(shù)據(jù)的船體體積的計算程序,實現(xiàn)了船體體積計算的自動化與智能化。與傳統(tǒng)的先建立數(shù)學模型,再測出特征點、關鍵點后進行擬合計算的單點測量方法相比,在效率和技術上得到了更好的改進,提高了計量的準確性和可靠性,實現(xiàn)了幾何測量法體積計算的從低精度向高精度的發(fā)展。
[1]秦敬松.基于激光掃描點云數(shù)據(jù)的船體體積計算方法研究[D].武漢:武漢大學,2008.
[2]施法中.計算機輔助幾何設計與非均勻有理 B樣條[M].北京:高等教育出版社,2001:46~49.
[3]俞曉,苗放.基于ObjectARX的AutoCAD二維圖形可控精度外包多邊形的算法實現(xiàn)[J].成都理工大學學報,2008(10):559~562.
[4]徐松,王劍英.曲面的自適應三角網(wǎng)格剖分[J].計算機輔助設計與圖形學學報,2000,12(4):267~271.
[5]王小娜.基于映射法的散亂點三角網(wǎng)格劃分與拼接算法研究[D].秦皇島:燕山大學大學,2009.
[6]張全伙,曾曉帆,范慧琳等.任意兩個多邊形的求交算法[J].華僑大學學報,1995(1):111~115.