APP下载

用轨迹球实现地物化资料三维立体图的旋转

2012-01-11袁小龙段新力彭仲秋黄显义李永华

物探化探计算技术 2012年5期
关键词:内切圆球体物化

袁小龙,段新力,毕 武,彭仲秋,黄显义,李永华

(1.新疆地矿局 物化探大队,新疆 昌吉 830011;2.乌鲁木齐金维图文信息科技有限公司,新疆 乌鲁木齐 830091)

用轨迹球实现地物化资料三维立体图的旋转

袁小龙1,2,段新力1,2,毕 武1,2,彭仲秋1,2,黄显义1,2,李永华1,2

(1.新疆地矿局 物化探大队,新疆 昌吉 830011;2.乌鲁木齐金维图文信息科技有限公司,新疆 乌鲁木齐 830091)

为了从各个角度观察屏幕上的三维场景,可以通过鼠标的拖动来实现。通常的做法是使场景绕X、Y、Z旋转,但这样操作不方便,旋转效果不理想。有一种更好的方法是:为三维场景建立一个外接球,旋转外接球的同时旋转了球体内的三维场景,这种技术叫轨迹球技术。这里介绍了轨迹球技术的数学原理、计算方法,并用轨迹球技术在OpenGL环境下实现了地物化资料三维立体图的旋转,操作起来方便直观,人机交互体验良好。

轨迹球;虚拟球;三维旋转;四元数

0 前言

随着计算机硬件、软件技术水平的发展,地物化数据图形表现形式越来越丰富。用三维图形显示地物化资料数据,形象直观,易于理解。为了从各个角度观察场景,可以通过旋转不同的坐标轴来实现。但旋转坐标轴操作复杂,不易理解,用户使用不方便,作者在本文提出了使用轨迹球来解决这个问题。轨迹球技术是由Ken Shoemake提出的,假设场景中所有物体都包含在一个球体中,拨动这个球体,使其绕球心旋转,这样球体内的物体跟着旋转,就可以达到旋转物体的目的。在计算机操作中,屏幕上创建一个包含所有物体的轨迹球,通过鼠标在二维屏幕上的移动,模拟旋转球体,可人机交互良好地实现三维场景的旋转。

1 轨迹球坐标系的建立

(1)屏幕上的设备坐标称为屏幕坐标,如下页图1(a)所示,矩形左上角坐标为(0,0),右下角坐标为 (w,h),w为视图的宽度,h为视图的高度,屏幕坐标以像素为单位,X方向朝右为正,Y方向朝下为正。

(2)定义正方形坐标系,如下页图1(b)所示,正方形左下角坐标为(-1,-1),右上角坐标为(1,1),中心点坐标为(0,0),X 方向从左向右增大,Y方向从下向上增大。

(3)将屏幕坐标 (screenX,screenY)转换到正方形坐标(square X,squareY)系内。在X方向,将坐标从范围(0,width)转换到(-1,1),坐标变换为线性变换,令

当screenX=0时,square X=-1;当screenX=width时,square X =1。将以上参数代入公式(1),得将a、b值代入公式(1),得到X 方向坐标转换函数公式(2)。同理,可计算出Y方向坐标转换函数公式(3)。

这样转换后的坐标X范围为[-1,1],Y范围为[-1,1],屏幕中心点坐标为(0,0)。

(4)做正方形的内切圆,如图1(c)所示。内切圆以它的任意一条直径为轴,旋转180°,形成一个球体,如图1(d)所示。设球体的中心为(0,0,0),半径为1,我们把这个球体称为轨迹球,轨迹球上的坐标系称为轨迹球坐标系。

(5)将正方形坐标 (x,y)转为轨迹球坐标(u,v,w)。首先,把正方形内的点分成两部份,一部份在其内切圆内,另一部份在其内切圆之外。鼠标点击的位置 (x,y)落在内切圆内,即时,以(x,y)为基点,做垂直于屏幕的射线,与轨迹球的外半球(屏幕上能看到的半球)相交于P点,如图1(e)所示。在拖动鼠标时,相当于以P点为基点拖动球体,鼠标点击的位置P(x,y)落在内切圆之外,即时,如图1(f)所示。基点P在轨迹球之外,无法拖动球体,必须重新找一个在轨迹球上的基点,在uov平面内,连接OP,OP交内切圆于P’点,以P’点为基点拽动轨迹球。设θ为OP与OU的夹角,可得:

