999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

利用VTK實現幾何模型的三維建模

2015-06-28 14:52:41陳小艷李柏林
鐵路計算機應用 2015年7期
關鍵詞:鋼結構可視化橋梁

陳小艷,王 強,2,李柏林

(1.西南交通大學 機械工程學院,成都 610031;2. 成都工業學院 機械系,成都 610031)

利用VTK實現幾何模型的三維建模

陳小艷1,王 強1,2,李柏林1

(1.西南交通大學 機械工程學院,成都 610031;2. 成都工業學院 機械系,成都 610031)

針對鋼結構橋梁的三維可視化問題,提出利用VTK的三維建模功能,同時利用C#語言實現了鋼結構橋梁的節點單元數據的三維可視化。研究VTK的數據表達方式,實現模型的拉伸、旋轉等建模;結合四元數法,實現模型的旋轉幾何變換。實驗結果表明,通過VTK實現鋼結構橋梁節點單元數據三維建模是可行的;該可視化平臺具有很好的可移植性和擴展性,并且可以方便的依靠底層數據對模型進行有限元分析等開發工作。

三維可視化; VTK;三維建模; C#語言;四元數

在傳統工程行業如機械、土木、電氣等方面,二維圖紙的表達已經不能滿足現在工程的需要,目前,大部分企業都有自己的三維可視化部門,以解決二維圖紙帶來的缺陷和不足[1]。三維可視化是其它功能如分析、仿真等功能的實現基礎。目前,國內外實現三維可視化的技術主要包括以下幾種方法。

(1)直接在現有三維軟件上進行建模,如CATIA、UG、PRO/E等;或者以這些軟件為基礎進行二次開發來實現專用需求。采用這種方法能夠方便的實現三維可視化,這種方式目前應用比較廣泛。設計人員不必關心圖形可視化的內部實現算法,可以把更多的精力集中在設計上。但是這些模型只能依附于各自的軟件系統來展示模型,由于模型格式解讀比較困難,如果想將三維模型嵌入用戶自己的軟件系統中實現別的相關的需求是非常難于實現的。

(2)在現有的三維引擎上進行開發,比如Open-GL。這種方法能夠實現各種三維模型的可視化顯示,而且與平臺無關,可以在任何軟件系統中實現三維可視化。這類方法由于開發工作量比較大,對于開發人員的專業要求比較高,在實際應用中也比較難實現。

本文采用一種C#語言和VTK結合進行開發的方法,實現了鋼結構橋梁的三維可視化顯示。由于C#語言是完全面向對象的,使用起來非常方便。在開發過程中不用擔心內存管理,系統穩定性較好。VTK是在OpenGL的基礎上建立的一套函數庫,以其強大的三維可視化功能及易用性而受到歡迎。由于開發環境的便利性,使得開發的效率得到了提高。

1 VTK簡介

VTK(Visualization Toolkit)是由William J. Schmeder, Kenneth M.Martin, William E. Iorensen三人于1993年開發,利用面向對象的技術設計和實現的三維可視化工具箱[2]。最早主要用于醫學圖像可視化。目前除了在醫學可視化上的廣泛應用外,也加入了幾何圖形的三維建模功能。著名的分析軟件MIDAS就是基于VTK開發實現的。然而,國內卻很少有人知道VTK的三維建模功能。導致很多應用不得不買國外的軟件來實現。VTK包含了三維計算機圖形學、圖像處理和可視化3部分功能。其中封裝了目前許多優秀的三維可視化算法,可以方便的實現數據的三維可視化[3]。

VTK建立在OpenGL基礎之上,與平臺無關。它不僅支持對幾何的顯示及渲染,同時支持多種圖形算法(光柵圖形生成算法,消隱算法等)、可視化算法(矢量,標量,張量) 及高級的建模技術(快速建模,多邊形優化,Delanay 三角面片生成法)。而且,VTK 的開發者組織了一個有效的論壇及新聞組,通過這種平臺,VTK 的使用者之間可以方便地進行交流與合作[4]。

