IDL编程基础

所需积分/C币:12 2011-10-21 17:46:10 1.08MB PDF
12
收藏 收藏
举报

IDL 编程基础 上课资料。 武汉大学测绘学院
项 (2)过程的格式必须以PRO作为第一个可执行语句的开始,以END为结束语句。 (3)保存过程的文件名的主文件名必须与PRO后的文件名相同。 (4)过程的扩展名可以省略。若省略,则系统会自动加上默认扩展名PRO 过程的运行过程:编辑、编译和运行。过程的编辑方法:用点命令.edi。过程的编译方 法:用点命令, compile过程的运行方法:功能热键F5;工具栏的运行按钮;运行菜单Run\Run 或者直接在命令行输入程序的名称。过程也可以被其他过程调用,过程的调用格式如下: 过程名[,参数1,…,参数n][,关键字1,…,关键字n 例如,下面是一个绘制三维图形的过程 Pro three plot p. multi=[0, 2, 2 Z =dist(50) contour, z,/follow surface, z shade surf. z device, decomposed=0 loadct. 39 shade surf, zm shades bytscl (z) lp. multi=O Contour, peak, lon, lat, XStyle=l, sTyle=l, Follow, S Levels=vals, C Label=[1, 0, 1, 0,0, 1, 1,0 End TIps ①DL中的续行符是美元的符号“s”这表示|DL命令延续到下一命令行。建议在DL命令 行中不使用续行符,应该在IDL命令行输入完整的IDL命令。 如果这些代码被保存在一个名为 ThreeDplot pro文本文件巾,在命令行上键入此程序的 名宇,它就会自动编译和执行。如下所示: IDL> Three Plot 注意,在上述编译语句中的 ThreeD Plot是想要编译文件的文件名。 14函数 函数的定义和过程非常相似。函数的参数和关键字的定义与过程中的·样。但也两点不 同:(1)函数定义以 Function而不是以Pro开头;(2)函数通常返回一个单一的、特定的IDL 变量给函数调用者。函数文件的格式为 Function函数名[,参数1,…,参数n][,关键字1,…,关键字n 命令序列 Return,表达式 End 例如,例如,想得到一个矢量或一组数组的平均值,可以这样在文木编辑器中编写 Average函数 Function Average, data averageaValue Total (data)/N elements(data) Return averageavalue End 在IDL中,函数的调用语法不·样。函数总是会返回个值,因此把用来接收返回值的 变量放在等号左边,函数调用名放在等号右边,而函数的所有参数和关键字都放在括号内, 如下所示: IDL> thisdata=[3,5,6,2, 9, 5,4 DL> avg= Average(thisdata) IDL> Print, avg 2数据类型 21基本数据类型 基本数据类型是构建其它所有数据类型的基础 IDL基本数据类型 类列解辉 范围 格式 十进制 八(进制十进制十六进制示例 Byte 字节型 nxB 12B Int 整型 -32768~32767o 188 Uint 无符号整型 0~65535 noU n'XU 12U Long 长整型 1 n'OL n'XL 2009L Ulong 无符号长整型0-2321 noUL n XUL 2009UL Long6464位长整型 53~6 'OLL n'xLL 2009LL Uong6464位无符号长02641 n'QULL n nULL 2009ULL 整型 Float 浮点型 -100~10 n 3.14 Double双精度浮点型10301038 D 3.14D Complex复数 -1038~1038 Complex双精度复数 -10~10 String 字符申 0-32767 ello 从表1可以看出,12种基本数据类型可以归纳为整形、浮点型和字符串型三类,使用 应注意以下事项 ●检査整数溢出,如在执行250*300时,正确的答案是75000,但最人的无符号整形 是65535,那么所得到的答案可能是75000-65535=9464 避免数量级相差巨大的浮点数之间的加减运算。如100000000+0.01有可能等于1 000000.00。 避免浮点数的等量运算,例如100个0.05加在起有可能不等于50 避免不同类型的数据进行比较,如不要将整形数据与浮点型数据进行比较。 4 2,2常量 常量是指在程序运行中其值始终不会发生交化的数据。IDL自动生成和维护的一组特殊 变量,系统变量的名称均由感叹号“!”开头,系统变量根据其读写性能分为只读系统变量 和可写系统变量。 ●!d系统变量 提供当前显示设备的信息,此类系统变量包含如下系统变量 匚系统变量名 变量描述 name 当前图形设备的名称 [!a. n_colors当前图形设各使用的颁色数 ! tablesize当前分配的颜色表索引数 dx Size 当前图形窗口的宽(象素) y size 当前图形窗凵的高(象素) d window 当前图形窗口的索引号(没创建和打开图形窗口,值为-1) !p系统变量 更改默认的画图设置,此类系统变量包含如下系统变量: 匚系统变量名 变量描述 p COlOr 画图的颜色索引 !p. charlize标签的字符大小 !.1 linestyle|画线时的线性 p Imult 指定在一个页面上画图的个数 !. position指定在一个页面上画图的位置 !ppsm在画图时所用的符号样式 p. subtitle副标题(显示在x轴下) !ptit1e图的标蔥 ●!x,!y,z系统变量 更改在画图上坐标轴的默认属性,此类系统变量包含如下系统变量(如前述 系统变量,在前面加!x,!y,z): 系统变量名 变量描述 minor 在坐标轴上要显示的刻度数 range 设冒坐标轴上显示数值的沱围 tickbane 为每个主刻度设置一个注记数组(一般是字符串) ticks 坐标轴上显小的刻度段数 title 坐标轴的标题 全局系统变量 5 系统变量 备注 Dtor 度到弧度的转化因子 Rader 弧度到度的转化因了 丌(单精度) I Dpi 丌(双精度) 只读系统变量 Version. ReleaseIDL版木号 I Version。 s family操作平台(“ Win dows’, MacOS’,“unx’或者‘vms’) D Flags 当前设备信息 !P Multi 绘制多个图 !P Font 字体系统 Order 图像生成的方向 可写系统变量 I Path 路途 Except 非法运输,不输出镨误 23变量 变量是指在程序运行过程中其值可以发生变化的数据,变量名的命名规则是:变量名由 英文字母、数字、下划线和符号$组成,而且必须以英文字母开头,长度最多不超过128个, 中问不能有空格,变量名不能是系统内部用于特殊用途的保留字的名称。 IDL保留字 Ar Begin Case Common Do Else End Endcase Endelse EndFor Endif Endre Function Ge Goto Gt Lt Mod Of On ioerror Or Pro Repeat Then Until While Xor 为变量取好名字对于髙效编程是很重要的,选择好的变量名字需要注意的事项有: 最重要的命名注意事项是:变量名要完全、准确地描述该变量所代表的事物,通常 对变量的描述就是最佳的变量名。如卫星运行速度的好的变量名可以为: satellite Velocity或者 velocity,不好的变量名如v,sv,x,x1,x2, satellite等。记 住x,Ⅺ1,x2永远是糟糕的变量名 个好名字要以问题为导向,一个好的名字通常表达的是“什么”(what),而不是 “如何”(how),如对于一条员工的记录的变量名, employee Data要比 inputRec 好 变量名应该有合适的长度,太短的变量名无法传达足够的信息,太长的变量名很难 写,同时会使程序的视觉结构变得模糊不清,平均名字的长度在8到20个字符之 间比较容易调试。 变量命名时应考虑作用域的不同。W.」. Hansen的研究表明较长的名称适用」很少 用到的变量或者全局变量,而较短的变量适用于局部变量或者循环变量。 ●可以在变量名的最后加上类似于 Total、Sum、 Average、Max、Min等计算值限定词, 如 revenue total(总收入)、 expense Total(总支出)等 为特定类型的变量应遵循相应约定俗成的规则。循环变量一般采用i、j和k;为状 态变量取一个比fag更好的名字等 代码阅读的次数远远多于编写的次数,确保所取的名字更侧重于阅读方便而不是编 写方便。 变量的作用域:“作用域”可以看做一种衡量变量知名度的方法:亡的名气到底有多大? 使变量引用局部化 尽可能缩短变量的“存活”时间 减少作用域的一般原则 在循环开始之前再去初始化该循环里使用的变量,而不是在该程序所属的子程序的 开始处初始化这些变量 直到变量即将被使用时再为其赋值 把相关的语句放在一起 把相关的语句提取成单独的子程序 24数组 数组是最简单和最常用的结构化数据类型,一个数组中含有一组类型完全相同,并且可 以用数组下标直接访问的条目。 数组创建函数 表2:IDL函数可以创建矢量和多维数组 数据类型 初始化函数 产生索引值的函数 字节型 StaRr BIngEn 16位有符号整型 IntArr IndEn 32位有符号长整型 Lonarr LIndEn 614位有符号整型 Lon64arr L64IndGen 16位无符号整型 UIntarr UIndGen 32位无符号长整型UoAr ULIndGen 64位无符号整型 ULon64arr UL64Indgen 浮点型 FltArr FIndGen 双精度浮点型 Blair DIndGen 复 ComplexArr CIndGen 双精度复数 DComplexArr DCLndgen 字符串 Starr SIngen 指针 PirAcy None 对象 ObjAr None 所数名称 返回值 7 N elements 数组元素的个数 数组大小和类型信息 0) 数组的最小值 Max( 数组的最大值 数组平均值 Variance 数组值的方差 Stddev( 数组的标准偏差 Momento Mean, Variance Skew kurtosis stddev. mean absolute deviation Total 数组值的和 a了 1,3,5,7 arri- Findgen(5)x10.0 Print arrr arlo] arrl[2: 41, Fcrmat =(10f61 Print size(arr/n elements) Print, Min(arr), Max(arr) Print, Mean(arr), Variance(arr),stddev(arr Print Total(arr) LIps ①数组直接创建法的格式为:数组名=[表达式表] ②数组函数创建法的格式为:数组名=数组创建函数 ③数组的引用方式由以下几种: 格式1:数组名 格式2:数组名[卜标列表 ●格式3:数组名[下标范围] ●数组赋值基本包括三种模式 ⅠDL对数组赋值是比较灵活的,基本包括三种模式 (1)定义数组之后,对元素进行赋值,如: IDL>A-IndGen (3, 3) IDL>A[1,2]=0 (2)直接通过赋值来定义数组: IDL>a=[[,2],[1,2]],[[,2],[1,2]],[[,2],[1,2]]] 这个数组的结构为: Array[2,2,3] (3)通过数组索引和矩阼(指标)运算来赋值: IDL>A[1,*]-A[1,*]*3 数纠下标中“*”代表该维的所有元素。下标运算也可通过“:”指定区间: IDL>A[1:3,*]=A[1:3,*]*3 Reform(函数 Reform o函数可以使数组在固定元素个数的前提下,改变下标引用索引。显 然 ReformO两数可以改变数组的维数,例如: 8 IDL>a= Intarr(10, 10, 10) lDL>C= Reform (a, 200, 5) 与下等价) IDL>d= Reform(a,200,5」)(与上等价) IDL>e= Reform(a,[200,50])(元素个数增多,错误) IDL>e= Reform(a,[20,5])(元素个数减少,错误) Reform(函数将在以下方面产生很好的应用效果; (1)简化数组调用; (2)进行数组索引动态调整,以便不同模式下的引用。 ●Size()函数的剖析 Size(函数能够返回所测试数组的结构信息,设一个M(0=<M<=8)维数组, Data[0:NV1-1,0:N2-1,…,O:NM-1] Dims=Size dala 则Dims返回值的结构为 M,N1,N2,…,NM,A,NS A为数据类型值(在IDL的帮助文件Size()函数的说明中列出了索引值),NS 为所有元素个数。 25指针 指针的使用是现代编程中最容易出错的领域之一,对指针的运用具有其同有的复杂性, 正桷使用指针要求你对所用编译器的内存管理机制有很好的理解。每·个指针包含两个部分: 内存中的某处位置,以及如何解释该位置中的内容。 与指针相关的函数 所数名 功能 示例 Ptr new( 创建用于存储变量地址的指针变量P1=Ptr_new() P七xaxy() 创建指针数组 P2- Ptrarr(3, 3) Ptr free 释放指针变量 Ptr free. P1 Ptr valido 检测指针变量的合法性 Ptr valid (P2) Ptr new(1.0) Print, Ptr valid(p ptr free, p ptr new(工 hagen(4,4)) Print, x ptr ptrarr(10,/allocate heap) ptr[o]=Indgen(10 ps ①指针的创建格式为:指针变量=ptr_new(变量] 2)指针变量检测的格式为:变量= ptr val id([指针变量1,……,指针变量n ③指针的释放格式为: ptr free,指针变量1 指针变量n; ④4)指针变量的调用为:*指针变量 ⑤指针数组的创建格式为:指针数组名= otrar(D1 D8,/allocate heap]), 若省略所有参数,则创建一个初值均为空指针的数组。 26结构 结构是一种特殊的数据类型,它允许将多种不同类型、不同大小的常量、变量和数组等 包装为一个单元 IDL支持两类结构:匿名结构( anonymous structure)和署名结构( name structure)。如 果在使用过程中,结构成员的个数和类型可能发牛变化,一般使用匿名结构,否则使用署名 结构 (1)匿名结构 匿名结构通过在花括号中封装成对的变量名/值(name/aue)来进行创建。 例: image=(name: Image Name, valid range:[0.0, 100.0], data: dist(256)] Help, image 2 image. name ='GPS PRN3' Print image name Print image data Tips ①匿名结构的创建格式为:结构变量={成员1:表达式1,……,成员n:表达式n 2匿名结构的赋值方式为:结构变量成员=表达式 ③匿名结构的调用格式为:结构变量成员 (2)署名结构 睾名结构是由用户创建一个结构模板, c=nav record, time:0.0, lat: 0.0,lon: 0.0, heading: 0.0] Print, rec.Iat rec. Ion Rec trav record rec. time = 12.25 xrec. Ion =30, 24 Print, rec.⊥on ps

...展开详情
试读 17P IDL编程基础
立即下载 身份认证后 购VIP低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
关注 私信
上传资源赚钱or赚积分
最新推荐
IDL编程基础 12积分/C币 立即下载
1/17
IDL编程基础第1页
IDL编程基础第2页
IDL编程基础第3页
IDL编程基础第4页

试读结束, 可继续读2页

12积分/C币 立即下载