景乾峰,尹 勇,神和龍,王智洲
(大連海事大學,遼寧大連116026)
在船舶運動仿真、波浪載荷以及船舶配載等領域,船體型線數據扮演著關鍵角色。通過船體剖面數據能夠進行諸多船舶水動力的計算[1]。剖面數據一般源自船舶二維型線文件,該文件描述了對應肋位的剖面數據,如需更密集的數據則需要進行插值獲取,文獻[2]在求解船體濕表面網格時采取了插值加密的方式,文獻[3]在求解流場勢中也使用了該方法,但插值計算過程較為復雜且有一定的局限性,若能直接從船體模型獲取剖面數據則能避免這種局限性且簡化計算過程。利用船體三維模型切片計算已有諸多成果,文獻[4]提出一種利用水尺平面切割STL模型的方法進行船舶吃水轉換,文獻[5]利用幾何算法庫進行船體切片來計算船舶濕面積,因此在船體計算領域,快捷地獲取精確的船舶剖面數據是計算的關鍵點。本文提出一種船體三維模型切片數據處理平臺,結合3D打印中的核心技術[6],對船體STL模型進行切片處理,獲取精確的船舶剖面數據,而且不局限于方向和數量,對于船體計算等領域有較強的應用價值。
從平臺設計的通用性及有效性出發,本文設計的船體三維模型切片數據處理平臺包含4個模塊,如圖1所示。其中三維模型讀取模塊負責船體STL模型數據的讀取;切片處理模塊中能夠對船體STL模型進行任意方向、任意數量的切片操作;數據冗余剔除模塊能夠對切片得到的數據進行過濾,減少冗余的數據點;數據可視化模塊提供三維及二維切片數據的實時可視化功能。

圖1 平臺架構Fig.1 Platform suructure
船體三維模型切片數據處理平臺界面如圖2所示,主要包含三維顯示、二維顯示、切片控制3部分交互界面。

圖2 平臺交互界面Fig.2 Platform user interface
STL文件格式是一種三維模型中最通用的接口協議,本平臺主要針對STL格式的模型進行處理。STL文件又稱立體光造型文件,是三維實體模型經過三角化后得到的模型文件,其文件內容無序地列出了構成實體表面的所有三角形面片的信息。每個三角形由3個頂點坐標以及三角形平面的法矢量信息表示。STL文件分為ASCII和二進制2種格式,三維模型讀取模塊首先確定STL模型文件的格式,然后依據固定格式讀取并保存模型中的三角面片數據,船體模型及三角面片如圖3所示。

圖3 KVLCC2 船體 STL 模型Fig.3 STL model of KVLCC2
本文基于開源3D打印程序Slic3r[7]建立了一個STL模型切片接口類,利用該程序中的三角網格類Class TriangleMesh進行二次開發,實現了不同切片方向、不同切片數量的STL模型切片方法,并采取PIMPL模式對其進行封裝,封裝后的動態鏈接庫接口簡潔并與平臺其他模塊解耦,修改接口類方法對其他模塊無影響。切片模塊對外設計接口包含4項內容,分別是切片數量、切片軸、切片軸夾角、偏移量,切片將沿著切片軸方向進行,并按照指定的軸夾角和切片數量進行切片,通過交互界面可以輸入或選擇相應的數值進行操作。該模塊內部定義了錯誤切面的判斷標準,實現了切面的檢測功能,當切面檢測為錯誤時,利用輸入的偏移量對切片位置進行小幅度的偏移并在新切片位置上重新進行切片。切片操作具體流程如圖4所示。

圖4 切片流程圖Fig.4 Slice flowchart
讀取STL模型后根據設置的參數進行模型的旋轉,沿切片軸方向等分獲取切片位置,保存為切片位置列表,根據位置列表循環切片,檢測到錯誤切面時進行小幅度偏移,直到切面無錯誤為止,當切片位置遍歷完畢后結束接片,并發送切片完畢信息。以KVLCC2模型數據[8]為例,切片數據如圖5所示。

