国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

用軌跡球?qū)崿F(xiàn)地物化資料三維立體圖的旋轉(zhuǎn)

2012-01-11 08:14:52袁小龍段新力彭仲秋黃顯義李永華
物探化探計(jì)算技術(shù) 2012年5期
關(guān)鍵詞:內(nèi)切圓球體物化

袁小龍,段新力,畢 武,彭仲秋,黃顯義,李永華

(1.新疆地礦局 物化探大隊(duì),新疆 昌吉 830011;2.烏魯木齊金維圖文信息科技有限公司,新疆 烏魯木齊 830091)

用軌跡球?qū)崿F(xiàn)地物化資料三維立體圖的旋轉(zhuǎn)

袁小龍1,2,段新力1,2,畢 武1,2,彭仲秋1,2,黃顯義1,2,李永華1,2

(1.新疆地礦局 物化探大隊(duì),新疆 昌吉 830011;2.烏魯木齊金維圖文信息科技有限公司,新疆 烏魯木齊 830091)

為了從各個(gè)角度觀察屏幕上的三維場景,可以通過鼠標(biāo)的拖動(dòng)來實(shí)現(xiàn)。通常的做法是使場景繞X、Y、Z旋轉(zhuǎn),但這樣操作不方便,旋轉(zhuǎn)效果不理想。有一種更好的方法是:為三維場景建立一個(gè)外接球,旋轉(zhuǎn)外接球的同時(shí)旋轉(zhuǎn)了球體內(nèi)的三維場景,這種技術(shù)叫軌跡球技術(shù)。這里介紹了軌跡球技術(shù)的數(shù)學(xué)原理、計(jì)算方法,并用軌跡球技術(shù)在OpenGL環(huán)境下實(shí)現(xiàn)了地物化資料三維立體圖的旋轉(zhuǎn),操作起來方便直觀,人機(jī)交互體驗(yàn)良好。

軌跡球;虛擬球;三維旋轉(zhuǎn);四元數(shù)

0 前言

隨著計(jì)算機(jī)硬件、軟件技術(shù)水平的發(fā)展,地物化數(shù)據(jù)圖形表現(xiàn)形式越來越豐富。用三維圖形顯示地物化資料數(shù)據(jù),形象直觀,易于理解。為了從各個(gè)角度觀察場景,可以通過旋轉(zhuǎn)不同的坐標(biāo)軸來實(shí)現(xiàn)。但旋轉(zhuǎn)坐標(biāo)軸操作復(fù)雜,不易理解,用戶使用不方便,作者在本文提出了使用軌跡球來解決這個(gè)問題。軌跡球技術(shù)是由Ken Shoemake提出的,假設(shè)場景中所有物體都包含在一個(gè)球體中,撥動(dòng)這個(gè)球體,使其繞球心旋轉(zhuǎn),這樣球體內(nèi)的物體跟著旋轉(zhuǎn),就可以達(dá)到旋轉(zhuǎn)物體的目的。在計(jì)算機(jī)操作中,屏幕上創(chuàng)建一個(gè)包含所有物體的軌跡球,通過鼠標(biāo)在二維屏幕上的移動(dòng),模擬旋轉(zhuǎn)球體,可人機(jī)交互良好地實(shí)現(xiàn)三維場景的旋轉(zhuǎn)。

1 軌跡球坐標(biāo)系的建立

(1)屏幕上的設(shè)備坐標(biāo)稱為屏幕坐標(biāo),如下頁圖1(a)所示,矩形左上角坐標(biāo)為(0,0),右下角坐標(biāo)為 (w,h),w為視圖的寬度,h為視圖的高度,屏幕坐標(biāo)以像素為單位,X方向朝右為正,Y方向朝下為正。

(2)定義正方形坐標(biāo)系,如下頁圖1(b)所示,正方形左下角坐標(biāo)為(-1,-1),右上角坐標(biāo)為(1,1),中心點(diǎn)坐標(biāo)為(0,0),X 方向從左向右增大,Y方向從下向上增大。

(3)將屏幕坐標(biāo) (screenX,screenY)轉(zhuǎn)換到正方形坐標(biāo)(square X,squareY)系內(nèi)。在X方向,將坐標(biāo)從范圍(0,width)轉(zhuǎn)換到(-1,1),坐標(biāo)變換為線性變換,令

當(dāng)screenX=0時(shí),square X=-1;當(dāng)screenX=width時(shí),square X =1。將以上參數(shù)代入公式(1),得將a、b值代入公式(1),得到X 方向坐標(biāo)轉(zhuǎn)換函數(shù)公式(2)。同理,可計(jì)算出Y方向坐標(biāo)轉(zhuǎn)換函數(shù)公式(3)。

這樣轉(zhuǎn)換后的坐標(biāo)X范圍為[-1,1],Y范圍為[-1,1],屏幕中心點(diǎn)坐標(biāo)為(0,0)。