可視化模式由數據對象和處理對象組成。在VTK中,主要有5種數據集類型:結構化點集(Structured Points)、線性網格(VTKRectilinear Grid)、結構化網格(Stucturedd Grid)、非結構化網格(Unstructured Grid)以及多邊形數據(Polygonal Data)[5]。處理對象主要包括數據源對象、過濾器以及映射器。VTK的可視化過程是基于管線流的設計模式。將要處理的數據作為流動介質在管線中流動,不同的階段對數據有不同的處理方式[6]。 VTK的可視化流程如圖1所示。

圖1 VTK可視化流程

可視化模型主要對數據進行處理,生成可被繪制的集合體,而圖形模型主要對生成的幾何體進行繪制。有了可視化管線,VTK的可視化過程就可以用數據在可視化管線流動的過程來描述。

在C#語言中使用VTK是使用基于VTK的.net封裝包.net Wrappers for VTK。這是一個開源的軟件包,可以在VTK的網站上直接下載來使用。基于C#語言的VTK開發效率要比基于C++語言的VTK開發效率高很多,主要表現在以下幾個方面:

(1)由于Form編程代替了MFC的界面編程,界面設計只需要使用相應的控件,使得更方便的搭建應用程序框架;

(2)由于C#語言的垃圾回收機制,使得進行對象生成和銷毀管理更加方便;

(3)VTK的.net 封裝使得VTK的引用更加方便,只需要使“using vtk”,就完成了在C++語言中的所有頭文件的引用;

(4)由于采用的C# Form編程,使得窗口消息的獲取更加方便;

(5)C#語言是完全面向對象的,使得對程序的設計實現和管理更加方便。

2 基于VTK的三維可視化平臺設計

2.1 可視化平臺數據存儲和管理

幾何模型是由點、線、面和體組成。其中,點是組成所有幾何模型的基礎。因此,所有數據存儲的基礎都是基于點的存儲。在本可視化系統中,點的數據存儲采用C#語言的字典類(directory(TKey,TValue))來實現。Dictionary(TKey,TValue)類在內部是作為一個哈希表來實現的,它提供了從一組鍵到一組值的映射,通過鍵來檢索值的速度是非常快的。因此,可以方便的實現點的操作如添加、刪除、修改等。TKey表示點的ID,TValue表示點的3D坐標。在實際應用中添加點用如下代碼所示:

//聲明一個點存儲字典

Dictionary〈int, Point3D> pointList =

new Dictionary〈int, Point3D>();

//聲明一個3D點變量

Point3D pointCoor = new Point3D();

//對點進行坐標賦值

pointCoor.x = x;

pointCoor.y = y;

pointCoor.z = z;

//將點添加到字典中

pointList.Add(pointID, pointCoor);

有了點的存儲基礎,線和面以及體的存儲就比較方便,其存儲方式都采用字典類來實現。其中,線的存儲采用與點關聯的方式,面的存儲采用與線關聯,體的存儲采用與面關聯。在字典中存儲線的格式Directory(lineID,List〈pointID>),存儲面的格式Directory(faceID,List〈lineID>),存儲體的格式Directory(bodyID,List〈faceID>)。

對于點、線、面以及體的操作主要包括添加、刪除和修改等。(1)對體的操作,由于體處在最頂層,如果添加一個體,根據構成體的對應面直接生成;如果刪除體,則直接刪除體而保留對應的面數據。如果修改體,則根據對應的面數據重新生成體。(2)對于其他3類數據點、線和面的操作,由于每一類的操作都關聯了另一類數據,如果是添加操作,因為添加不與已經存在的數據相關聯,則直接生成新的數據;如果是刪除或修改,則提示用戶是否保留其下一層數據。如果刪除線,則提示用戶相關聯的面和體數據是否保留。

2.2 可視化平臺的三維模型生成

三維建模方法總結起來主要有以下幾類:拉伸、旋轉、掃描以及螺旋掃描等。幾乎所有三維模型都是由這些基本的命令組合生成。拉伸是指一個二維截面圖形沿著指定方向運動生成實體;旋轉是指二維截面沿著指定軸旋轉生成實體;掃描指截面沿著指定路徑運動生成實體;螺旋掃描指截面沿著指定路徑運動的同時繞指定軸旋轉而生成的實體。