圖5 KVLCC2 船體切片數據Fig.5 Slice data of KVLCC2
平臺每執行一次切片操作就會保存相應的切片數據,為保證切片數據的結構清晰,本平臺根據切片參數和STL模型名稱對切片數據進行整理。對STL模型進行首次切片操作會生成以該模型名稱附加SD(Slice Data)的文件夾,每一次切片數據會以STL名稱+切片軸+軸夾角+切片數量+后綴SD為格式存儲,本平臺為切片數據制定了統一格式,并于接口類中實現了該格式切片數據的讀寫方法。
由于STL模型的復雜程度不同,其三角面片的數量不定,經過切片操作后的切面數據點可能過多且分布不均,不利用進一步計算,尤其在曲率變化較大的部位會產生大量冗余。因此為獲得高質量、低冗余的切面數據,本模塊實現了一種切面數據點的冗余濾除方法,該方法通過遍歷數據點間距來獲取間距的極值,根據該極值對數據點進行加密后再根據所需數據點數量進行二次提取以獲得去冗余的切面數據,圖6展示了5個不同部位的船舶橫向切片數據去冗余前后對比。

圖6 冗余濾除前后數據對比Fig.6 Redundant filtering comparison
本平臺為切片處理設計了數據可視化模塊,能夠直觀并迅速地展示切片結果,三維顯示將STL原始模型和切片數據在同一界面內展示,可用鼠標進行旋轉縮放觀察,二維顯示可對切片數據進行選擇顯示,根據所選的坐標軸向和切片序號展示相應的二維切片數據,該可視化模塊可以便捷地觀察切片數據,能夠直觀、即時地提供切片操作的驗證,增強了平臺的可靠性。
為進一步確保平臺所獲得的切片數據的準確性,本文選取橢球體模型和船舶模型進行數據驗證,建立了5個不同長寬比的四分之一橢球體STL模型,部分模型及切片數據示例如圖7所示,船舶模型采用KVLCC2。

圖7 部分橢球體模型及切片數據Fig.7 Ellipsoid model and slice data
由于橢球體形狀規則,通過式(1)計算能夠得到其體積

依此理論值為基礎,橢球體參數如表1所示。

表1 橢球體模型及切片數據Tab.1 Ellipsoid model and slice data
在固定坐標軸、軸夾角的情況下,采取不同的切片數量對橢球體模型進行切片,基于式(2),利用切片面積積分計算該橢球體的體積。

將數值計算與理論值進行對比,相對誤差如圖8所示。

圖8 體積相對誤差Fig.8 Relative error of volume
對KVLCC2船體模型進行不同數量的切片,基于切片數據計算船舶排水體積并于實際值比較,結果如表2所示。

表2 KVLCC2模型排水體積對比Tab.2 Volumecalculated comparison
經本平臺切片數據計算所得的模型體積與理論值符合度較高,最大相對誤差為0.129%,隨著切片數量的增加,體積的計算精度有所提高并逐漸趨于穩定,因此在適當的切片數量和冗余參數下,既可以保證切片數據的精度又可以盡可能減少數據量,本平臺為選取這樣適當的參數提供了十分便利的條件。
本文實現了船體三維模型切片數據處理平臺,該平臺主要包含讀取不同格式的STL模型、進行任意方向和數量的切片、濾除切片數據的冗余、讀寫固定格式的切片數據和數據的可視化4項功能,通過實際算例驗證,船體切片所得數據準確,冗余去除算法有效地減少了數據量,切片數據讀寫為后續研究工作提供了便利條件。在獲取船舶剖面數據方面,能夠有效地降低從船舶型值文件中插值計算的工作量,減少人為干擾帶來的誤差,該平臺能夠較好地應用于船舶運動仿真、波浪載荷計算以及船舶配載計算等領域。