IDL 高级培训.ppt_第1页
IDL 高级培训.ppt_第2页
IDL 高级培训.ppt_第3页
IDL 高级培训.ppt_第4页
IDL 高级培训.ppt_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、IDL 高级培训,王志成 2005.11.23,IDL介绍,IDL是美国RSI公司推出的面向矩阵的第四代计算机语言。 IDL是进行数据分析、可视化及跨平台应用开发的最佳选择。IDL集可视、交互分析、大型商业开发为一体,为用户提供了完善、灵活、有效的开发环境。,IDL语言的特性,高级图像处理能力 交互式二维和三维图形技术 面向对象的编程方式 OpenGL图形加速 量化可视化表现 成数学与统计学算法 灵活的数据输入输出方式 跨平台图形用户界面工具包 连接ODBC兼容数据库 多种程序连接工具,IDL的发展,在国外IDL已经被列为大学的标准课程,其功能和应用效果完全可以替代如Matlab等其他同类科学

2、计算应用软件。 在国内IDL要比国外稍微滞后,还处在推广和应用的初期。许多科研单位和一些大学在与国外单位交流中,特别是一些留学归国人员,是IDL在国内应用的先行者和忠实用户。 随着IDL应用和市场的广泛进入和从科研院所的高端应用到更广泛地民用化的接受过程,越来越多的人将了解和接受应用IDL。,IDL程序示例:,Demo_tour 本程序显示了IDL提供的丰富的demo程序。,一、IDL基础,1.1、IDL变量 变量定义 变量在使用前,无需说明类型。 变量的命名规则 变量名称必须以字母和下划线开头,可以包括字母、数字、下划线、美元符号,正确: reade6_$file only_8_bit Co

3、mputerType variables _day_of_year,错误: name.last third%file 4th_list $temp,变量数据类型 Byte 字节型Int 有符号整数Uint无符号整数 Long有符号长整型 Ulong无符号长整型 Long64 64位长整型 Float 浮点型Double双精度浮点型 Complex复数 Dcomplex双精度复数 String 字符串0-32767个字符 Struct 结构 Pointer 指针 Objref 对象的引用,数据类型的转换,1.2、IDL数组,IDL数组运算简介 IDL面向矩阵的特性保证数组运算时不用进行循环。 I

4、DL中使用数组的两个最大优势体现在: (1)数组操作比循环操作快得多 (2)数组语法比相对的循环语法更加精练,例子:对数组元素求和 Npts=1000000L Data=randomu(-1L,npts) Sum=total(data) IDL数组操作语句 Sum=0.0 For i=0L,(npts-1L) do begin sum=sum+datai 循环语句,数组的创建 (1)利用创建。 (2)利用创建函数创建 Byte bytarr() bindgen() Int intarr() indgen() long lonarr() lindgen() ulong ulonarr() uli

5、ndgen() float fltarr() findgen() double dblarr() dindgen() string strarr() sindgen() make_array make_array(3,2,/byte),数组的存储格式 IDL中数组元素的存储是按列进行的。按列存储的方式意味着连续的数组元素也将按顺序被存储,而且数组的第一维(列)变化的最快。 数组的下标 数组的下标可以是标量也可以是矢量。 进行下标操作时,如果下标超过了范围,则该下标被转换为在允许范围内的最小或最大的下标值。,1.3、表达式和运算法则,表达式的书写规则 表达式结果的类型将由表达式右边变量的类型决定

6、。 运算符 数学:+-*/mod 最大 逻辑:Not Eq Ne Le Lt Ge Gt And Or Xor 数组:#数组乘(列乘行) #矩阵乘(行乘列) 指针:* 运算符的优先级 ()指针数组 / mod+- Not逻辑,1.4、数组运算,如果表达式中有一个变量是数组,结果也是数组 如果表达式左边是数组,右边是一个标量,则整个数组将被赋予该标量的值。,A=1,2,3,4 B=3,4,5,6 A+B, A*B A=10.0 B=10.0,20.0,30.0,40.0 A+B,A*B,取大()、取小(0 a=2,4,6,7 b=4,5,5,6 print, ab,关系运算符 eq ne le

7、lt ge gt 返回一个数字结果,其中真值用1B表示,假用0B表示。 关系运算符也可以作用于数组的自变量,如果两个自变量都是数组,那么关系运算符将依次作用于两个数组中每一对对应的元素。 a=1.0 b=2.0 help,a gt b if (a lt b) then print,True a=5 b=bindgen(9) print,b c=b le a Print,c a=2,4,6,8 b=3,4,5,6 print,a gt b 可以用于屏蔽数组中的某些值。 arr=indgen(9) mask=arr ge 5 result=mask*arr,1.5数组操作函数,数组元素的数目 n_