在實際建模中,根據實體特征構建二維截面,然后根據特征類型選擇不同的三維生成方法。比如拉伸特征的創建:(1)在字典類中查詢構成二維截面的線ID;(2)根據線ID查詢點的ID;(3)得到點的坐標。根據點的坐標依次連接成二維截面。同時,根據點坐標計算拉伸方向,拉伸方向為二維截面的法線方向。在創建拉伸特征的時候,有兩個問題需要解決:點的連接順序,拉伸方向的計算。在本系統中,結合鋼結構橋梁可視化的特點:根據用戶輸入的點和單元,可視化桿系單元,定義桿系單元的截面類型,根據截面類型來確定點的連接順序。截面的拉伸方向為法向,法向計算根據點坐標來完成。

設:A(x1, y1, z1),B(x2, y2, z2),C(x3, y3, z3)是平面上的3個點,這3個點可以形成3個向量。

AB(x2-x1, y2-y1, z2-z1),

AC(x3-x1, y3-y1, z3-z1),

BC(x3-x2, y3-y2, z3-z2),

取向量AB和BC做叉積AB?BC,利用三階行列式,寫成:

計算行列式即解出平面法向量的坐標,其方向滿足右手螺旋法則。圖2是生成的工字鋼的拉伸三維模型。關鍵代碼如下:

//構建二維截面數據

vtkPolyData pPolyData = new vtkPolyData()

pPolyData.SetPoints(pPoints);

//創建拉伸

vtkLinearExtrusionFilter extrude = new

vtkLinear-ExtrusionFilter();

//設置拉伸截面

extrude.SetInput(pPolyData);

//設置拉伸長度

extrude.SetScaleFactor(iDis);

//設置拉伸方向

extrude.SetVector(direcX,direcY,direcZ);

圖2 拉伸成型的工字鋼三維模型

2.3 模型三維幾何變換

幾何變換主要包括平移、旋轉等操作。對于相同的模型,不需要進行重復建模,只需要將模型平移或旋轉到相應的位置即可。平移操作只需要進行坐標平移操作,相對比較簡單,這里不再詳述。三維空間的旋轉變換可采用歐拉角、幾何旋轉矩陣或者四元數等方法。歐拉角存在萬向節死鎖,即當3個萬向節其中兩個軸發生重合時,會失去一個自由度,而采用旋轉矩陣需要大量的乘法運算。因此,本文采用四元數法實現模型的任意方向旋轉,四元數(Quaternions)是由愛爾蘭數學家威廉?盧云?哈密頓 (William Rowan Hamilton)在1843年發明的數學概念。四元數的乘法不符合交換律,它是最簡單的超復數,非零四元數的乘法群在R3的實部為零的部分上的共軛作用可以實現轉動。單位四元數(絕對值為1的四元數)若實部為cos(t),它的共軛作用是一個角度為2t的轉動,轉軸為虛部的方向[7~10]。四元數的優點是:

(1)表達式無奇點(和例如歐拉角之類的表示相比);

(2)比矩陣更簡煉,也更快速;

(3)單位四元數的對可以表示四維空間中的一個轉動。

設空間任意向量A(xa, ya, za)與一旋轉角度θ,如圖3所示:

圖3 四元數旋轉示意圖

將之轉換為四元數:

對于三維空間的任意軸旋轉,假設有一向量P(x, y, z),對一單位四元數q做旋轉,將P視為無標量的四元數Xi+Yj+Zk,則向量的旋轉經證明如下:Rot(P)=qpq-1。為了計算方便,用矩陣的方式來表示四元數的乘法,假設四元數表示如下:q=[w, x, y, z]=[s,v],其中s=w是標量部分,v=(x, y, z)是矢量部分。兩個四元數相乘的矩陣表示法如下:

