收藏 分销(赏)

第12章FORTRAN图形操作.ppt

上传人:精**** 文档编号:12697040 上传时间:2025-11-26 格式:PPT 页数:24 大小:1.30MB 下载积分:10 金币
下载 相关 举报
第12章FORTRAN图形操作.ppt_第1页
第1页 / 共24页
第12章FORTRAN图形操作.ppt_第2页
第2页 / 共24页


点击查看更多>>
资源描述
Add 标题,Add title 标题,Add title 标题,Add Title 标题,Add title 标题,*,第十二章 FORTRAN图形操作,绘图基础,QuickWin窗口的创建,图形坐标系,图形属性,基本图形函数,图形字符操作,一、QuickWin绘图基础,QuickWin支持以像素为基础的图形,其图形库包括了一套完整的图形函数集。,1QuickWin图形库,MSFLIB.F90:绘图子程序的定义及接口,MSFLIB.MOD:图形过程符号常量说明以及与绘图过程相关的结构体的定义,2.,QuickWin,应用程序的创建,二、,QuickWin窗口的创建,设置图形模式,RESULT=SETWINDOWCONFIG(WC),RESULT,为,LOGICAL,型变量,若调用成功,返回值为,.TRUE.,,否则为,.FALSE.,。,WC,为,WINDOWCONFIG,结构体类型变量。,TYPE WINDOWCONFIG,INTEGER(2)NUMXPIXELS!X,轴的像素个数,INTEGER(2)NUMYPIXELS!Y,轴的像素个数,INTEGER(2)NUMTEXTCOLS!,最大文本列数,INTEGER(2)NUMTEXTROWS!,最大文本行数,INTEGER(2)NUMCOLORS!,颜色索引数,INTEGER(4)FONTSIZE!,缺省的字体大小。,CHARACTER(80)TITLE!,窗口标题,END TYPE WINDOWCONFIG,2.,窗口操作,(1)打开子窗口,OPEN(UNIT=n,FILE=USER,TITLE=wname,IOFOCUS=status),(2)激活窗口,result=SETACTIVEQQ(unit),(3)控制窗口的大小和位置,result=SETWSIZEQQ(unit,winfo),winfo为结构体QWINFO类型。结构体QWINFO包含窗口的位置和大小信息,它在模块MSFLIB.MOD中的定义为:,TYPE QWINFO,INTEGER(2)TYPE !窗口类型,INTEGER(2)X !左上角的X轴坐标,INTEGER(2)Y !左上角的Y轴坐标,INTEGER(2)H !窗口的高度,INTEGER(2)W !窗口的宽度,END TYPE QWINFO,QWIN$MIN,QWIN$MAX,QuickWin坐标系均为左手坐标系。默认为像素坐标系,坐标值为整数,从0开始计数,故分辨率为640480的屏幕如下:,三、,图形坐标系,将坐标原点设置在物理坐标点(x,y):,CALL SETVIEWORG(x,y,t),其中(x,y)为新原点的物理坐标,t为XYCOORD 结构体类型的变量。,TYPE xycoord,INTEGER(2)xcoord !x坐标,INTEGER(2)ycoord !y坐标,END TYPE xycoord,视窗坐标:实数坐标系,result=SETWINDOW(finvert,wx1,wy1,wx2,wy2),其中,finvert为逻辑量,其值为真,则视窗的Y 轴与视口Y轴相反,否则与视口坐标系相同。wx1、wy1、wx2、wy2均为双精度实型,(wx1,wy1)和(wx2,wy2)分别定义视窗的左下角和右上角,视窗原点由(wx1,wy1)和(wx2,wy2)的值所确定。设置了视窗坐标系,就不再需要进行数据转换工作,可调用绘图过程在子窗口中直接绘图。,线型,线型(LineStyle)是点、横线和空格等按一定规律重复出现而形成的图案,是构成直线条的基本图元。,CALL SETLINESTYLE(mask),mask是一个16位二进制数,其中每位对应线型图元的一个像素。若位值为零,则像素保持当前背景色;若位值为1,则像素被置为当前前景色。缺省线型模式是#FFFF(实线)。如表所示,#FF00表示长虚线型,#F0F0表示短虚线型,缺省为实线(#FFFF)。,填充样式,填充样式(FillMask)是横线、竖线和斜线等按一定规律重复出现而形成的图案,是构成填充部分的基本图元。,CALL SETFILLMASK(mask),其中mask为INTEGER(1)型的有8个元素的一维数组,数组元素中的每一位2进制代表填充元中的一个像素,值为1表示该像素点填充颜色,值为0表示该像素点不填充颜色;第n个数组元素对应填充元的第n行。如左表中所示的填充元为虚线,右表中所示的填充元为细实线。,位,元,素,7,6,5,4,3,2,1,0,值,(十六进制),mask,(,1,),0,0,0,0,1,0,0,0,#08,mask,(2),0,0,0,0,1,0,0,0,#08,mask,(3),0,0,0,0,1,0,0,0,#08,mask,(4),0,0,0,0,1,0,0,0,#08,mask,(5),0,0,0,0,1,0,0,0,#08,mask,(6),0,0,0,0,1,0,0,0,#08,mask,(7),0,0,0,0,1,0,0,0,#08,mask,(8),0,0,0,0,1,0,0,0,#08,7,6,5,4,3,2,1,0,值,(十六进制),mask,(,1,),0,0,0,1,1,0,0,0,#18,mask,(2),0,0,0,1,1,0,0,0,#18,mask,(3),0,0,0,0,0,0,0,0,#00,mask,(4),0,0,0,1,1,0,0,0,#18,mask,(5),0,0,0,1,1,0,0,0,#18,mask,(6),0,0,0,0,0,0,0,0,#00,mask,(7),0,0,0,1,1,0,0,0,#18,mask,(8),0,0,0,1,1,0,0,0,#18,位,元,素,五、,基本图形函数,画像素点,result=SETPIXELRGB(x,y,color),result=SETPIXELRGB_W(wx,wy,color),其,中(x,y),为,INTEGER(2),型,为视口坐标系中目标像素的坐标;(wx.wy)为 REAL(8)型,为视窗坐标系中目标像素的坐标。,例12.5,绘制曲线 。,USE MSFLIB,REAL(8)x,y,PARAMETER(pi=3.141593),INTEGER(2)status,REAL(8):DZ=4.5,XJG=0.001D0,CALL SETVIEWPORT(49,49,800-50,600-50),DO x=0,DZ,XJG!画函数曲线,y=sin(x)*3,status=SETPIXELRGB_W(x,y,#FFFFFF),END DO,END,设置绘图起点,CALL MOVETO(x,y,xy),CALL MOVETO_W(wx,wy,wxy),wx、wy均为 REAL(8)型,其意义为目标点的视窗坐标;wxy为结构体WXYCOORD型的变量,结构体WXYCOORD类型在MSFLIB.MOD中定义如下:,TYPE wxycoord,REAL(8)wx !x坐标,REAL(8)wy !y坐标,END TYPE wxycoord,绘制形状,绘制直线,result=LINETO(x,y),result=LINETO_ W(wx,wy),USE MSFLIB,INTEGER(2)status,TYPE(xycoord)xy,status=SETCOLORRGB(#FFFFFF),CALL MOVETO(INT2(80),INT2(50),xy),status=LINETO(INT2(240),INT2(150),CALL SETLINESTYLE(#FF00),status=LINETO(INT2(240),INT2(50),READ(*,*)!按回车键结束程序,END,绘制矩形,result=RECTANGLE(control,xl,yl,x2,y2),result=RECTANGLE_W(control,wxl,wyl,wx2,wy2),说明:,(1)result为INTEGER(2)型。如果绘图成功,则返回值不为零;否则返回值为零。,(2)control为填充标志符,为INTEGER(2)型,其值只有两个,即:,$GBORER表示用当前图形色和当前线型绘制矩形框。,$GFILLNTEROR表示用当前图形色和当前填充样式绘制矩形。,绘制椭圆,result=ELLIPSE(control,xl,yl,x2,y2),result=ELLIPSE_W(control,wxl,wyl,wx2,wy2),(,xl,yl)、(,wxl,wyl,)为,视口坐标系中椭圆外接矩形框左上角的坐标,(,x2,y2)、(,wx2,wy2),为视口坐标系中椭圆外接矩形框右下角的坐标,使外接矩形为正方形即可画圆。,USE MSFLIB,INTEGER(2)status,INTEGER(1):style(8)/#01,#02,#04,#08,#10,#20,#40,#80/!右斜线,!绘制红色空心椭圆,status=SETCOLORRGB(#0000FF),status=ELLIPSE($GBORDER,80,50,240,150),!绘制白色填充斜线圆,status=SETCOLORRGB(#FFFFFF),CALL SETFILLMASK(style),status=ELLIPSE($GFILLINTERIOR,280,50,380,150),END,区域填充,使用当前图形色和填充样式填充一个由特定边界颜色定义的有界封闭区域,result=FLOODFILLRGB(x,y,color),result=FLOODFILLRGB_ W(wx,wy,color),如果起点位于图形内部,则图形内部区域被填充;如果起点位于图形外部,则背景将被填充。,六、,图形字符操作,1初始化字型,numfonts=INITIALIZEFONTS(),2设置字型,从已注册的字形集中确定一种字形作为当前字形。,result,=SETFONT(,options,),其中,,result,为INTEGER(2)型,如果函数执行成功,返回字型的索引号,否则返回负整数。当前字形特征(如字体、字符的高和宽等)由,options,指定,其取值及意义如表所示。,取值,意义,t,fontname,指定字体,h,x,字符高度,w,y,字符宽度,f,选择一种固定间距的字形,p,选择一种比例间距的字形,e,粗体,u,下划线,i,斜体,例:,index=SETFONT(t Times New Roman h18wl0),以像素为单位,3设置文本显示角度,CALL SETGTEXTROTATION(degrees),其中,degrees,为INTEGER(4)型,计量单位是十分之一度。,4输出字符,以图形方式将一个字符串文本输出到屏幕上,CALL OUTGTEXT(text),其中,,text,为字符型,是将要被显示的字符串。输出的字符串在当前图形位置,使用当前字体(由,SETFONT,设定)和当前图形色(由,SETCOLORRGB,设定)显示。,USE MSFLIB,TYPE(XYCOORD)xy,INTEGER(4)tcolor,INTEGER(2)status,CHARACTER*8:tfont,ttype(3)*20,ttype=(/隶书,楷体_GB2312,华文彩云/),tcolor=#0000FF,status=SETTEXTCOLORRGB(#FFFFFF),status=INITIALIZEFONTS(),CALL MOVETO(50,100,xy),DO i=1,3,WRITE(tfont,10)i*5+20,i*3+20,status=SETCOLORRGB(tcolor),status=SETFONT(t/TRIM(ttype(i)/tfont),CALL SETGTEXTROTATION(i*150),CALL OUTGTEXT(欢迎),tcolor=tcolor*#100,END DO,10 FORMAT(h,I2,w,I2,),END,综合实例,从顺序文件score.dat中读取某班某门课的成绩,统计各成绩段(60分以下,6069,7079,8089,90100)的分布情况,输出其饼图。要求在图中标注各块的意义。,分析:,(1)用score数组存放成绩,用p数组存放各成绩段的人数(p(1)存放90100的人数,p(5)存放低于60分的人数)。,(2)过程PLOT_PIE绘制饼图。,USE MSFLIB,INTEGER,ALLOCATABLE:score(:),INTEGER:p(5)=0,CHARACTER*10 str(5),str=(/90分以上,8089分,7079分,6069分,60分以下/),OPEN(10,FILE=score.dat),n=0,DO WHILE(.NOT.EOF(10),READ(10,*);n=n+1,END DO,REWIND(10),ALLOCATE(score(n),DO i=1,n,READ(10,*)score(i),END DO,DO i=1,n,IF(score(i)60)THEN,p(5)=p(5)+1,ELSEIF(score(i)=100)THEN,p(1)=p(1)+1,ELSE,p(10-score(i)/10)=p(10-score(i)/10)+1,ENDIF,END DO,CALL PLOT_PIE(p,n,5,str),END,SUBROUTINE PLOT_PIE(p,n,k,str),USE MSFLIB,INTEGER status,p(k),CHARACTER*10 str(n),REAL(8)x1,y1,x2,y2,x3,y3,x4,y4,x,y,INTEGER(4):bcolor=1,tcolor,PARAMETER(pi=3.141593),TYPE(WXYCOORD)t,status=SETWINDOW(.TRUE.,-1.2,1.2,1.2,-1.2)!设置视窗大小,status=SETBKCOLORRGB(#FFFFFF),CALL CLEARSCREEN($GCLEARSCREEN),status=INITIALIZEFONTS(),status=SETFONT(h32p),x1=-1;y1=-1,x2=1;y2=1,x3=1;y3=0,per=0,DO i=1,k,!计算扇形大小,per=per+2*pi*p(i)/n,x4=cos(per);y4=sin(per),bcolor=bcolor*#2F,status=SETCOLORRGB(bcolor),status=PIE_W($GFILLINTERIOR,x1,y1,x2,y2,x3,y3,x4,y4),x3=x4;y3=y4,!显示数据标签,tcolor=#1000000-bcolor,status=SETCOLORRGB(tcolor),tper=per-pi*p(i)/n,x=cos(tper)*0.7;y=sin(tper)*0.7,CALL MOVETO_W(x,y,t),CALL OUTGTEXT(str(i),END DO,END,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服