8、elements函数返回数组中所有元素的数目: arr=findgen(32,32) print,n_elements(arr) 数组的大小和类型 size函数返回一个长整型的矢量结果,包含了输入数组的大小和类型信息。可选关键字n_dimensions,dimensions,type,tname,n_elements分别返回维数、每维的大小、类型代码、类型名称和元素个数 arr=dist(256) help,arr print,size(arr,/dimension) print,size(arr,/type) print,size(arr,/tname) print,size(arr,/n_

9、elements),最大值和最小值 max min 函数 arr=dist(32) print,min(arr),max(arr) 总和 total函数返回数组元素的总和,也可以添加可选变量来计算特定维度的元素总和。 total函数还可以使用可选的关键字cumulative来计算累计的和。 arr=indgen(3,3) print,total(arr) arr=indgen(9) print,total(arr,/cumulative),1.6数组中元素的定位,查找符合条件的值 where函数返回数组或数组表达式中非零元素的下标,使用where函数和逻辑表达式可以查找符合条件的值。 wher

10、e函数允许引入一个可选变量count来检查是否找到符合条件的值。 使用where函数时,数组使用一维下标 arr=indgen(9)*10 index=where(arr gt 35) print,arrindex,1.7改变数组的维度和大小,改变数组的大小 rebin() 通过整数因子数组的大小 congrid() 调整数组到任意大小 Arr=20,30,40 resizeArr=rebin(arr,9,/sample) conArr=congrid(arr,9) conArr=congrid(arr,10),1.8结构,结构是由一组类型不同的常量、变量和数组组合而成的组合数据类型。结构中的

11、每一个变量或者数组成为结构的成员。 结构分为匿名结构和署名结构两种,匿名结构是指没有名字的结构。如果在使用过程中,结构成员的个数和类型可能发生变化,一般使用匿名结构;否则使用署名结构。 匿名结构一般用于程序之间值的传递,署名结构主要用在事件结构中,1.8.1匿名结构 创建: 结构变量 = 成员1:表达式1,成员2:表达式2,成员n:表达式n 赋值: 格式:结构变量.成员 = 表达式 调用: 结构变量.成员 = 表达式,1.8.2署名结构 创建: 结构变量=结构名,成员1:表达式1,成员2:表达式2, ,成员n:表达式n 1.8.3结构数组 结构数组可以使用已有的结构变量和函数REPLICATE

12、创建,对于署名结构还可以使用结构名创建,其格式为: 格式1:结构数组名 = REPLICATE( 结构变量,D1, ,D8 ),1.9指针,指针的创建 指针变量 = PTR_NEW(变量) 指针的调用 *指针变量 检测指针的有效性 result=ptr_valid(ptr) 指针的释放 ptr_free,ptr,指针数组 p_arr=ptrarr(d1,d2,d3,),二、编写IDL程序,2.1、定义和编译程序 过程(pro) 过程一般将几个相关的操作加到一个程序模块中。 过程以pro 开头,end结束 函数(function) 函数一般将一个操作加载到一个程序模块中,并返回结果 函数以fun

13、ction开头,end结束,并包括一个return语句返回结果,命名和编译源文件 命名一个IDL源文件的标志形式是在过程或函数名称后加上扩展名.pro 过程和函数都可以通过.compile命令进行手动编译或是通过IDL IDE环境进行编译。 当需要时,过程和函数会在运行时自动编译,如果IDL调用的过程或函数之前未被编译过,则IDL会搜索路径下所有的文件夹以搜索源文件的名称。,2.2控制语句,If 语句 if 条件 then 语句 if 条件 then begin 语句 endif if 条件 then 语句 else 语句 if 条件 then begin 语句 endif else begi

14、n 语句 endelse,Case语句 case语句根据一个标量的表达式来选择某个语句或语句块运行。 case 表达式 of 情况1: 情况2:语句 情况3:begin 语句 end else: 语句 endcase 当表达式和其中的某个情况匹配,相应的语句被执行, case语句结束,如果没有匹配的情况,那么执行else下的语句,如果没有else语句,将会发生错误,建议在case 语句中都加上else test_,For语句 for 语句每次循环执行一个语句或语句块 for i=v1,v2 do 语句 for i=v1,v2, inc do 语句 for i=v1,v2,inc