令 q=[s,v]=[cosθ, u?sinθ]其中u為單位向量,則可以證明q?q'?q-1會讓q'繞著u軸旋轉2θ,此即為四元數的旋轉公式。根據四元數的矩陣乘法和旋轉,將旋轉公式用以下矩陣的乘法來表示:

也就是說如果要讓任意向量(x', y', z') (w'為0)對某個單位向量軸u(x, y, z)旋轉角度2θ,則w=cosθ,代入以上的矩陣乘法,即可得旋轉后的(x'', y'', z''),為了方便,轉換矩陣的最下列與最右行可以省略不寫。利用上式變換矩陣。即可實現三維模型的任意方向的旋轉變換。

3 三維可視化實例

如圖4是采用VTK和C#語言結合開發的鋼結構橋梁的三維可視化平臺。通過數據導入將橋梁結構的點數據和單元數據導入系統,定義單元的截面形狀,最后通過VTK的三維建模功能以及四元數法實現模型的幾何變換后實現的整個鋼結構橋梁的三維可視化顯示結果。圖中定義的截面形狀為工字型截面。點數據共有577個,單元數據共有937個。鋼結構橋梁的三維可視平臺如圖4所示。圖4(a)是節點和單元的桿系結構可視化;圖4(b)是將單元進行三維渲染的結構;圖4(c)是定義單元的截面形狀;圖4(d)是圖4(b)三維可視化的局部放大圖。實驗表明,通過VTK實現三維建模是可行的。

4 結束語

VTK作為一種可視化工具包,主要用于醫學圖像的三維重建。本文利用VTK和C#語言開發工具,提出了在VTK中進行幾何實體的三維建模方法。采用C#語言的directory類進行數據存儲和管理;對于大數據量的幾何變換操作,利用四元數法的旋轉,減少了模型在任意方向旋轉的時間。實驗證明,采用VTK和C#語言結合的方式,可以方便快速地實現幾何模型的三維建模,開發效率較高,并且不受系統限制,可以在用戶自己的平臺上實現三維建模。在實際工程應用中具有較強的應用價值。

圖4 鋼結構橋梁的三維可視化平臺

[1]張祖勛,鄭順義,張劍清.三維可視化工程設計的研究[J].武漢大學學報:信息科學版,2002,27(4):337-342.

[2]A.C.Pavao. E.V.S.Pouzada, M.A.Mathias. Electromagnetic field visualization through vtk software[C]. Microwave and Optoelectronics Conference, 2001. IMOC 2001, Belem, Brazi, Proceedings of the 2001 SBMO/IEEE MTT-S International, 2001,21-24.

[3]王延華,洪 飛,吳恩華. 基于VTK庫的醫學圖像處理子系統設計和實現[J].計算機工程與應用,2003,39(8):205-207.

[4]Cline H, Lorensen Wetal. Two algorithm for three-Dimensional reconstruction of tomograms[J]. Medical Physics,1988,15(3): 320.

[5]William J. Schroeder, Lisa S. Avila, Kenneth M. Martin. The visualization toolkit user's guide[M].GE Corporate Research & Development,2001: 89-117.

[6]Arjan J.F. Kok, Robert van Liere. A multimodal virtual reality interface for 3D interaction with vtk[J]. Knowledge and Information Systems, 2007(13): 197-219.

[7]王 勇,馬立元,王忠強.四元數法在計算機圖形中的應用[J].軍械工程學院學報,2001,13(2):48-51.

[8]劉俊峰.三維轉動的四元數表述[J]. 大學物理,2004,23(4):39-43.

[9]Pletinckx D. Quaternion calculus as a basic tool in computer graphics[J]. The Visual Computer,1989, 5 (1) : 2-13 .

[10]劉愛東,黃 彬,盧中武.基于四元數的坐標旋轉與插值方法研究[J]. 計算機與現代化,2012,27(2):44-47.

責任編輯 徐侃春

3-D modeling for geometric model through VTK

CHEN Xiaoyan1, WANG Qiang1,2, LI Bailin1
( 1.School of Mechanical Engineering, Southwest Jiaotong University, Chengdu 610031, China; 2. Department of Mechanics, Chengdu Technological University, Chengdu 610031, China )