因轨迹球半径为1,可得:

综合鼠标点击位置落在内切圆内和内切圆外两种情况,可得公式(4)。

2 旋转向量的计算

(1)旋转轴及旋转角度的确定。如图2(a)所示,鼠标从P1点移动到P2点,得到两个矢量,旋转所张成平面的法向量,通过计算的叉乘,可得到旋转轴

旋转角度为OP1与OP2之间的夹角θ,在图2(a)中,M为正方形左边的中点,N为正方形右边的中点,鼠标从M点拖动到N点时,轨迹球绕V轴旋转了180°,同样操作,如果要使轨迹球绕V轴旋转360°,则旋转角度得取θ的二倍。在实际使用过程中,旋转角度α取θ的二倍更符合用户习惯。

(2)多次旋转累加。如果鼠标进行了多次拖动,则需要将多次拖动的效果累加起来。如图2(b)所示,第一次拖动的旋转量为,第二次拖动的旋转量为

(3)旋转矩阵的计算。四元数 Quat4(x,y,z,w)用来存储旋转轴和旋转角度,设 (a,b,c)为旋转轴向量,θ为旋转角度,根据四元数旋转公式:

如果鼠标进行了两次以上的拖动操作,则需将多次旋转效果进行累加。设Q1(w1,x1,y1,z1),Q2(w2,x2,y2,z2)为两次旋转的四元数,将两次旋转效果累加按公式(5)计算。

注意:Q=Q1*Q2中,先进行的是右边项Q2的旋转,再进行左边项Q1的旋转。将最终累加的四元数转换成旋转矩阵M[2],在OpenGL中乘以这个旋转矩阵M,实现轨迹球的旋转。旋转矩阵M按公式(6)计算。

3 轨迹球旋转地物化三维立体图实例

用OpenGL函数建立三维地质体模型,在鼠标移动的响应函数中,通过轨迹球计算出旋转矩阵,当前模型视图矩阵乘以旋转矩阵,实现旋转操作。

(1)实例1:对布格重力网格数据做切割法场分离,切割出五层(一层为一个网格距)的区域场和剩余场,把布格重力和五层剩余异常放在一起显示,如图3所示。用轨迹球旋转操作,可以轻松地旋转到用户想要的任意位置。

图3 用轨迹球旋转重力三维图Fig.3 Rotating 3Dgraphics of gravity by using arcball

(2)实例2:在钻孔数据上,通过平行轮廓线截面法创建矿体模型,用轨迹球旋转操作可以从各个角度观察矿体及钻孔。如图4所示。

4 结束语

作者在本文讨论了轨迹球坐标系的建立,旋转轴及旋转角度的计算,用四元数表达旋转向量,多次旋转效果的累加,以及四元数转换成旋转矩阵。在OpenGL环境下编程实现了三维地质模型体绕任意轴旋转,并给出了两个实例,用户可以用二维设备(鼠标)轻松、直观地旋转三维场景。

图4 用轨迹球旋转矿体及钻孔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] 马新武,赵国群,王广春.用虚拟球实现交互式OpengGL 3D图形的旋转[J].计算机应用,2001,21(8):169.

[5] 赖朝辉,刘修国,花卫东,等.三维数据场可视化技术在数字矿山中的应用[J].金属矿山,2008(12):131.

[6] 李超玲,杨东来,李丰丹,等.中国数字地质调查系统的基本构架及核心技术的实现[J].地质通报,2008,27(7):923.

[7] 黄杏元,马劲松.地理信息系统概论(第三版)[M].北京:高等教育出版社,2008.

[8] 唐圣洁.三维数据场可视化[M].北京:清华大学出版社,2000.

[9] 屈红刚,潘懋,王勇,等.基于含拓扑剖面的三维地质建模[J].北京大学学报:自然科学版,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- ),男,本科,主要从事物化探软件开发、数据处理和资料研究工作。

猜你喜欢

内切圆球体物化
三个伪内切圆之间的一些性质
越来越圆的足球
计算机生成均值随机点推理三、四维球体公式和表面积公式
物化-生化工艺处理页岩气采出水的工程实践
与三角形的内切圆有关的一个性质及相关性质和命题
亲水与超疏水高温球体入水空泡实验研究
膜态沸腾球体水下运动减阻特性
一种伪内切圆切点的刻画办法
仅与边有关的Euler不等式的加强
在Oracle数据库中实现物化视图