(4)做正方形的內(nèi)切圓,如圖1(c)所示。內(nèi)切圓以它的任意一條直徑為軸,旋轉(zhuǎn)180°,形成一個(gè)球體,如圖1(d)所示。設(shè)球體的中心為(0,0,0),半徑為1,我們把這個(gè)球體稱為軌跡球,軌跡球上的坐標(biāo)系稱為軌跡球坐標(biāo)系。

(5)將正方形坐標(biāo) (x,y)轉(zhuǎn)為軌跡球坐標(biāo)(u,v,w)。首先,把正方形內(nèi)的點(diǎn)分成兩部份,一部份在其內(nèi)切圓內(nèi),另一部份在其內(nèi)切圓之外。鼠標(biāo)點(diǎn)擊的位置 (x,y)落在內(nèi)切圓內(nèi),即時(shí),以(x,y)為基點(diǎn),做垂直于屏幕的射線,與軌跡球的外半球(屏幕上能看到的半球)相交于P點(diǎn),如圖1(e)所示。在拖動(dòng)鼠標(biāo)時(shí),相當(dāng)于以P點(diǎn)為基點(diǎn)拖動(dòng)球體,鼠標(biāo)點(diǎn)擊的位置P(x,y)落在內(nèi)切圓之外,即時(shí),如圖1(f)所示?;c(diǎn)P在軌跡球之外,無法拖動(dòng)球體,必須重新找一個(gè)在軌跡球上的基點(diǎn),在uov平面內(nèi),連接OP,OP交內(nèi)切圓于P’點(diǎn),以P’點(diǎn)為基點(diǎn)拽動(dòng)軌跡球。設(shè)θ為OP與OU的夾角,可得:

因軌跡球半徑為1,可得:

綜合鼠標(biāo)點(diǎn)擊位置落在內(nèi)切圓內(nèi)和內(nèi)切圓外兩種情況,可得公式(4)。

2 旋轉(zhuǎn)向量的計(jì)算

(1)旋轉(zhuǎn)軸及旋轉(zhuǎn)角度的確定。如圖2(a)所示,鼠標(biāo)從P1點(diǎn)移動(dòng)到P2點(diǎn),得到兩個(gè)矢量,旋轉(zhuǎn)所張成平面的法向量,通過計(jì)算的叉乘,可得到旋轉(zhuǎn)軸

旋轉(zhuǎn)角度為OP1與OP2之間的夾角θ,在圖2(a)中,M為正方形左邊的中點(diǎn),N為正方形右邊的中點(diǎn),鼠標(biāo)從M點(diǎn)拖動(dòng)到N點(diǎn)時(shí),軌跡球繞V軸旋轉(zhuǎn)了180°,同樣操作,如果要使軌跡球繞V軸旋轉(zhuǎn)360°,則旋轉(zhuǎn)角度得取θ的二倍。在實(shí)際使用過程中,旋轉(zhuǎn)角度α取θ的二倍更符合用戶習(xí)慣。

(2)多次旋轉(zhuǎn)累加。如果鼠標(biāo)進(jìn)行了多次拖動(dòng),則需要將多次拖動(dòng)的效果累加起來。如圖2(b)所示,第一次拖動(dòng)的旋轉(zhuǎn)量為,第二次拖動(dòng)的旋轉(zhuǎn)量為

(3)旋轉(zhuǎn)矩陣的計(jì)算。四元數(shù) Quat4(x,y,z,w)用來存儲(chǔ)旋轉(zhuǎn)軸和旋轉(zhuǎn)角度,設(shè) (a,b,c)為旋轉(zhuǎn)軸向量,θ為旋轉(zhuǎn)角度,根據(jù)四元數(shù)旋轉(zhuǎn)公式:

如果鼠標(biāo)進(jìn)行了兩次以上的拖動(dòng)操作,則需將多次旋轉(zhuǎn)效果進(jìn)行累加。設(shè)Q1(w1,x1,y1,z1),Q2(w2,x2,y2,z2)為兩次旋轉(zhuǎn)的四元數(shù),將兩次旋轉(zhuǎn)效果累加按公式(5)計(jì)算。

注意:Q=Q1*Q2中,先進(jìn)行的是右邊項(xiàng)Q2的旋轉(zhuǎn),再進(jìn)行左邊項(xiàng)Q1的旋轉(zhuǎn)。將最終累加的四元數(shù)轉(zhuǎn)換成旋轉(zhuǎn)矩陣M[2],在OpenGL中乘以這個(gè)旋轉(zhuǎn)矩陣M,實(shí)現(xiàn)軌跡球的旋轉(zhuǎn)。旋轉(zhuǎn)矩陣M按公式(6)計(jì)算。

3 軌跡球旋轉(zhuǎn)地物化三維立體圖實(shí)例

用OpenGL函數(shù)建立三維地質(zhì)體模型,在鼠標(biāo)移動(dòng)的響應(yīng)函數(shù)中,通過軌跡球計(jì)算出旋轉(zhuǎn)矩陣,當(dāng)前模型視圖矩陣乘以旋轉(zhuǎn)矩陣,實(shí)現(xiàn)旋轉(zhuǎn)操作。