A 3-D modeling method, taken advantage of VTK, combined with C#, was proposed to solve the 3-D visualizing problem of steel structure bridges. Data expression of VTK was researched, geometric transformations of model such as stretching, rotation were implemented through VTK and quaternion algorithm. Experiment showed it was practical to implement 3-D model building via VTK. In addition, the visualization platform was with portability and expansibility, fi nite analysis for model was available with underlying data.

3-D visualization; VTK(visualized toolkit); 3-D modeling; C#; quaternion

U242.5∶TP39

A

1005-8451(2015)07-0007-05

2014-12-01

四川省科技支撐計劃(2013GZ0032)。

陳小艷,在讀碩士研究生;王 強,在讀博士研究生。

猜你喜歡
鋼結構可視化橋梁
基于CiteSpace的足三里穴研究可視化分析
頂推滑移法在鋼結構橋梁施工中的應用
鋼結構防火設計規范及要點探討
首件鋼結構構件確認機制在鋼結構施工中的應用
山東冶金(2022年1期)2022-04-19 13:40:48
基于Power BI的油田注水運行動態分析與可視化展示
云南化工(2021年8期)2021-12-21 06:37:54
基于CGAL和OpenGL的海底地形三維可視化
“融評”:黨媒評論的可視化創新
傳媒評論(2019年4期)2019-07-13 05:49:14
手拉手 共搭愛的橋梁
句子也需要橋梁
高性能砼在橋梁中的應用
主站蜘蛛池模板: 57pao国产成视频免费播放| 亚洲精品视频网| 国产视频大全| 久久亚洲日本不卡一区二区| 国产欧美中文字幕| 国产在线高清一级毛片| 久久黄色免费电影| 日韩a级毛片| 99爱在线| 大学生久久香蕉国产线观看 | 日韩a在线观看免费观看| 久久婷婷六月| 狠狠干欧美| 久久99精品久久久久纯品| 欧美日韩国产在线人| 国产毛片一区| 在线另类稀缺国产呦| 亚洲美女一区| 农村乱人伦一区二区| 成人国产精品视频频| 亚洲综合欧美在线一区在线播放| 国产午夜福利片在线观看| 亚洲一区二区在线无码 | 国产麻豆精品手机在线观看| 欧美精品一区在线看| 欧美日韩第三页| a级毛片在线免费| 婷婷在线网站| 波多野结衣一区二区三区88| 性欧美在线| 亚洲天堂首页| 无码电影在线观看| 亚洲,国产,日韩,综合一区| 日韩无码精品人妻| 国产成人一区免费观看| 欧美精品导航| 一级看片免费视频| 亚洲日韩久久综合中文字幕| 日本不卡免费高清视频| 亚洲天堂免费| 免费在线成人网| 精品色综合| 午夜福利在线观看成人| 国产女人在线| 亚洲天堂视频在线观看免费| 国产午夜不卡| 国产精品毛片一区视频播| 无码专区国产精品一区| 91黄视频在线观看| 国产成熟女人性满足视频| 欧美精品1区| 久久国产高清视频| 亚洲精品在线影院| 欧美一区日韩一区中文字幕页| 欧美一级大片在线观看| av性天堂网| 99视频精品在线观看| 欧美日韩国产在线观看一区二区三区| 久久精品中文无码资源站| 丁香婷婷激情综合激情| 日韩天堂视频| 亚洲综合色婷婷中文字幕| 亚洲天堂久久新| 小说 亚洲 无码 精品| 国产成人亚洲综合a∨婷婷| 国产精品久久国产精麻豆99网站| 国产噜噜噜视频在线观看 | 国产精品永久在线| 麻豆精品视频在线原创| 欧美在线一二区| 欧美.成人.综合在线| 美女免费黄网站| 午夜欧美理论2019理论| 91视频首页| 日韩欧美一区在线观看| 999精品视频在线| 久久福利网| 在线观看无码av免费不卡网站| 日韩欧美91| 久久人人妻人人爽人人卡片av| 久久婷婷六月| 国产美女91视频|