地学信息三维可视化实习报告班级:姓名:学号:上交日期:2016.11.16实习一1.利用对象图形法创建一个三维立方体,并将各顶点设置为不同的颜色对象法是IDL5.0引入面向对象编程概念后出现的,面向对象的基础也就是对象类的使用。
对象类允许编程者将数据和方法封装成一个包,称之为对象。
一个对象类可以重复利用生成多个对象。
IDL 的三维坐标系使用的是右手笛卡尔坐标系,与Microsoft Direct3D 的左手坐标系相区别,示意图如下。
程序:PRO triangularprismoWindow = OBJ_NEW('IDLgrWindow',dimension =[400,400],retain = 2) oView = OBJ_NEW('IDLgrView',viewPlane_Rect =[-1,-1,3,3],zClip = [2,-1],eye = 10)oModel = OBJ_NEW('IDLgrModel');创建多边形oPoly = OBJ_NEW('IDLgrPolygon');设置对象层次体系结构oView->add,oModeloModel->add,oPoly;顶点坐标verts = [[0,0,0],[1,0,0],[0,1,0],[0,0,1]];顶点链接顺序connect =[3,0,1,2,3,0,2,3,3,0,1,3,3,1,2,3];设置多边形顶点与链接关系,类型显示为线oPoly->setproperty,data =verts, polygons = connect,style =1;选择45°oModel->rotate ,[-1,0,-1],45;绘制显示oWindow->draw,oView;设置立方体顶点颜色vertscolor = fix(randomu(undefinevar,3,4)*255)oPoly->setproperty, vert_color = vertsColoroWindow->draw,oView;设置立方体面显示,并渲染显示颜色oPoly->setproperty, shading = 1,style=2oWindow->draw,oViewEND2.读取head.dat中的数据,进行体数据的显示,并实现切片提取操作iTools 是IDL6.0 以后版本提供的功能强大的交互式分析工具。
IDL 初学者可以利用这套智能工具快捷轻松地实现数据读入,数据分析和数据可视化,并且可以输出制作令人眩目的精美图形图像。
有经验的IDL 程序员使用它,可以减少程序开发工作量,甚至可以在iTools框架的基础上创建全新的可视化应用环境。
打开iVolume,在Operations →Volume →Image Plane中可以选择切片pro headfile = 'C:\Users\siyuan\Desktop\IDL实习题\第一次课\数据\head.dat'data = READ_BINARY(file, DATA_DIMS = [80, 100, 57])IVOLUME, dataend3.读取elev_t.jpg图像以及elevbin.dat中的DEM数据:●利用直接图形法显示DEM曲面●利用对象图形法创建曲面对象和纹理对象并进行叠加显示pro testdemfile = 'C:\Users\siyuan\Desktop\IDL实习题\第一次课\数据\elevbin.dat'dem = read_binary(demfile,data_dims = [64,64])imagefile = 'C:\Users\siyuan\Desktop\IDL实习题\第一次课\数据\elev_t.jpg'read_jpeg,imagefile,imagedem = congrid(dem,128,128,/interp)device,decomposed = 0,retain = 2window,0,title = 'dem',xsize = 800,ysize = 600shade_surf,demomodel = obj_new('idlgrmodel')oview = obj_new('idlgrview')osurface = obj_new('idlgrsurface',dem,style = 2)oimage = obj_new('idlgrimage',image,interleave = 0,/interpolate) ;计算归一化显示比例,并在各个方向平移-0.5,从而使图像居中osurface.getproperty,xrange = xr,yrange = yr,zrange = zrxs = norm_coord(xr)xs[0] = xs[0] - 0.5ys = norm_coord(yr)ys[0] = ys[0] - 0.5zs = norm_coord(zr)zs[0] = zs[0] - 0.5osurface.setproperty,xcoord_conv = xs,ycoord_conv = ys,zcoord_conv = zs;曲面上添加纹理对象osurface.setproperty,texture_map = oimage,color = [255,255,255] ;构建对象体系omodel.add,osurfaceopolygons = OBJ_NEW('idlgrpolygon', shading = 1, $data = vertices, polygons = polygons, color = [255,255,255], $texture_coord=texure_coordinates,texture_map=oimage,/texture_inte rp)omodel -> add, opolygons & omodel -> ROTATE, [1, 0, 0], -90omodel -> ROTATE, [0, 1, 0], 30 & xobjview, omodel, /blockend实习二1.绘制函数,其中的网格曲面图pro surfacemyvalue=(findgen(100)-50)*0.1x=rebin(myvalue,100,100,/sample)y=rebin(reform(myvalue,1,100),100,100,/sample)z=-(x^2+y^2-2)*exp(-(x^2+y^2)/2)window,title='laplace of gaussian'surface,z,x,yend2.读取head.dat中的三维动画数组,播放该动画,并存储该动画的像素映射图pro catoonOPENR,unit,FILEPATH('head.dat',SUBDIRECTORY=['examples','data']),/GET _LUNpro testopenr,unit,filepath('C:\Users\siyuan\Desktop\IDL实习题\第一次课\数据\head.dat'),/get_lunh=bytarr(80,100,57,/nozero)readu,unit,hclose,unitxinteranimate,set=[80,100,57],/showloadfor j=0,56do xinteranimate,frame=j,image=h[*,*,j]xinteranimate,50,/keep_pixmapsend3.载入avhrr.png中的数据,并加以显示✧将其转换到“Interrupted Goode”投影坐标系下,并用iimage命令显示✧将第一问中得到的地图转换到“Mollweide”投影坐标系下,并用iimage命令显示pro testfile= 'C:\Users\siyuan\Desktop\IDL实习题\第一次课\数据\avhrr.png'data=read_png(file,r,g,b)red0=rebin(r[data],360,180)green0=rebin(g[data],360,180)blue0=rebin(b[data],360,180)iimage,red=red0,green=green0,blue=blue0,dimensions=[500,600],vie w_grid=[1,3]smap=map_proj_init('interrupted goode')red1=map_proj_image(red0,map_structure=smap,mask=mask,uvrange=uv range,xindex=xindex,yindex=yindex)green1=map_proj_image(green0,xindex=xindex,yindex=yindex)blue1=map_proj_image(blue0,xindex=xindex,yindex=yindex)iimage,red=red1,green=green1,blue=blue1,alpha=mask*255b,/view_ne xtmapstruct = map_proj_init( 'mollweide', /gctp )red2 = map_proj_image( red1, uvrange,image_structure=smap,xindex=xindex2,yindex=yindex2)。