(1)實(shí)例1:對(duì)布格重力網(wǎng)格數(shù)據(jù)做切割法場分離,切割出五層(一層為一個(gè)網(wǎng)格距)的區(qū)域場和剩余場,把布格重力和五層剩余異常放在一起顯示,如圖3所示。用軌跡球旋轉(zhuǎn)操作,可以輕松地旋轉(zhuǎn)到用戶想要的任意位置。

圖3 用軌跡球旋轉(zhuǎn)重力三維圖Fig.3 Rotating 3Dgraphics of gravity by using arcball

(2)實(shí)例2:在鉆孔數(shù)據(jù)上,通過平行輪廓線截面法創(chuàng)建礦體模型,用軌跡球旋轉(zhuǎn)操作可以從各個(gè)角度觀察礦體及鉆孔。如圖4所示。

4 結(jié)束語

作者在本文討論了軌跡球坐標(biāo)系的建立,旋轉(zhuǎn)軸及旋轉(zhuǎn)角度的計(jì)算,用四元數(shù)表達(dá)旋轉(zhuǎn)向量,多次旋轉(zhuǎn)效果的累加,以及四元數(shù)轉(zhuǎn)換成旋轉(zhuǎn)矩陣。在OpenGL環(huán)境下編程實(shí)現(xiàn)了三維地質(zhì)模型體繞任意軸旋轉(zhuǎn),并給出了兩個(gè)實(shí)例,用戶可以用二維設(shè)備(鼠標(biāo))輕松、直觀地旋轉(zhuǎn)三維場景。

圖4 用軌跡球旋轉(zhuǎn)礦體及鉆孔Fig.4 Rotating 3Dgraphics of drill hole and ore body by using arcball

[1] MICHAEL CHEN,S.JOY MOUNTFORD.A study in Interactive 3-D Rotation Using 2-D Control Devices[J].Computer Graphics,1988,22(4),121.

[2] SHOEMAKE KEN.Animating Rotation with Quaternion Curves[J].Computer Graphics,1985,19(3):245.

[3] SHOEMAKE K,DUFF T.Matrix animation and polar decomposition[C].In:Procee-dings of Graphics Interface'92,1992.

[4] 馬新武,趙國群,王廣春.用虛擬球?qū)崿F(xiàn)交互式OpengGL 3D圖形的旋轉(zhuǎn)[J].計(jì)算機(jī)應(yīng)用,2001,21(8):169.

[5] 賴朝輝,劉修國,花衛(wèi)東,等.三維數(shù)據(jù)場可視化技術(shù)在數(shù)字礦山中的應(yīng)用[J].金屬礦山,2008(12):131.

[6] 李超玲,楊東來,李豐丹,等.中國數(shù)字地質(zhì)調(diào)查系統(tǒng)的基本構(gòu)架及核心技術(shù)的實(shí)現(xiàn)[J].地質(zhì)通報(bào),2008,27(7):923.

[7] 黃杏元,馬勁松.地理信息系統(tǒng)概論(第三版)[M].北京:高等教育出版社,2008.

[8] 唐圣潔.三維數(shù)據(jù)場可視化[M].北京:清華大學(xué)出版社,2000.

[9] 屈紅剛,潘懋,王勇,等.基于含拓?fù)淦拭娴娜S地質(zhì)建模[J].北京大學(xué)學(xué)報(bào):自然科學(xué)版,2006,42(6):717.

TP 317.4

A

10.3969/j.issn.1001-1749.2012.05.22

1001—1749(2012)05—0622—03

2011-11-24 改回日期:2012-06-16

袁小龍(1982- ),男,本科,主要從事物化探軟件開發(fā)、數(shù)據(jù)處理和資料研究工作。

猜你喜歡
內(nèi)切圓球體物化
三個(gè)偽內(nèi)切圓之間的一些性質(zhì)
計(jì)算機(jī)生成均值隨機(jī)點(diǎn)推理三、四維球體公式和表面積公式
與三角形的內(nèi)切圓有關(guān)的一個(gè)性質(zhì)及相關(guān)性質(zhì)和命題
一種偽內(nèi)切圓切點(diǎn)的刻畫辦法
僅與邊有關(guān)的Euler不等式的加強(qiáng)
廣告創(chuàng)意新方法——球體思維兩極法
Optimization of rice wine fermentation process based on the simultaneous saccharification and fermentation kinetic model☆
物的人化與人的物化——當(dāng)代舞臺(tái)美術(shù)的表演
檔案:一種物化的文化形態(tài)
拋物化Navier-Stokes方程的降維仿真模型
贵港市| 句容市| 上蔡县| 玉山县| 桦甸市| 侯马市| 阿瓦提县| 新闻| 博爱县| 德令哈市| 临沂市| 乐都县| 临沭县| 八宿县| 措勤县| 达日县| 台中县| 广平县| 塘沽区| 临潭县| 丰镇市| 米泉市| 都兰县| 西乡县| 涪陵区| 电白县| 和顺县| 论坛| 广昌县| 富蕴县| 三门县| 陇南市| 柳林县| 凤凰县| 油尖旺区| 凤山县| 水富县| 白河县| 醴陵市| 上饶市| 津南区|