第12章 FORTRAN图形操作
- 格式:ppt
- 大小:1.01 MB
- 文档页数:24
FORTRAN编程中PGPLOT绘图库的制作与调用文档编写:马利华PGPLOT是一个不依赖于任何装置的数据绘图程序库。
程序库由加州理工学院的Tim Pearson从1983开始编写,大多以FORTRAN程序写成。
它被设计成模组化的应用程序接口,可以输出到数种绘图装置上。
因为该程序库具备低阶(字、点、线、面)和高阶的绘图功能,被广泛应用于学术和科学社群。
PGPLOT可以被第三方重新散布和修改,但只能以编译过的二进制档案形式。
无论原始的或修改过的源代码都不能被重新散布。
最近的版本是5.2.2,于2001年二月发布。
PGPLOT提供了C和Fortran 77的接口,也有许多由用户提供的其他编程语言接口,例如:C++、perl、python、ruby、tcl/tk...等。
PGPLOT可以做许多种不依赖于任何装置的输出,包含数种图档格式、图形显示终端、PostScript装置,及X Window。
也可以用图形游标来帮助输入数据。
它可以在许多种操作系统上运作,包含大多的Unix-like系统、Mac OS,及Microsoft Windows。
因为此程序发行较早,相对于较新的套件,如PLplot,PGPLOT有许多的限制。
特别是PGPLOT只支援8位元的彩图,而不是完整的RGB色彩;而且也没有简单的方法来直接绘图到程式内存中。
目前该程序库的应用范围仍然很广。
参照程序包说明:aaaread.me文件给出的Windows95/98/NT下库文件制作过程,以下给出在Windows 7下,PGPLOT.lib静态库文件的制作过程。
编译环境:Windows 7(sp1)64位操作系统,采用Intel Visual Fortran编译器,运行在Miscrosoft Visual Studio(Ultimate 2013 Version 12.0.21005.1 REL)IDE环境,Fortran版本为Intel(R) Visual Fortran Package ID: w_fcompxe_2013_sp1.1.139。
1 FORTRAN77四则运算符+ - * / ** (其中**表示乘方)在表达式中按优先级次序由低到高为: +或-→*或/→**→函数→()2 FORTRAN77变量类型2.1 隐含约定:I-N规则凡是以字母I,J,K,L,M,N六个字母开头的,即认为是整型变量,其它为实型变量。
2.2 用类型说明语句确定变量类型:可以改变I-N规则2.3 用IMPLICIT语句将某一字母开头的全部变量指定为所需类型如 IMPLICIT REAL (I,J)三种定义的优先级别由低到高顺序为:I-N规则→IMPLICIT语句→类型说明语句,因此,在程序中IMPLICIT语句应放在类型说明语句之前。
2.4 数组的说明与使用使用I-N规则时用DIMENSION说明数组,也可在定义变量类型同时说明数组,说明格式为:数组名(下标下界,下标上界),也可省略下标下界,此时默认为1,例:DIMENSION IA(0:9),ND(80:99),W(3,2),NUM(-1:0),A(0:2,0:1,0:3)REAL IA(10),ND(80:99)使用隐含DO循环进行数组输入输出操作:例如WRITE(*,10) ('I=',I,'A=',A(I),I=1,10,2)10FORMAT(1X,5(A2,I2,1X,A2,I4))2.5 使用DATA语句给数组赋初值变量表中可出现变量名,数组名,数组元素名,隐含DO循环,但不许出现任何形式的表达式:例如DATA A,B,C/-1.0,-1.0,-1.0/DATA A/-1.0/,B/-1.0/,C/-1.0/DATA A,B,C/3*-1.0/CHARACTER*6 CHN(10)DATA CHN/10*' '/INTEGER NUM(1000)DATA (NUM(I),I=1,500)/500*0/,(NUM(I),I=501,1000)/500*1/3 FORTRAN77程序书写规则程序中的变量名,不分大小写;变量名称是以字母开头再加上1到5位字母或数字构成,即变更名字串中只有前6位有效;一行只能写一个语句;程序的第一个语句固定为PROGRAM 程序名称字符串某行的第1个字符至第5个字符位为标号区,只能书写语句标号或空着或注释内容;某行的第1个字符为C或*号时,则表示该行为注释行,其后面的内容为注释内容;某行的第6个字符位为非空格和非0字符时,则该行为上一行的续行,一个语句最多可有19个续行;某行的第7至72字符位为语句区,语句区内可以任加空格以求美观;某行的第73至80字符位为注释区,80字符位以后不能有内容。
Sun Microsystems, Inc.有关本文档的建议请发到:/hwdocs/feedback Fortran 用户指南Sun™ Studio 8部件号码 817-5802-10 2004 年 4 月,修订 A版权所有© 2004 Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, California 95054, U.S.A. 保留所有权利。
美国政府权利―商业软件。
政府用户在使用时应遵循 Sun Microsystems, Inc. 的标准许可协议和 FAR 及其补充中的适用规定。
使用本软件应遵守许可证条款。
此次分发可能包含由第三方开发的内容。
该产品的部分内容可能出自 Berkeley BSD 系统,由加州大学 (University of California) 授权。
UNIX 是在美国和其它国家(地区)的注册商标,由 X/Open Company, Ltd. 独家授权。
Sun、Sun Microsystems、Sun 徽标、Java、JavaHelp 是 Sun Microsystems, Inc. 在美国和其它国家(地区)的商标或注册商标。
所有的 SPARC 商标均需获得授权才能使用,它们是 SPARC International, Inc. 在美国和其它国家(地区)的商标或注册商标。
标有 SPARC 商标的产品都基于由Sun Microsystems, Inc. 开发的体系结构。
该产品为美国的出口控制法所涵该和控制,并有可能要遵守其它国家(地区)的出口或进口法规。
严禁将产品用于核、导弹、生化武器或核海事等最终目的或交给有此类企图的最终用户,无论是直接还是间接。
严禁将产品出口或再次出口到美国禁运的国家(地区)或美国出口排除列表中的实体,包括但不限于被拒绝的人员以及专门指定的公民列表。
本文档按“原样”提供,对所有明示或默示的条件、陈述和担保,包括对适销性、特殊用途的适用性或非侵权性的默示保证,均不承担任何责任,除非此免责声明的适用范围在法律上无效。
fortran指令大全附录 C SCILAB 部分函数指令表(c)LIAMA. All rights reserved.(注解:本指令表只收集了部分常用指令, 有关全部指令请参照文档文件)+ 加- 减* 矩阵乘数组乘*.1. 通用指令^ 矩阵乘方数组乘方^.\ 反斜杠或左除help 在线帮助/ 斜杠或右除apropos 文档中关键词搜寻或.\ 数组除/. ans 缺省变量名以及最新表达式的运算结果== 等号~= 不等号clear 从内存中清除变量和函数< 小于exit 关闭SCILAB > 大于quit 退出SCILAB <= 小于或等于save 把内存变量存入磁盘>= 大于或等于exec 运行脚本文件&,and 逻辑与mode 文件运行中的显示格式|,or 逻辑或getversion 显示SCILAB 版本~,not 逻辑非ieee 浮点运算溢出显示模式选择: 冒号who 列出工作内存中的变量名( ) 园括号edit 文件编辑器[ ] 方括号type 变量类型{ } 花括号what 列出SCILAB 基本命令小数点.format 设置数据输出格式, 逗号chdir 改变当前工作目录; 分号getenv 给出环境值// 注释号mkdir 创建目录= 赋值符号pwd 显示当前工作目录' 引号evstr 执行表达式' 复数转置号转置号'.ans 最新表达式的运算结果2.运算符和特殊算符%eps 浮点误差容限, =2-52≈2.22×10-16%i 虚数单位= √(-1) %inf 正无穷大%pi 圆周率,π=3.1415926535897....3. 编程语言结构abort 中止计算或循环break 终止最内循环case 同select 一起使用continue 将控制转交给外层的for或while循环else 同if一起使用elseif 同if一起使用end 结束for,while,if 语句for 按规定次数重复执行语句if 条件执行语句otherwise 可同switch 一起使用pause 暂停模式return 返回select 多个条件分支then 同if一起使用while 不确定次数重复执行语句eval 特定值计算feval 函数特定值计算或多变量计算function 函数文件头global 定义全局变量isglobal 检测变量是否为全局变量error 显示错误信息lasterror 显示最近的错误信息sprintf 按格式把数字转换为串warning 显示警告信息4.基本数学函数acos 反余弦acosh 反双曲余弦acot 反余切acoth 反双曲余切acsc 反余割acsch 反双曲余割asin 反正弦asinh 反双曲正弦atan 反正切atanh 反双曲正切cos 余弦cosh 双曲余弦cotg 余切coth 双曲余切sin 正弦sinh 双曲正弦tan 正切tanh 双曲正切exp 指数log 自然对数log10 常用对数log2 以2为底的对数sqrt 平方根abs 绝对值conj 复数共轭imag 复数虚部real 复数实部ceil 向上(正无穷大方向)取整fix 向零方向取整floor 向下(负无穷大方向)取整round 四舍五入取整sign 符号函数gsort 降次排序erf 误差函数erfc 补误差函数gamma gamma 函数interp 插值函数interpln 线性插值函数intsplin 样条插值函数smooth 样条平滑函数spline 样条函数quarewave 方波函数sign 符号函数double 将整数转换为rank 矩阵秩trace 矩阵迹cond 矩阵条件数rcond 逆矩阵条件数inv 矩阵的逆lu LU分解或高斯消元法pinv 伪逆qr QR分解givens Givens 变换linsolve 求解线性方程lyap Lyapunov 方程hess Hessenberg 矩阵poly 特征多项式schur Schur 分解expm 矩阵指数expm1 矩阵指数的Pade逼近expm2 用泰勒级数求矩阵指数expm3 通过特征值和特征向量求矩阵指数funm 计算一般矩阵函数logm 矩阵对数sqrtm 矩阵平方根6. 特性值与奇异值spec 矩阵特征值gspec 矩阵束特征值bdiag 块矩阵, 广义特征向量eigenmarkov 正则化Markov 特征向量pbig 特征空间投影svd 奇异值分解sva 奇异值分解近似7. 矩阵元素运算cumprod 元素累计积cumsum 元素累计和hist 统计频数直方图max 最大值mean 平均值median中值min 最小值prod 元素积sort 由大到小排序std 标准差sum 元素和trapz 梯形数值积分corr 求相关系数或方差8. 稀疏矩阵运算sparse 稀疏矩阵(只存储非零元素)adj2sp 邻接矩阵转换为稀疏矩阵full 稀疏矩阵转换为全矩阵mtlb_sparse 将SCILAB 稀疏矩阵转换为MATLAB稀疏矩阵格式sp2adj 稀疏矩阵转换为邻接矩阵speye 稀疏矩阵方式单位阵sprand 稀疏矩阵方式随机矩阵spzeros 稀疏矩阵方式全零阵lufact 稀疏矩阵LU 分解lusolve 稀疏矩阵方程求解spchol 稀疏矩阵Cholesky分解9. 输入输出函数diary 生成屏幕文本记录disp 变量显示file 文件管理input 用户键盘输入load 读已存的变量mclose 关闭文件mget 读二进制文件mgetl 按行读ASCII 码文件mgetstr 读字符串中单个字mopen 打开文件mput 写二进制文件mfscanf 读ASCII 码文件print 将变量记录为文件read 读矩阵变量save 存变量为二进制文件strartup 启动文件write 按格式存文件xgetfile 对话方式获取文件路径x_dialog 建立Xwindow参数输入对话框Tk_Getvar 得到Tk 文件变量Tk_EvalFile 执行Tk 文件10. 函数与函数库操作deff 在线定义函数edit 函数编辑器function 打开函数定义functions SCILAB 函数或对象genlib 在给定目录下建立所有文件的函数库get_function_path读函数库的文件存储目录路径getd 读函数库中的全部文件getf 在文件中定义一个函数lib 函数库定义macro SCILAB函数或对象macrovar 输入变量个数newfun 输出变量个数11. 字符串操作code2str 将SCILAB 数码转换为字符串convstr 字母大小转换emptystr 清空字符串grep 搜寻相同字符串part 字符提取str2code 将字符串转换为SCILAB数码string 字符串转换strings SCILAB 对象, 字符串strcat 连接字符strindex 字符串的字符位置搜寻strsubst 字符串中的字符替换12. 日期与时间date 日期getdate 读日期与时间timer CPU时间计时13. 二维图形函数plot2d 直角坐标下线性刻度曲线champ 2 维向量场champ1 由颜色箭头表示的2维向量场contour2d 等高线图errbar 曲线上增加误差范围框线条grayplot 应用颜色表示的表面xgrid 画坐标网格线histplot 统计频数直方图Matplot 散点图阵列14. 三维图形函数plot3d 三维表面plot3d1 用颜色或灰度表示的三维表面param3d 三维中单曲线param3d1 三维中多曲线contour 三维表面上的等高线图hist3d 三维表示的统计频数直方图geom3d 三维向二维上的投影15. 线条类图形xpoly 单线条或单多边形xpolys 多线条或多各多边形xrpoly 正多边形xsegs 非连接线段xfpoly 单个多边形内填充xfpolys 多个多边形内填充xrect 矩形xfrect 单个矩形内填充xrects 多个矩形内填充xarc 单个弧线段或弧园xarcs 多个弧线段或弧园xfarc 单个弧线段或弧园填充xfarcs 多个弧线段或弧园填充xarrows 多箭头16. 图形注释, 变换xstring 图形中字符xstringb 框内字符xtitle 图形标题xaxis 轴名标注plotframe 图形加框并画坐标网格线isoview 等尺寸比例显示(原图形窗口不改变)square 等尺寸比例显示(原图形窗口改变)xsetech 设置小窗口xchange 转换实数为图形象素坐标值subplot 设置多个子窗口17. 图形颜色及图形文字colormap 应用颜色图getcolor 交互式选择颜色图addcolor 增加新色于颜色图graycolormap 线性灰度图hotcolormap 热色(红到黄色)颜色图xset 图形显示方式设定xget 读当前图形显示方式设定getsymbol 交互式选择符号和尺寸18. 图形文件及图形文字xsave 将图形存储为文件xload 从磁盘中读出图形文件xbasimp 将图形按PS文件打印或存储为文件xs2fig 将图形生成Xfig 格式文件xbasc 取消图形窗及其相关内容xclear 清空图形窗driver 选择图形驱动器xinit 图形驱动器初始化xend 关闭图形xbasr 图形刷新replot 更改显示范围后的图形刷新xdel 关闭图形xname 改变当前图形窗名称19. 控制分析用图形bode 伯德图坐标gainplot 幅值图坐标(伯德图中的幅值图) nyquist 奈奎斯特图m_circle M-圆图chart 尼库拉斯图black Black-图evans 根轨迹图sgrid s 平面图plzr 零-极点图zgrid z 平面图20. 图形应用中的其它指令graphics 图形库指令表xclick 等待鼠标在图形上的点击输入locate 由鼠标点击读入图形中的多点位置坐标xgetmouse 由鼠标点击读入图形中的当前点位置坐标21. 系统与控制abcd 状态空间矩阵cont_mat 可控矩阵csim 线性系统时域响应dsimul 状态空间的离散时域响应feedback 反馈操作符flts 时域响应(离散、采样系统〕frep2tf 基于传递函数的频域响应freq 频域响应g_margin 幅值裕量imrep2ss 基于状态空间的脉冲响应lin 线性化操作lqe Kalman 滤波器lqg LQG补偿器lqr LQ补偿器ltitr 基于状态空间的离散时域响应obscont 基于观测器的控制器observer 观测器obsv_mat 观测矩阵p_margin 相位裕量phasemag 相位与幅值计算ppol 极点配置repfreq 频域响应ricc Riccati 方程rtitr 基于传递函数的离散时域响应sm2ss 系统矩阵到状态空间变换ss2ss 反馈连接的状态空间到状态空间变换ss2tf 状态空间到传递函数变换stabil 稳定性计算tf2ss 传递函数到状态空间变换time_id SISO系统最小方差辨识22. 鲁棒控制augment 被控对象增广操作bstap Hankel 矩阵近似ccontrg H∞控制器dhnorm 离散H∞范数h2norm H2 范数h_cl 闭环矩阵h_inf H∞控制器h_norm H∞范数hankelsv Hankel 矩阵奇异值leqr H∞控制器的LQ增益linf 无穷范数riccati Riccati 矩阵sensi 敏感函数23. 动态系统arma ARMA 模型arma2p 基于AR模型中获得多项式矩阵armac ARMAX 辨识arsimul ARMAX系统仿真noisegen 噪声信号发生器odedi 常微分方程仿真检测prbs_a 伪随机二进制序列发生器reglin 线性拟合24. 系统与控制实例artest Arnold 动态系统bifish 鱼群人口发展的离散时域模型boucle 具有观测器的动态系统相位图chaintest 生物链模型gpech 渔业模型fusee 登陆火箭问题lotest Lorennz 吸引子mine 采矿问题obscontl 可控可观系统portr3d 三维相位图portrait 二维相位图recur 双线性回归方程systems 动态系统tangent 动态系统的线性化tadinit 动态系统的交互初始化25. 非线性工具(优化与仿真〕bvode 边界值问题的常微分方程dasrt 隐式微分方程过零解dassl 代数微分方程datafit 基于测量数据的参数辨识derivative 导数计算fsolve 非线性函数过零解impl 线性微分方程int2d 二维定积分int3d 三维定积分intg 不定积分leastsq 非线性最小二乘法linpro 线性规划lmisolver 线性不等矩阵ode 常微分方程ode_discrete 离散常微分方程ode_root 常微分方程根解odedc 连续/离散常微分方程optim 非线性优化quapro 线性二次型规划semidef 半正定规划26. 多项式计算coeff 多项式系数coffg 多项式矩阵逆degree 多项式阶数denom 分母项derivat 有理矩阵求导determ 矩阵行列式值factors 因式分解hermit Hermit 型horner 多项式计算invr 有理矩阵逆lcm 最小公倍数ldiv 多项式矩阵长除numer 分子项pdiv 多项式矩阵除pol2des 多项式矩阵到表达式变换pol2str 多项式到字符串变换polfact 最小因式residu 余量roots 多项式根simp 多项式化简systmat 系统矩阵27. 信号处理%asn 椭圆积分%k Jacobi 完全椭圆积分%sn Jacobi 椭圆函数analpf 模拟量低通滤波器buttmagButterworth 滤波器响应cepstrum 倒谱计算cheb1mag Chebyshev 一型响应cheb2mag Chebyshev 二型响应chepol Chebyshev 多项式convol 卷积corr 相关, 协方差cspect 谱估计(应用相关法)dft 离散富立叶变换fft 快速富立叶变换filter 滤波器建模fsfirlin FIR滤波器设计hank 协方差矩阵到Hankel矩阵变换hilb Hilbert 变换iir IIR数字滤波器intdec 信号采样率更改kalm Kalman 滤波器更新mese 最大熵谱估计mfft 多维快速富立叶变换mrfit 频率响应拟合phc Markov 过程srkf Kalman 滤波器平方根sskf 稳态Kalman 滤波器system 观测更新wfir 线性相位FIR 滤波器weiener Weiener(维纳)滤波器window 对称窗函数yulewalk 最小二乘滤波器zpbutt Buthererworth 模拟滤波器zpch1 Chebyshev 模拟滤波器28. 音频信号analyze 音频信号频域图auread 读*.au 音频文件auwrite 写*.au 音频文件lin2mu 将线性信号转换为µ率码信号loadwave 取*.wav 音频文件mapsound 音频信号图示mu2lin 将µ率码信号转换为线性信号playsnd 音频信号播放savewave 存*.wav 音频文件wavread 读*.wav 音频文件wavwrite 写*.wav 音频文件29. 语言与数据转换工具ascii 字符串的ASCII码excel2sci 读ASCII 格式的Excel 文件fun2string 将SCILAB 函数生成ASCII 码mfile2sci 将MATLAB 的M 格式文件转换为SCI格式文件mtlb_load 取MATLAB第4版本文件中变量matlb_save 按MATLAB 第 4 版本文件格式存变量pol2tex 将多项式转换为TeX格式sci2for 将SCILAB函数转换为FORTRAN格式文件texprint 按TeX 格式输出SCILAB 对象translatepaths 将子目录下的所有MATLAB 文件转换为SCI文件格式一个公式写成Fortran 语言代码program baiduinteger::I,J,Nreal*8::Cr,Treal*8,dimension(:),all ocatable ::P,XN=3!变量X的个数Cr=5.0d0!常量Cr,自己设定T=4.0d0!常量T,自己设定allocate(P(N),X(N))! =======读入变量X 的值do I=1,Nwrite(*,*)"请输入第",I," 个变量的值:"read(*,*)X(I)enddo! =======读入变量X 的值do I=1,NP(I)=(-4.2d0/Cr**2*X( I)+2.9/Cr)*Twrite(*,*)“第”,I," 个变量X 对应结果:",P(I)enddoend。
fortran文件操作From: 《Fortran 95 程序设计》彭国伦1.文件读取的概念:读取:“顺序读取”和“直接读取”。
保存:“文本文件”和“二进制文件”。
二进制文件:读取快,因为保存格式和数据在内存中的保存方法一样,同时也节省空间。
----------------------------------2. 文件的操作:----------------------------------open的使用:使用open命令打开文件之后,就可以对文件来做输入输出。
example:program ex0901impicit noneopen(unit=10, file='hello.txt') ! 打开hello.txt文件, unit指定文件代码,file 指定文件名称。
write(10, *) "hello" !在代码为10的文件中写入hellostopend program ex0901open中有很多参数可以使用,详细如下:OPEN(UNIT=number, FILE='filename', FORM='...', STATUS='...', ACCESS='...', RECL=length, ERR=label, IOSTAT=iostat, BLANK='...', POSITION='...', ACTION=action, PAD='...', DELIM='...')UNIT='number': number必须是一个正整数,它可以使用变量或是常量来赋值。
number最好避开1,2,5,6。
因为2,6是默认的输出位置,也就是屏幕。
1,5则是默认的输入位置,键盘。
FILE='filename':指定要打开的文件名称,文件名要符合系统规定。
FORTRAN语言图形方式下十字光标定位方法一雪酵廖霰Frepeatread(f1.asK:)}aSC—value:ord(asc)Ipasswword—value:ord(password[I])}asc—vaalue::(asc—value)xor(password---value)}_丑sct=ehr(ase--value)Ii:=i/i;ifi=9theni:=1Iif(a{;c—value<$AO)and(nsc—value>$7F)thenread(f1.asc)elsewrite(f2.asK:){untilasc—value=$laIread(f1.asc);write(f2,axc);elsoe(f2);close(f1);end.上述程序编译后生成EXE文件.运行后根据提示输入相应的源文件名和文本文件名,则可获得WPS文件对应的文本文件.此程序未考虑原WPS文件不存在,目标文件重名及目标文件磁盘存储空间不够等问题的处理,读者有兴趣可在上述程序的基础上自行添加.上述程序已在Pc/xT 和286机器上以WPS2.1O版本为例运行通过.上述程序也可作为忘记WPS文件密码时的文件解密来使用F0RTRAN语言图形方式下十字光标定位方法重庆大学计孙王成良1I在用高级语言开发图形应用软件时,有时需要用十字光标定位交互地来绘制某一图形,或选取某一部分图形进行相应处54理.如图形的缩放,移动,复制等.计算机视频方式分为图形方式和文本方式.在文本方式下屏幕的分辨率以字符为单位.光标可设置成可见的;而在图形方式下,屏幕的分辨率以象素为单位.光标是不可见的.如何在图形方式下实现十字光标的定位,我们结合用MS—FoRTRAN5.0语言所编制的一个完整源程序DRAW.FOR 来加以讨论.十字光标的移动可通过按”一”,”一, “十”{“等键来实现,每按一下上述键,十字光标就沿箭头所指方向移动1个象素点,再将原十字光标隐去;按回车键就{自取这点的实际位置.原十字光标隐去的过程可以在屏幕上异或写象索的方法来实现. 在画十字光标时.将其颜色值与128进行按位.或”运算.命名其颜色值的最高位为1.调用BIOSINT10H功能就可实现异或写象素点.在同一点以相同颜包写两次就可隐去该点.这样,在(IX,IY)处写一象索点.再分别沿一X,+X.一Y+Y写若干相同个数的象索点就构成十字光标,再在(IX.rY)处重画十字光标就可隐去该十字光标.十字光标的长度由子程序DCROSS中的IENG决定.由于MS—FORTRAN5.0不提供调用软中断的函数,我们用MS一)R—TRAN5.0和MASM5.0接口的方法编制了wPlxEI汇编子程序进行异或写象索点.在FORTRAN中就可直接调用wPIxEI(1x,IY,IC)汇编子程序进行异或写象索点.在FoRTRAN中就可直接调用wPIxEL(IX,IY,IC)汇编子程序.其中Ix.IY为屏幕上任一点的位置.Ic为所给的颜色值(已与128按位作过”或运算). 程序中由于耍判断所按键的ASCII码或扫描码.MS—FORTRAN5.0中无此类函数,我们也是利用它与MASM5.0接口~文期橛昧O实践创新O的方法+用B10sINTl6H功能编制了KBHlT()汇编子程序以实现返回其所按键的ASCII码,若无ASCII码则返回其负的扫描码.为了加快十字光标的移动速度,若每按一次PgUp键或Ins键.十字光标的移动步长将增加4个象索点,直到100为止.若每按一次PgUp键或Del键,十字光标的移动步长将增加4个象索点,直到l为止.本文源程序在VGA640×480图形方式下,可实现在屏幕上任意处交互地绘制一条直线.使用时可将两个汇编子程序分别编译成.OBJ文件,再用LINK将它们与其它.OBJ文件连接成可执行文件.上述方法.虽然是用MS—FOR-TRAN5.0编制的(由于库函数无上述两种功能,增加了编程的困难性),但其方法完全适用于其它高级语言.如用NDP FoRTRAN一386或C或PASCAL语言编程,由于其库函数中台有调用软中断和确定所按键扫描码的函数,编程将更加方便.(源程序,编者略)使SUPER—CCD0S5.1的部分字库驻留扩展内存新疆生产建设兵团搂建华SUPER—CCI)()s的说明书上说,SPIIB.EXE具有搜索汉卡和扩展内存的功能.如果没有汉卡但有扩展内存.则自动将显示字库驻留扩展阿存(地址在lM以上的内存).但许多用户反映,他们使用的SUPER—CCD0S5.0和5.1版本中的SPI.IB.EXE没有这项功能.本人对SPLIB.XE(版本5.1.下同)尾部的927字节进行了分析.发现SPI.IB.EXE确实没有使字库驻留扩展内存的功能,带参数运行也只能使部分或全部显示字库驻留基本内存.本人编写了一个附加程序(清单略),放在SPIIB.EXE之后运行,即可使部分字库驻留扩展内存.驻留区的大小由运行SPI,IBH.c()OM时所带参数的大小确定(十进制,单位KB).本法在AST386SX/20,HT一1X286和AST286上运行通过,效果良好.一,关于SPIIB.EXE的简要分析启动SPLIB.EXE之后,将运行其尼部的一段程序(797字节)这段程序的主~]rf,I要功能是:(1)查找硬盘参数,并填入读宇库程序段的相应位置i(2)顺序查出字库xsIS.LPH各簇的起始扇区号,并存放在内存中{(3)根据所带参数,修改读字库程序段,并将部分或全部显示字库读入基本内存I(4)将本段程序清零,并使扇区记录区,字库区,SPIIB.EXE的主体部分驻留内存.由上述分析不难看出,问题的关键在于:(1)修改读字库程序段i(2)把字库读入扩展内存.本文中的正是用于解决这两个问题的.二,附加程序的结构1.Ol95—02C4是程序的主体.2.0150—0l5F与原字库管理模块SPIIB;EXE中的一部分相同,它被作为比较字符串,用干查找SPLlB.EXE运行后, 内存中读字库程序段所用的代码段.此查找也可防止被重复执行.3.0160--0194是个程序段,被加到原读字库程序段的前部.在 中,这段程序不运行,被当作数据串传送. E017E]和[mTC],Eo179]这三字节为驻留55。
声明:本文系本人阅读各类文章、论文、论坛贴吧后对fortran可视化问题的一点自我总结,希望和同样学习fortran的同学交流一下,比较浅显,希不吝赐教。
(除第二部分主要是引用外,其他均为原创)一、总论直到现今,fortran仍然是土木、水利类工科同学学习计算机语言的首选,除了因为它传统的超强的计算功能,更因为它是最早的计算机高级编程语言,所以广阔的已经成形的计算资源,如各种计算软件等都是由其编译而来,所以,至少在很长一段时间内,fortran仍将活跃在世上,而不会为C/C++、VB等取代。
有必要提一下fortran的基本知识,这些在我们上课的时候可能都没有涉及。
首先是fortran语言规范与编译器的区别:fortran主要的语言规范有fortran7 7、fortran90以及fortran2003,其中,目前学生学习主要是fortran90规范,因为fortran77实在是太古老了,在其改革到fortran90之后,fortran加入了指针等C/C++中的东西,使得fortran学习、使用起来更为方便,但是这并不是说fortran77就不行了或是怎么的,事实上,众多的使用fortran的研究人员仍然使用着它,譬如说国家地理信息等行业的人员,他甚至可能会对fortran的后续语言规范嗤之以鼻,毕竟这种改变并不能使他的SCI论文增加多少的。
值得一提的是,fortran2003语言规范的出台着实让众多学习fortran的童鞋们为之一振,因为它标志着fortran也迈入了面向对象程序设计语言的行列,不过关于它的介绍还不是很多,我在J.Chapmen的fortran95程序设计一书的最后看到了相关介绍,之所以这样,主要是支持fortran2003语言规范的编译器还没有公司开发出来,所以这是一个pity。
其次,再说一下fortran编译器的方面。
fortran目前使用的主流编译器为compaq visual fortran系列,intel fortran系列,powerstation ,DVF系列等(我们老师给的应该是DVF5.0),其中,compaq公司被intel收购之后,就生产intel fortran系列了,而powerstation系列属于微软的产品,比较经典的是powerstation4.0,它使得利用windows的内置资源制作友好的图形用户界面以及强大的图形处理能力成为现实。
1 QuickWin绘图基础QuickWi n支持以像素为基础的图形,其图形库包括了一套完整的图形函数集。
1.QuickWin应用程序QuickWi n图形库提供了MSFLI B.F90和MSF LIB.MOD两个文件,其中包括了访问所有图形函数的说明。
文件MSFLI B.F90中包含绘图子程序的定义及接口,文件MSFLI B.MOD中包含了图形过程符号常量说明以及与绘图过程相关的结构体的定义。
因此,任何使用Qui ckWin的程序必须包含USEMSF LIB语句以访问Quic kWin的图形库,USEMSFL IB语句应出现在任何声明语句和其他模块包含语句之前。
在默认情况下,QuickWin应用程序拥有一个框架主窗口和一个输出子窗口。
在主窗口中,有对子窗口及其图形和文本实施操作的菜单栏,其中,File菜单中的Save命令可以把绘图结果保存成*.BMP位图文件。
2.QuickWin应用程序的创建例1 创建显示正弦波形的Quic kWin应用程序。
操作步骤如下:(1)在Micros oft Develop erStud io中单击F ile菜单下的New菜单项,在New对话框中选择Pro jectWo rkspac e,单击OK按钮。
(2)在New Project Workspace对话框中,选择Quick WinApp licati on,将工程名称设置为My_wi n,单击Creat e按钮。
(3)在Micros oft Develop erStud io中单击F ile菜单下的New菜单项,在New对话框中选择Tex tFile,单击OK按钮,在编辑区输入以下源程序:USE MSFLIBPARAMET ER(PI=3.141593)TYPE(QWINFO) winfoTYPE(WXYCOOR D) xyINTEGER(2) resultREAL aREAL(8) x,yCHARACT ER C*4! 设置子窗口最大化winfo.type = QWIN$MAXresult= SETWSIZ EQQ(0, w info)result= SETWSIZ EQQ(QWIN$FRAMEWI NDOW, winfo)! 设置子窗口的背景色为白色result= SETBKCO LORRGB (#FFFFFF)CALL CLEARSC REEN ($GCLEARS CREEN)! 设置绘图的颜色为黑色result= SETCOLO RRGB(#000000)! 设置视窗result= SETWIND OW(.TRUE., -2*pi-1, 1.5, 2*pi+1, -1.5)! 绘制坐标轴x = 2*pi+0.5CALL MOVETO_W(-x, 0D0, XY)result= LINETO_W(x,0D0) ! 横轴y = 1.2CALL MOVETO_W(0D0, y, XY)RESULT= LINETO_W(0D0,-y) ! 纵轴! 坐标轴刻度RESULT=INITIAL IZEFON TS()RESULT=SETFONT('h16w12i')DO i = -360, 360, 90x = pi*i/180-0.5CALL MOVETO_W(x, 0D0, XY)WRITE(c,"(I4)") iCALL OUTGTEX T(c)END DO! 绘制正弦曲线DO a = -360, 360, 0.5x = pi*a/180y = SIN(x)result=SETPIXE L_W(x, y)END DOREAD (*,*) ! 按回车键结束END(4)以文件名dem o.f90保存源程序,然后在Micr osoftDevelop erStud io中单击I nsert菜单下的Fil es intoPro ject菜单项,将Demo.f90文件加入到My_wi n工程中;(5)在Micros oft Develop erStud io中分别单击Build菜单下的Co mpile、Build、Execute菜单项,用以编译、生成并运行My_win 文件。
fortran绘图、界面功能简介之一source:/s/blog_483ac0ab0100gq8r.ht ml###对于fortran的绘图、界面功能,我仅仅做一个简单的罗列,这样方便大家的讨论:1.利用fortran的扩充函数绘图,下面是一个简单的例子,是上面有人贴出的;Visual Fortran中有提供绘图功能。
Visual Fortran的绘图功能不完全是以扩充函数的类型存在,使用它的绘图功能必须在选择Project类型时,选择Standard Graphics或QuickWin模式。
Visual Fortran的QuickWin 及Standard Graphics模式在简单的绘图使用上会比较方便,它的绘图函数功能比较多样,不过效率会比较差,而且不支持动画功能。
Standard Graphics和QuickWin模式在绘图方面的使用方法完全相同,它们都是调用相同的函数来绘图。
差别在于Standard Graphics只能打开一个窗口来绘图、QuickWin模式则可以打开多个窗口来绘图。
QuickWin模式下可以有菜单及对话窗的功能,Standard Graphics则不行。
Standard Graphics模式的程序代码可以原封不动直接转换到QuickWin模式下使用,但是QuickWin的程序代码并不一定可以直接拿到 Standard Graphics模式下使用。
下面这个程序会在屏幕上画出一条斜线、一个方形及一个椭圆。
编译程序时,请选择Fortran Standard Graphics or QuickWin Application这个模式。
这个程序可以在Standard Graphics或QuickWin模式下使用。
打开好Project后,再把下面的程序加入Project中来编译。
1.! 简单的绘图范例2.! By Perng 1997/9/193.program Plot_Demo4.! 使用Visual Fortran的绘图功能时需要module dflibe DFLIB6.implicit none7. type(xycoord) :: t8. integer :: result9. call MoveTo(10,10,t) ! 把目前绘图的位置移动到坐标(10,10)10. result=LineTo(100,50) ! 从(10,10)到(100,50)间绘一条直线11. ! 画一个左上角为(110,10), 右下角为(150,50)的实心方形12. result=Rectangle( $GFILLINTERIOR, 110,10, 150, 50 )13. ! 画一个可以放入在(10,60)--(150,100)方形当中的空心椭圆14. result=Ellipse($GBORDER, 10, 60, 150, 100)15.end program Plot_Demo使用Standard Graphics模式时,会出现一个绘图窗口来画图。