freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于vtk的有限元網(wǎng)格可視化研究及軟件設(shè)計(jì)畢業(yè)設(shè)計(jì)-閱讀頁

2025-07-07 02:05本頁面
  

【正文】 點(diǎn)編號(hào)m_idNode[0]=id1。} int* GetIdNode(){return m_idNode。}//設(shè)置單元材料號(hào) int GetIdMeterial(){return m_idMeterial。//記錄單元個(gè)數(shù) int m_idElement。//節(jié)點(diǎn)編號(hào) int m_idMeterial。//單元顏色}。它們是ElementLine這個(gè)類的三個(gè)主要數(shù)據(jù)成員。在公有成員函數(shù)中,設(shè)計(jì)了兩個(gè)重載函數(shù)來為一個(gè)線單元對(duì)象設(shè)置節(jié)點(diǎn)編號(hào)。函數(shù)int* GetIdNode()用來獲取節(jié)點(diǎn)編號(hào)數(shù)組的指針。三角形單元類ElementTriangle的結(jié)構(gòu)和ElementLine的結(jié)構(gòu)類似,僅僅是單元編號(hào)個(gè)數(shù)由兩個(gè)變?yōu)槿齻€(gè),設(shè)置與獲取節(jié)點(diǎn)編號(hào)的函數(shù)相應(yīng)變化。在VTK的管道流中,可視化對(duì)象通過映射器映射成為圖形對(duì)象再由計(jì)算機(jī)硬件進(jìn)行繪制,而可視化數(shù)據(jù)本身是有層次(維度)分別的。因而通常的做法是先由點(diǎn)連線,由線組成面,最后再由面來圍成一個(gè)空間實(shí)體。這樣的做法并不是最優(yōu)的,因?yàn)樗嬖趯?duì)于某些表面的重復(fù)構(gòu)造,當(dāng)網(wǎng)格數(shù)據(jù)龐大的時(shí)候,代碼的執(zhí)行效率是很低的。本課題的程序設(shè)計(jì)采用了這一種方法:線單元由兩個(gè)點(diǎn)來唯一確定;平面三角形單元由三個(gè)點(diǎn)來唯一的構(gòu)成;四面體單元?jiǎng)t是由四個(gè)三角形表面圍成,每一個(gè)三角形表面可以看做構(gòu)成空間四面體的基本單元,稱為一個(gè)元組(Tuple),它由三個(gè)節(jié)點(diǎn)來唯一構(gòu)成;六面體單元由6個(gè)四邊形面(Tuple)構(gòu)成,每個(gè)四邊形僅包含8個(gè)節(jié)點(diǎn)中的4個(gè),并不是每個(gè)節(jié)點(diǎn)間都是有(直線)聯(lián)系的,因而對(duì)于六面體單元來說,僅僅知道8個(gè)節(jié)點(diǎn)的編號(hào)是不夠的,還需要知道它每個(gè)面包含了哪些節(jié)點(diǎn)——即元組的構(gòu)成,才能按照上述思路來構(gòu)建;最后,對(duì)于五面體單元的情形就復(fù)雜一些,可將它看成由2個(gè)三角形面和3個(gè)四邊形面圍成的空間實(shí)體單元。以四面體單元類ElementVolume_Tet為例,其頭文件中除了有類似ElementLine中的基本成員外,還增加了如下對(duì)于元組(Tuple)描述的代碼://pragma onceclass ElementVolume_Tet{public:…//其余成員略 int** GetSurfaceWithNode()。//設(shè)置各表面對(duì)應(yīng)的節(jié)點(diǎn)編號(hào)private:…//其余數(shù)據(jù)成員略 int m_surface[4][3]。//該指針數(shù)組用于提取m_surface[4][3]的行}。指針數(shù)組p[4]用來提取m_surface[4][3]的行。各指針的地址值通過函數(shù)int** GetSurfaceWithNode()由數(shù)組p返回,這樣也就獲得了元組及其相應(yīng)節(jié)點(diǎn)的地址信息,通過對(duì)地址的訪問也就可以獲得元組節(jié)點(diǎn)編號(hào)的信息。因此,對(duì)應(yīng)的,在構(gòu)造函數(shù)、復(fù)制構(gòu)造函數(shù)、設(shè)置節(jié)點(diǎn)編號(hào)的各個(gè)重載函數(shù)中均需要對(duì)函數(shù)SetSurfaceWithNode()進(jìn)行調(diào)用,而類的對(duì)象則是不需要調(diào)用它來設(shè)置元組信息的,故將函數(shù)SetSurfaceWithNode()設(shè)計(jì)為四面體單元類ElementVolume_Tet的保護(hù)成員,適當(dāng)?shù)胤庋b起來。而對(duì)于五面體單元,由于其包含兩種類型的表面,因而在ElementVolume_Wedge中將其元組信息分別存放在數(shù)組m_surface1[2][3]和m_surface2[3][4]中,用數(shù)組指針*p[5]來提取m_surface1和m_surface1的各行。ElementVolume_Hex、ElementVolume_Wedge的其余成員與ElementVolume_Tet類似。節(jié)點(diǎn)數(shù)據(jù)是離散點(diǎn)集的繪制和各種單元類型的繪制必須讀入的,它是整個(gè)有限元網(wǎng)格的基礎(chǔ),也是VTK中幾何屬性的重要表達(dá);二維Delaunay邊界點(diǎn)數(shù)據(jù)在二維約束Delaunay剖分中用來確定網(wǎng)格區(qū)域的邊界,在進(jìn)行二維約束Delaunay剖分時(shí)讀入;節(jié)點(diǎn)位移數(shù)據(jù)可反映網(wǎng)格的變形,在需要繪制網(wǎng)格的變形圖時(shí)讀入;各種單元數(shù)據(jù)則在進(jìn)行相應(yīng)的單元類型的繪制顯示時(shí)讀入,這些單元類型包括:線單元、三角形單元、四面體單元、五面體單元、六面體單元。flag0控制讀入的單元類型(節(jié)點(diǎn)數(shù)據(jù)必讀)以及進(jìn)行何種繪制。flag_del控制Delaunay三角剖分的類型:當(dāng)flag_del=0是,僅讀入離散點(diǎn)集數(shù)據(jù)(節(jié)點(diǎn))進(jìn)行離散點(diǎn)集的Delaunay三角剖分,剖分結(jié)果為Delaunay三角形網(wǎng)格的單連通凸區(qū)域;當(dāng)flag_del=1時(shí),進(jìn)行約束邊界的Delaunay三角剖分,此時(shí)除了讀入節(jié)點(diǎn)數(shù)據(jù)外,還需要讀入邊界點(diǎn)數(shù)據(jù)。但在flag_del=1時(shí)仍然將非邊界節(jié)點(diǎn)數(shù)據(jù)讀入了進(jìn)來。由于有限元模型的復(fù)雜程度不同,網(wǎng)格劃分的方式也會(huì)隨之而不同;即便對(duì)于同樣的模型,不同的計(jì)算要求下網(wǎng)格劃分的精度、單元類型的選擇也可能會(huì)不一樣,節(jié)點(diǎn)個(gè)數(shù)、單元個(gè)數(shù)以及單元類型可能就存在很大的差別。這樣,也就不能像通常所做的那樣,定義一個(gè)常規(guī)的數(shù)組或類對(duì)象數(shù)組來接收數(shù)據(jù),因?yàn)閿?shù)組的大小無法在定義時(shí)給出。 節(jié)點(diǎn)編號(hào)與坐標(biāo)的讀入以讀入離散點(diǎn)集為例,說明打開節(jié)點(diǎn)數(shù)據(jù)文件讀入數(shù)據(jù)的方法。fp0,””,”rt”)。 err1=NULL。 errb=NULL。 exit(1)。若打開文件失敗,則彈出錯(cuò)誤信息。對(duì)于一個(gè)文本文件,它的行數(shù)是確定的。為此,特意通過動(dòng)態(tài)數(shù)組類Array創(chuàng)建動(dòng)態(tài)數(shù)組來保存節(jié)點(diǎn)數(shù)據(jù),以這樣的方法來動(dòng)態(tài)調(diào)整數(shù)組的大小,適應(yīng)不同節(jié)點(diǎn)數(shù)據(jù)的需要。通過動(dòng)態(tài)數(shù)組類Array,定義三種類型的動(dòng)態(tài)數(shù)組如下:Arrayint data_id。 //一維動(dòng)態(tài)數(shù)組,臨時(shí)存放節(jié)點(diǎn)坐標(biāo)ArrayNode3D node。()。于是,讀入節(jié)點(diǎn)的方法可以通過下面的方式來實(shí)現(xiàn)://從文件中讀入節(jié)點(diǎn)數(shù)據(jù) ifstream fin0(fp0)。!feof(fp0)。 (i+1,data_id)。 fin0data_id[i]data_ad[k3]data_ad[k2]data_ad[k1]。 int n=()。//重置節(jié)點(diǎn)個(gè)數(shù),Node3D的構(gòu)造函數(shù)將會(huì)被調(diào)用 for (int i=0,k=0。i++){//為每個(gè)節(jié)點(diǎn)對(duì)象設(shè)置編號(hào)和坐標(biāo)屬性 k=(i+1)*3。 node[i].SetXNode(data_ad[k3])。 node[i].SetZNode(data_ad[k1])。在程序中將節(jié)點(diǎn)的編號(hào)和坐標(biāo)臨時(shí)保存在數(shù)組data_id和data_ad中。之后,(n)的方式將node的大小重置為節(jié)點(diǎn)個(gè)數(shù)。節(jié)點(diǎn)的讀入操作就完成了。動(dòng)態(tài)數(shù)組類中有一種重要的使用方法,就是通過resize()函數(shù)重置數(shù)組的大小,(n)。這樣,當(dāng)數(shù)據(jù)龐大時(shí),不斷的復(fù)制過程必然增大內(nèi)存開銷,降低程序的執(zhí)行效率。 二維Delaunay邊界點(diǎn)的讀入當(dāng)flag0=6時(shí),讀入Delaunay三角剖分?jǐn)?shù)據(jù)。再次說明:非邊界節(jié)點(diǎn)數(shù)據(jù)并為參與Delaunay三角剖分(),但本課題程序中仍然讀入了非邊界節(jié)點(diǎn)數(shù)據(jù)。讀入邊界點(diǎn)的程序代碼如下:if(flag0==6){//Delaunay三角剖分?jǐn)?shù)據(jù) if(flag_del==0) {//散點(diǎn)集Delaunay三角剖分?jǐn)?shù)據(jù) err0=fopen_s(amp。 fp1=NULL。fpb=NULL。 if(err0!=NULL){ AfxMessageBox(Cannot open the Specified Files!\n)。 } } if(flag_del==1) {//約束Delaunay三角剖分?jǐn)?shù)據(jù) err0=fopen_s(amp。 errb=fopen_s(amp。 } fp1=NULL。 if(err0!=NULL||errb!=NULL){ AfxMessageBox(Cannot open the Specified Files!\n)。 } }////若進(jìn)行約束Delaunay劃分,則讀取邊界約束點(diǎn)數(shù)據(jù)if ((flag0==6amp。flag_del==1)||(flag0==7amp。flag_del==1)){ ifstream fin(fpb)。//讀入邊界數(shù)目 (numbj)。inumbj。//讀入每個(gè)邊界包含的邊界點(diǎn)數(shù)目 for (int i=0,k=0。i++){//讀入邊界點(diǎn) k=(i+1)*3。 (k,datab)。}fclose(fpb)。//邊界點(diǎn)總數(shù),.(numb,nodeb)。inumb。 nodeb[i].SetIdNode(datab_id[i]+n)。 nodeb[i].SetYNode(datab[k2])。 } }有一個(gè)細(xì)節(jié)需要注意:在讀入邊界點(diǎn)后,Node3D類的成員變量count的計(jì)數(shù)為節(jié)點(diǎn)總數(shù)與邊界點(diǎn)總數(shù)之和。當(dāng)flag_uvw=1時(shí),讀入節(jié)點(diǎn)位移數(shù)據(jù),讀入方式與節(jié)點(diǎn)數(shù)據(jù)的讀入類似。//若需繪制變形圖,則讀入節(jié)點(diǎn)位移數(shù)據(jù)if(flag_uvw==1){//節(jié)點(diǎn)位移數(shù)據(jù) erru=fopen_s(amp。 if(erru!=NULL){ printf_s(Cannot open the Specified Files!\n)。 } ifstream fin1(fpu)。!feof(fpu)。 (i+1,data_idu)。 fin1data_idu[i]data_uvw[k3]data_uvw[k2]data_uvw[k1]。 int n=()。in。     node[i].SetNode_u(data_uvw[k3])。 node[i].SetNode_w(data_uvw[k1])。//設(shè)置位移放大系數(shù) }}程序在讀入位移數(shù)據(jù)后、為節(jié)點(diǎn)分配位移分量之前,進(jìn)行了一個(gè)條件判斷:if (n==Node3D::GetCount()numb),以比較位矢的數(shù)目與節(jié)點(diǎn)的數(shù)目是否相等。 單元編號(hào)及頂點(diǎn)的讀入在文本文件中,單元數(shù)據(jù)是一個(gè)n行的數(shù)表,例如四面體單元的組織形式為:1 1 2 3 4 12 2 3 4 5 13 2 4 5 6 1……其中,每一行代表一個(gè)單元:第一列是單元編號(hào),最后一列是單元材料號(hào),中間幾列則是單元的頂點(diǎn)號(hào)。另外,如果繪制的有限元網(wǎng)格模型對(duì)象很多時(shí)不便區(qū)分,也可以將不同的顏色屬性值賦予材料,以此來顯示模型便于觀察。fp0,rt)。fp1,rt)。errb=NULL。 exit(1)。!feof(fp1)。 (k,data1)。data1[k6],amp。data1[k4],amp。data1[k2],amp。 }fclose(fp1)。//單元總數(shù) (n,elementtet)。in。 elementtet[i].SetIdNode(data1[k+1],data1[k+2],data1[k+3],data1[k+4])。 k+=6?!獙?duì)象工廠設(shè)計(jì)模式,它是規(guī)范VTK代碼的一個(gè)基本標(biāo)準(zhǔn),也是VTK中有別于C++的一種創(chuàng)建并初始化對(duì)象最基本手段。這些單元及網(wǎng)格類型包括:線單元、平面三角形單元、空間四面體單元、空間五面體單元、空間六面體單元、平面散點(diǎn)集的Delaunay三角網(wǎng)以及有約束邊界的平面Delaunay三角網(wǎng)。 VTK基本數(shù)據(jù)的表達(dá) 可視化數(shù)據(jù)的特點(diǎn)可視化數(shù)據(jù)一般具有以下三個(gè)特點(diǎn):1) 離散性:為了讓計(jì)算機(jī)能夠獲取、處理和分析數(shù)據(jù),必須對(duì)無限、連續(xù)的空間體進(jìn)行采樣,生成有限的采樣數(shù)據(jù)點(diǎn),這些數(shù)據(jù)點(diǎn)以離散的形式儲(chǔ)存,采樣的過程就是一個(gè)離散化的過程。2) 結(jié)構(gòu)性:可視化數(shù)據(jù)具有規(guī)則的或不規(guī)則的數(shù)據(jù)結(jié)構(gòu)。3) 空間性:可視化數(shù)據(jù)可以具有零維、一維、二維、三維等任意的空間拓?fù)渚S度。零維的數(shù)據(jù)表現(xiàn)為點(diǎn),一維的數(shù)據(jù)表現(xiàn)為線,二維數(shù)據(jù)表現(xiàn)為面,而三維數(shù)據(jù)則表現(xiàn)為體。數(shù)據(jù)對(duì)象是數(shù)據(jù)的集合,它表現(xiàn)的數(shù)據(jù)是經(jīng)可視化流水線處理過的數(shù)據(jù)。每種數(shù)據(jù)具有各自相應(yīng)的數(shù)據(jù)屬性。它用來對(duì)數(shù)據(jù)的存儲(chǔ)方式、運(yùn)算規(guī)則、適用算法、點(diǎn)與單元的數(shù)據(jù)特征、顏色標(biāo)量值等進(jìn)行表達(dá)。VTK的單元數(shù)據(jù)集是被賦予了屬性值的數(shù)據(jù)對(duì)象的一種組織結(jié)構(gòu),它是眾多基本單元的集合,單元數(shù)據(jù)集的組織結(jié)構(gòu)具有幾何和拓?fù)涞膶傩?。在VTK中,數(shù)據(jù)集的結(jié)構(gòu)用點(diǎn)集(points)和單元(cell)來描述,點(diǎn)集存儲(chǔ)幾何結(jié)構(gòu)的空間位置信息,單元?jiǎng)t表達(dá)數(shù)據(jù)集的構(gòu)成方式或者說拓?fù)鋵傩浴1菊n題在繪制各種單元類型的網(wǎng)格時(shí)就是依循這樣的基本思路來構(gòu)建網(wǎng)格的基本單元的。多點(diǎn)集折線頂點(diǎn)直線線性單元的特征是構(gòu)成單元的每條邊都為由兩個(gè)點(diǎn)確定的直線。 頂點(diǎn)單元()頂點(diǎn)單元是零維基本單元,由一個(gè)點(diǎn)定義。組合單元(posite)是由基本單元組合而成的單元集。 直線單元()直線單元是一維基本單元,由兩個(gè)點(diǎn)來定義,方向從第一個(gè)點(diǎn)指向第二個(gè)點(diǎn)。 折線單元()折線單元又叫做多段線,是一維組合單元。由平面內(nèi)的多個(gè)頂點(diǎn)組成。非線性單元相較線性單元而言,提供了更為精確的插值函數(shù)和更好的模型曲線,能夠更加準(zhǔn)確地描述客觀現(xiàn)實(shí)。由于非線性單元的復(fù)雜性,VTK僅對(duì)非線性單元提供了二次插值函數(shù)。線性單元可以很容易的轉(zhuǎn)換成線性圖元被圖形庫處理;而非線性單元不被圖形庫直接支持,它必須先轉(zhuǎn)換成線性單元以后才能被圖形庫支持。數(shù)據(jù)集的類型指定了幾何結(jié)構(gòu)和拓?fù)浣Y(jié)構(gòu)之間的相互關(guān)系。: VTK的數(shù)據(jù)集類型數(shù)據(jù)集依據(jù)其結(jié)構(gòu)分為規(guī)則的和不規(guī)則的。在實(shí)際工程中,所處理的數(shù)據(jù)往往不是規(guī)則、均勻的,因而通常來說,不規(guī)則數(shù)據(jù)集更適宜描述客觀現(xiàn)實(shí)。關(guān)于VTK數(shù)據(jù)集類型更詳細(xì)的內(nèi)容,可參考《Visualization ObjectOriented Approach to3D Graphics(3rd Edition)》的相關(guān)部分以及陳恒翻譯整理的《VTK
點(diǎn)擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1