总结——基于opengl的三维井眼轨迹可视化2011.03.30•1.将测井数据转换为opengl环境下的三维坐标数据。•1.1利用最小曲率法公式算出井眼在地层垂深、东坐标和北坐标方向的增量•打开测井数据文件,获得井深、井斜角和方位角,利用最小曲率法公式算出井眼在地层垂深、东坐标和北坐标方向的增量,从而得到井眼轨迹的三维坐标。•假设测斜数据共有N个点,第i个测点的井深为Li、井斜角为ai、方位角为фi,i=1,⋯,N。井深单位为m,井斜角和方位角单位为弧度。•最小曲率法假设:在一个井段上,井眼轨迹为空间中的一段圆弧。用(X,Y,Z)表示井眼轨迹上任意一点的北坐标、东坐标和垂直深度,则在第i个测段上,坐标增量由式(1)一式(5)计算:11111L(sincossincos)...................................(1)L(sinsinsinsin)......................................(2)L(coscos).........................iiiiiiiiiiiiiiiiiiiXYZ11...............................(3)1tan...................................................................................(4)2coscoscossinsincos...............................iiiiiiiii....(5)•式中:是段长,m;北坐标增量,m;是东坐标增量,;是垂深增量,m;是测段弯曲角,弧度;是测段方位角增量。•井段的平均井眼曲率、井斜变化率和方位变化率计算:1LiiiLL1iiiXXX1iiiYYY1Z=ZiiZi1iii,,iiiiiiiiiKLKLKL•式中:是井段井斜角增量;平均井眼曲率,弧度/m;是井斜变化率,弧度/m;方位变化率,弧度/m。i1iiiK,iK,iK•坐标增量的精确计算•直接按照式(1)一式(5)进行测斜计算不是高•效的和数值稳定的。下面给出两个改进方法。•(1)减小计算量的方法•如果直接按照式(1)一式(5)计算坐标增量,需•要计算13个正弦和余弦三角函数,全井N个点的总计算次数为N1=13(N—1)。•如果令,,则可将式(1)一式(3)和式(5)可以改写成下面的形式:•三角函数计算的总次数为4N。sincosiiiasinsiniiibcosiic111111()()()cosiiiiiiiiiiiiiiiiiiiiiiXLaaYLbbZLccaabbcc•(2)系数的计算•从式(4)可以看出,在计算时,需要除法计算但是当测段弯曲角比较小时,这是两个数值很小的两个数相除,在计算机数值计算中容易产生很大的误差,甚至会出现“除法溢出”的异常,从而直接影响坐标增量的计算精度。iii2468122424040320725760iiiii•最小曲率法2:•r=1/cos|cosa1+cosa2+sina1*sina2*cos(ф2-ф1)|•∆H=∆L/2*(cosa1+cosa2)*2r*lg(r/2)•∆N=∆L/2*(sina1*cosф1+sina2*cosф2)*2r*lg(r/2)•∆E=∆L/2*(sina1*sinф1+sina2*sinф2)*2r*lg(r/2)•其中r为测段狗腿角,a,ф为井斜角和方位角,标注1,2分别代表上下测点,∆L为两点之间的井深长度。•∆H,∆N,∆E分别为下测点对上测点在垂深,北坐标和东坐标方向的位移增量。•1.2坐标系转换•由于井眼坐标系与opengl画图坐标是不一致的,必须进行转换。•X[i]=XE[i]•Y[i]=-(YV[i]-YVmin)•Z[i]=-ZN[i]•2.Opengl视景体的设置•(1)观察点位置的确定•gluLookAt(eye_x,eye_y,eye_z,0,0,0,0,1,0);•(2)视景体的设置•利用透视投影函数voidgluPerspective(•GLdoublefovy,//角度•GLdoubleaspect,//视景体的宽高比•GLdoublezNear,//沿z轴方向的两裁面之间的距离的近处•GLdoublezFar//沿z轴方向的两裁面之间的距离的远处•)•3.三维井眼轨迹的实现•画图:•glBegin(GL_LINE_STRIP),glVertex3f(),glend()•添加光照,实现图像的平移,旋转和缩放。