網絡模型圖形管理論文
時間:2022-06-29 07:13:00
導語:網絡模型圖形管理論文一文來源于網友上傳,不代表本站觀點,若需要原創文章可咨詢客服老師,歡迎參考。
通過不連續面三維網絡模擬獲得了在模擬空間范圍內具一定概率分布特征的不連續面,這些不連續面的形態以圓盤形式表示,空間位置由圓盤中心點坐標及產狀表示,大小由圓盤直徑體現。根據模擬的結果可以進一步進行巖體穩定分析、巖體水力學性質等研究,但首先要解決的問題就是三維網絡模型的圖形化,即可視性,沒有圖形,研究將難以深入。為了使得研究者能直觀地看到不連續面的三維網絡模型,并能對網絡模型進行切割產生平面網絡,進而對這些圖形直接進行處理,比如輸出等。筆者用C++語言在BorlandC++3.1集成環境下編寫了一系列計算機程序,使得三維網絡模型的應用更加方便可行。
1程序組成
本模塊由以下文件組成:
3dnet.cpp,3dnet.exe,3ddraw.cpp,3dnet.prj,3dtools.cpp,3dnet.dat,news.cpp,3ddraw.h,tools.cpp,3dtools.h,3dfront.cpp,news.h,hzktext,tools.h,hzf24,egavea.bgi,trip.chr。
在Borlandc++3.1的集成環境中經工程文件編譯,產生3DNET.EXE可執行文件,在DOS或Windows環境下運行。
2程序編制依據
2.1結構面三維圖形顯示
2.1.1求圓盤上各點三維坐標
對于一個節理圓盤,沿其法向觀測時其為一圓形,沿其走向觀測時其為一線段,除此之外,從其他任何角度去觀測,節理圓盤都為橢圓。C++語言所提供的繪橢圓函數ellipse()只能繪制長軸為X軸、短軸為Y軸的橢圓,而無法實現任意形狀橢圓的顯示,因此還得從圓盤軌跡著手,用moveto()、lineto()等函數來實現。
由于三維網絡模擬產生的節理是以具有中心點坐標、產狀和直徑的圓盤表示,所以圓盤上的每一點相對于模型來說都是確定的,都可以用一組三維坐標表達。
求圓盤各點的坐標是出于這樣的出發點:對照圖1,對于一圓盤,很容易得到其傾向線,以傾向方向的半徑OA順時針(或逆時針)旋轉一角度,得到另一半徑OB,求出B點的坐標,旋轉角的取值由0°到360°,即得到該圓盤的軌跡。
對于傾角為α、傾向為β、半徑為R中心點坐標為(Xo,Yo,Zo)的節理圓盤,其投影到水平面上則為一橢圓,該橢圓長半軸沿走向方向(以下所說的走向均指服從右手法則,長度為a=R,短半軸沿傾向方向,長度為b=Rcosa。
如果平移并沿Z軸旋轉坐標系,使X軸與圓盤在水平面投影的橢圓長軸一致且原心在橢圓中心點,則橢圓上一點的坐標可表示為:
X''''=acosq=Rc(2-1-1)
Y''''=bsinq=Rcosasinq(2-1-2)
q為所求坐標點與原心連線與橢圓長軸的夾角(逆時針為正),也就是圓盤上所求坐標點與圓盤中心點連線與走向線的夾角。
再把坐標變換回來,即得到圓盤上任意一點的三維坐標,分別為:
X=Xo+X''''cosb+Y''''sinb(2-1-3)
Y=Yo+X''''sinb+Y''''cosb(2-1-4)
Z=Zo-Rsinα''''(2-1-5)
α''''為所求坐標點與圓盤中心點連線的傾角
α''''是這樣確定的,圓盤與水平面的交線必為走向線,在圖1中,OA為圓盤傾向方向半徑,OB為與OA夾角為θ的一半徑,兩半徑與水平面分別交于A''''點和B''''點,圓盤中心點O在水平面上的垂直投影點為O'''',A''''B''''即為走向線,O''''A''''B''''構成水平面。
因為OO''''與A''''O''''垂直、OB''''與B''''O''''垂直,并且OA''''垂直于A''''B''''(走向線與傾向線),所以有:
OA''''=OO''''/sina(α為圓盤傾角)(2-1-6)
OB''''=OO''''/sina''''(a''''為OB與水平面夾角)(2-1-7)
OA''''=OB''''sinq(2-1-8)
即:
sina''''=sinasinq(2-1-9)
所以
Z=Zo-Rsinasinq(2-1-10)
2.1.2求圓盤在視面上的平面坐標
計算機屏幕是個平面,要把一個三維物體在屏幕上顯示出來,首先要把該物體各點的三維坐標變換為平面坐標。相對于物體,屏幕是個投影面,該面位于觀測者與被觀測物體之間,如圖2。對于表征物體的三維坐標系O_XYZ,設觀測點的位置為V,其直角坐標為(X,Y,Z),球面坐標為(ρ,θ,φ),顯示屏與直線OV垂直,與V點的距離為D,對于物體的每一個點(X,Y,Z),都對應一個投影面平面坐標(SX,SY),該投影面坐標系方向如此定:當觀測者的視線朝著O_XYZ坐標系的坐標原點時,SX軸指向右側,SY軸指向上方。
三維物體上的任一點(X,Y,Z)表示到二維顯示平面上的平面坐標(SX,SY)為:
SX=-Xsinθ+Ycosθ(2-1-11)
SY=-Xcosθcosφ-Ysinθcosφ+Zsinφ(2-1-12)
式中:θ為觀測線在O-XY面上的投影線與X軸之間的夾角,φ為觀測線與Z軸的夾角。
2.1.3視區及象素
在C++圖形方式下,計算
機屏幕上的位置通過象素(正整數)體現,每一個象素對應于屏幕上的一個點,象素的個數(分辨率)依賴于系統的圖形適配器和連入系統的顯示器類型及所處的方式。對于一般的VGA彩卡和彩色顯示器,X方向的象素為0~640,Y方向的象素為0~480,C++的繪圖函數,只能在此矩形區間內顯示圖形。
通過三維物體的二維表示得到的三維網絡模型各點的二維坐標值是相對于用戶投影坐標系的,要全顯或部分顯示網絡模型,必須通過比例縮放把這些二維坐標值轉換為計算機屏幕上的象素,才能顯示圖形。
在C++圖形狀態下,往往在屏幕上留下一部分位置作菜單顯示或其他用途,只用屏幕上的某一矩形范圍作為圖形顯示用,該矩形部分稱為視區。對于三維網絡模型,為了全顯或部分顯示其圖形,也需要在其平面投影圖上確定要顯示的范圍,該矩形范圍成為窗口。如何把由窗口內的物體在視區中顯示出來,首先要確定顯示比例。
如圖3,設窗口的四條邊界分別為:
左X=X1,右X=X2,下Y=Y1,上Y=Y2
設視區的四條邊界分別為:
左X=SX1,右X=SX2,下Y=SY1,上Y=SY2
經變換后,窗口的上邊界線段(或下邊界線段)長X2-X1變換成視區上邊界線段(或下邊界線段)長SX2-SX1,設其比例變換因子為K1,則
K1=(SX2-SX1)/(X2-X1)(2-1-13)
對窗口內任一X坐標(X1≤X≤X2)變換后為視區內水平方向SX坐標(SX1≤SX≤SX2),
SX=SX1+K1(X-X1)(2-1-14)
同理,對窗口內任一Y坐標(Y1≤X≤Y2)變換后為視區內水平方向SX坐標(SY1≤SY≤SY2),
K2=(SY2-SY1)/(Y2-Y1)(2-1-15)
SY=SY1+K2(Y-Y1)(2-1-16)
由式(2-1-14)和式(2-1-16),把所求得的SX、SY值通過四舍五入的辦法由實型數都轉化為整型數,該數值即為C++圖形狀態的象素值。根據這些象素值,利用C++語言的基本繪圖函數,就可以把由窗口定義的范圍內的物體在視區中顯示出來,但必須注意以下兩點:
①長寬比例變換。由于窗口的長寬比與視區的長寬比并不一定相同,如果圖形的X與Y方向按各自的比例變換因子K1、K2,將使的圖形發生變形,而盲目使用某一個值又可能會使得窗口中的圖形不能全顯,為確保窗口中的圖形全顯且保持原樣,必須對K1、K2值進行比較,取兩者之間的小者,作為統一的圖形比例系數。
②坐標軸方向變換。一般屏幕坐標系是直角左手系,Y軸方向向下為正,原點在屏幕左上角,而窗口內圖形上的任一點(X,Y)是相對于右手坐標系的,因此在把(X,Y)變換為屏幕上的(SX,SY)時,Y值發生了變化,即圖形產生了倒置,為保持圖形一致,只需把所得的SY值用SY2-SY代替即可。
2.2三維圖形處理及輸出
對于一個圖形的操作是十分必要的,通過對圖形旋轉、放大、移動,可以全面地了解圖形的特征,把圖形打印輸出,可以永久保存。
2.2.1旋轉、放大及移動
在計算機屏幕上顯示三維網絡模型等圖形之后,有時要對圖形進行旋轉,從不同的角度來觀測該圖形,可通過改變觀測線的角度實現這一目的。在三維坐標的二維表示中已引進了θ和φ兩個參數,θ為觀測線在OXY平面上的投影線與X軸的夾角,φ為觀測線與Z軸的夾角,調整θ、φ,即可唯一確定一觀測線,所得的圖形即相對于與該觀測線垂直的視平面圖形。在程序中可利用菜單,通過屏幕輸入θ、φ值,由式(2-1-11)、式(2-1-12)而改變圖形在視平面上的二維坐標,圖形的象素也將隨之改變,從而實現圖形在三度空間中沿任意軸的選轉。
圖形的放大及移動實際上是對窗口進行操作。對屏幕上顯示的圖形的某部分進行放大顯示時,用鼠標在屏幕圖形上選定一矩形域,該矩形域的各頂點相應于二維平面視圖中的窗口中的一小窗口,通過調整比例變換因子而使該小窗口中的圖形充滿整個視區,從而達到圖形放大的目的。這時要想看到其他位置的圖形,可以用鼠標在圖形中固定一點再拖動到一個新位置,可求出鼠標的象素位移,由比例變換因子而知道相應于該位移的視平面坐標值,依此值而相應調整窗口中的圖形內容,達到圖形移動的目的。
2.2.2圖形輸出
通過坐標變換,用C++程序在屏幕上顯示所需要的圖形,這些圖形其實是由一系列坐標值通過繪圖函數而實現,為了輸出這些圖形,可以把這些坐標值寫到文件上,同時寫入各繪圖命令,比如用起筆、落筆的方式寫到*.plt文件上,用Surfer軟件輸出圖形;用AutoCAD基本圖元命令寫到*.scr文件上,并在AutoCAD環境中進行編輯,最后打印輸出這些圖形。
3結束語
根據以上介紹的原理編制出的程序,不僅可以對不連續面三維網絡模擬產生的三維網絡模型進行三維圖形顯示及處理,也可以對實測的不連續面構成的實體三維圖形進行操作。該程序的主要作用之一是為了切割任意截面的不連續面形跡圖。至于如何切制這些圖形,將在以后的文章中介紹。