15、 do begin 语句 endfor 默认条件下增量为1,也可以设定增量 While语句 当特定的条件为真,while语句执行单个语句或语句块 while 条件 do 语句 while 条件 do begin 语句 endwhile Test_,Return语句 return语句在当前程序单元中产生一个即时出口,并返回控制。 return,结果 return Break语句 break语句用来中断循环的执行 break Continue语句 continue语句终止本次循环的执行,执行下次循环 continue Test_ Test_ Te

16、st_,2.3参数和关键字,参数 参数用来将变量和表达式传递到过程或函数中。参数有时也被称为位置参数,因为它们在自变量中的位置决定了它们在调用的过程或函数中如何被使用。参数通常作为输入/输出自变量,因为这些自变量在过程或函数中不可缺少。 关键字 关键字为可选自变量或表达式,它可以传递给调用程序,但不是强制性的。输入关键字可以用来指定一个自变量,或者用来设置一个布尔标识。,使用参数和关键字 在传递给过程或函数之前,输入的参数必须先定义。一个合理的过程或函数,都必须先检测其中任何的强制性输入自变量是否已经定义,然后在进行其他操作。 输出位置参数和关键字通常在过程或函数中创建

17、,因此不需要在调用过程或函数时定义。 检测参数和关键字 n_params() 返回传递的参数数目 n_elements() 返回一个变量中元素的数目(零表示未定义) size() 返回一个变量的类型和大小信息 keyword_set 用于检测布尔关键字,如果自变量定义则返回为真 E,2.4全局变量,只读的系统变量 保存了当前IDL时间段的信息。 ! 当前图像设备的名称 !d.window 当前图形窗口的索引 !d.table_size 当前颜色表的大小 可写的系统变量 可写的系统变量可以用来调整IDL的默认设置。如果用户改变了可写系统变量的值,那么这种改变在所有层次

18、上都是有效的。 !p.multi 设置多面板成图 !p.font 为图形中的字符选择默认字体 !order 控制图像显示顺序,1、直接图形法介绍,直接图形法是将IDL将图形或图像直接绘制在用户指定的图形设备上。 直接图形法,速度快,交互差,和图形设备有关 直接图形法对内存有默认的管理方法,占用内存少,用户不必自己释放内存。 IDL支持的图形设备:,图形设备的选择 通过set_plot程序可以选择一个图形设备,所有接下去的图形操作都输入到该设备中。 entry_device=! set_plot,PS plot,indgen(10) device,/close_file set_pl

19、ot,entry_device,2、显示模式,8位显示模式 最多支持256色 相对应于一个颜色表 所有的IDL设备都支持 24位显示模式 真彩色模式 每个像素的颜色由红、绿、蓝各自的强度混合而成 支持16777216色 不需颜色表,3、图形窗口,当选择的图形设备为WIN、MAC或X时,图形结果将直接输出到计算机显示器的一个窗口中。如果图形窗口不存在,则第一个图形或图形显示命令将自动打开一个新的图形窗口。 与图形窗口操作有关的过程 Window 创建一个新的窗口 Wset 将一个存在的窗口变为当前窗口 Wshow 显示、隐藏存在的窗口 Erase 擦除存在窗口中的内容 Wdelete 删除一个存

20、在的窗口 窗口创建的示例程序:BROWNIAN.pro,4、坐标系统,IDL提供了三种独立的坐标系统:数据坐标系统、设备坐标系统和正交坐标系统。坐标系统决定着图像如何显示以及显示在窗口的位置。用户可以选用三种坐标系统的一种作为默认坐标系统,也可以在应用系统中同时使用多种坐标系统。 数据坐标系统:是指与通常的数据范围相同的窗口坐标系统。该系统可以有二维的或者三维的,也可以是线型的、对数的、或者半对数的。该坐标系统是系统默认的坐标系统。,设备坐标系统:是选定设备的实际坐标系统。设备坐标是整数,范围从显示窗口的左下角(0,0),到右上角(Vx -1,Vy -1)。Vx和Vy是设备(例如显示窗口)的列

21、序号和行序号。注意:对于图像,数据坐标与设备坐标一样。图像的设备坐标与图像内的像素位置直接相关。 归一坐标系统:当前图形窗口或设备的左下角坐标为(0.0,0.0),右上角的坐标为(1.0,1.0)。普通坐标非常有用,用户使用普通坐标指定不依赖于当前图形窗口或设备大小和形状的位置。 坐标的转换 使用convert_coord可以在数据、普通和设备坐标之间转换。 result=convert_coord(x,y,/to_coordinate),5、颜色表,载入IDL内置的颜色表 LOADCT,1 IDL内置了41中颜色表 使用图形界面交互选择颜色表 XLOADCT 交互式修改颜色表 XPALETT

22、E 在程序中修改颜色表 TvLCT,直接图形法例子: 模拟布朗运动 模拟霓虹灯效果,面向对象的程序设计,面向对象的程序设计特点: 封装性 封装意味着类和对象应具有明确的功能,并且提供与其它 类和对象的接口。封装后的类和对象的代码将处于隐藏和 保护状态,从而使得程序更加安全和稳定。 继承性 继承有三个主要优点:一是允许建立类的层状结构(树状 结构);二是派生类可以继承基类的属性、事件和方法; 三是派生类可以建立添加自己的属性、事件和方法。 多态性 多态是创建类时一种极为有效的手段。它可以使用户对具有相同功能 的属性、事件和方法,采用某种标准进行统一命名。,面向对象的程序设计方法:,面象对象程序设

23、计的方法可以分为以下几个步骤: 直接利用IDL提供的基类建立相应的对象。 利用基类创建派生类,定义派生类的属性、事件和方法,并建立相应的对象。 创建用户自己的新类,定义新类或者其派生类的属性、事件和方法,并建立相应的对象。 为对象设置各种属性。 为对象选择指定的事件。 为对象选择或者设计相应的方法。 为对象或者其方法添加相应的过程。 利用GUI完成各对象之间的相互调用,并实现最终的应用程序。,类的创建,类的定义 类的定义部分主要是创建类中所要使用的数据结构。 格式:PRO ClassName_DEFINE struct = ClassName, data1:value1, , dataN:va

24、lueN END 注意:类的名称ClassName和过程的名称ClassName_DEFINE的关系,必须严格按照上述格式。即:过程的名称是由类的名称、两个下划线“_”和“DEFINE”组合而成。,子类的定义 根据类的继承性,可以使用基本类(即基类)创建子类。创建子类可以使用包含基类和指定结构变量,并且具有如下格式的过程: 格式:PRO ClassName_DEFINE struct=ClassName,INHERITS BaseClass, $ data1:value1,dataN:valueN END 功能:在基类上,创建一个指定的子类。 说明:BaseClass:用于给出基类的名称。子类

25、ClassName在拥有基类BaseClass的所有成员的基础上,还可以创建自己的成员:data1,dataN 。 注意:在基类名称BaseClass的前面必须加上继承说明INHERITS。,类的方法定义,为了访问类和对象的成员,就需要为该对象设定相应的访问事件,同时在该对象所在的类上创建相应的方法来实现。下面首先给出方法的一般格式。然后用实例说明创建事件和方法的详细过程。 方法的格式为: PRO ClassName:MethodName , 参数1, ,参数n, 关键字1, ,关键字m 语句序列 END 或者 FUNCTION ClassName:MethodName , 参数1, ,参数n

26、, 关键字1, ,关键字m 语句序列 RETURN, 表达式 END 技巧:用户在设计方法的时候,IDL为每一个方法提供了一个方便控制对象本身的隐含对象,即:对象SELF。SELF用在过程或者函数中,SELF是指类创建的当前对象自身。,类的初始化方法 为了更好的访问类和对象,需要为该类及其创建对象进行初始化设置,或者进行相应的约束控制等。这时需要创建一个的初始化方法。其格式为: 格式:PRO ClassName:Init , 参数1, ,参数n, 关键字1, ,关键字m 语句序列 END 功能:用于创建一个初始化方法。 说明:该方法将在每一次使用类创建对象时,被直接执行。,类实现的例子: 进度

27、条类的实现,IDL对象图形系统,对象图形系统是由窗口对象(Window)、场景对象、视图组对象、视图对象、模式对象和基本图元对象组成。它们的层次关系为:场景对象(Scene)是由一个或者多个视图组对象(Viewgroup)组成;视图组对象(Viewgroup)是由一个或者多个视图对象(View)组成;视图对象(View)是由一个或者多个模式对象(Models)组成;模式对象(Models)是由一个或者多个基本图元对象组成(Atomic Graphic Object);基本图元对象是由IDLgrAxis、IDLgrContour、IDLgrImage、IDLgrLight、IDLgrPlot、IDLgrPolygon、IDLgrPolyline、IDLgrSurface、IDLgrText和IDLgrVolume等利用OBJ_NEW函数创建;最后把最终的场景再在窗口对象中显示。,对象图形系统中各种对象的创建过程可以描述如下:,(1)由窗口类IDLgrWindow创建窗口对象。 (2)由场景类IDLgrScene创建场景对象。 (3)由视图组类IDLgrVie

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论