《FORTRAN图形操作》PPT课件_第1页
《FORTRAN图形操作》PPT课件_第2页
《FORTRAN图形操作》PPT课件_第3页
《FORTRAN图形操作》PPT课件_第4页
《FORTRAN图形操作》PPT课件_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

第十二章FORTRAN图形操作,绘图基础QuickWin窗口的创建图形坐标系图形属性基本图形函数图形字符操作,一、QuickWin绘图基础,QuickWin支持以像素为基础的图形,其图形库包括了一套完整的图形函数集。1QuickWin图形库MSFLIB.F90:绘图子程序的定义及接口MSFLIB.MOD:图形过程符号常量说明以及与绘图过程相关的结构体的定义2.QuickWin应用程序的创建,二、QuickWin窗口的创建,设置图形模式RESULT=SETWINDOWCONFIG(WC)RESULT为LOGICAL型变量,若调用成功,返回值为.TRUE.,否则为.FALSE.。WC为WINDOWCONFIG结构体类型变量。TYPEWINDOWCONFIGINTEGER(2)NUMXPIXELS!X轴的像素个数INTEGER(2)NUMYPIXELS!Y轴的像素个数INTEGER(2)NUMTEXTCOLS!最大文本列数INTEGER(2)NUMTEXTROWS!最大文本行数INTEGER(2)NUMCOLORS!颜色索引数INTEGER(4)FONTSIZE!缺省的字体大小。CHARACTER(80)TITLE!窗口标题ENDTYPEWINDOWCONFIG,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中的定义为:TYPEQWINFOINTEGER(2)TYPE!窗口类型INTEGER(2)X!左上角的X轴坐标INTEGER(2)Y!左上角的Y轴坐标INTEGER(2)H!窗口的高度INTEGER(2)W!窗口的宽度ENDTYPEQWINFO,QWIN$MINQWIN$MAX,QuickWin坐标系均为左手坐标系。默认为像素坐标系,坐标值为整数,从0开始计数,故分辨率为640480的屏幕如下:,三、图形坐标系,将坐标原点设置在物理坐标点(x,y):CALLSETVIEWORG(x,y,t)其中(x,y)为新原点的物理坐标,t为XYCOORD结构体类型的变量。TYPExycoordINTEGER(2)xcoord!x坐标INTEGER(2)ycoord!y坐标ENDTYPExycoord,视窗坐标:实数坐标系result=SETWINDOW(finvert,wx1,wy1,wx2,wy2)其中,finvert为逻辑量,其值为真,则视窗的Y轴与视口Y轴相反,否则与视口坐标系相同。wx1、wy1、wx2、wy2均为双精度实型,(wx1,wy1)和(wx2,wy2)分别定义视窗的左下角和右上角,视窗原点由(wx1,wy1)和(wx2,wy2)的值所确定。设置了视窗坐标系,就不再需要进行数据转换工作,可调用绘图过程在子窗口中直接绘图。,四、图形属性,图形颜色RGB的色值由3字节组成,每一字节取值范围为0255,分别代表蓝、绿、红三色的颜色深度,各表示成2位16进制数字,从右往左依次为红、绿、蓝;数字越大,所对应的颜色强度越强。,1设置颜色result=SETCOLORRGB(color)result=SETBKCOLORRGB(color)result=SETTEXTCOLORRGB(color)color为Integer(4)型,一般用16进制表示颜色取值。,例4设置绘图窗口为白色,用PRINT语句输出兰色文字,用OUTGTEXT函数输出红色字符。USEMSFLIBINTEGER(4)RESULTTYPE(XYCOORD)XYRESULT=SETBKCOLORRGB(#FFFFFF)CALLCLEARSCREEN($GCLEARSCREEN)RESULT=SETTEXTCOLORRGB(#FF0000)PRINT*,ThisisblueRESULT=SETCOLORRGB(#0000FF)CALLMOVETO(20,20,XY)CALLOUTGTEXT(Thisisred)END,要使设置的背景色发生作用,须使用CLEARSCREEN函数清空目标区域,,线型线型(LineStyle)是点、横线和空格等按一定规律重复出现而形成的图案,是构成直线条的基本图元。CALLSETLINESTYLE(mask)mask是一个16位二进制数,其中每位对应线型图元的一个像素。若位值为零,则像素保持当前背景色;若位值为1,则像素被置为当前前景色。缺省线型模式是#FFFF(实线)。如表所示,#FF00表示长虚线型,#F0F0表示短虚线型,缺省为实线(#FFFF)。,填充样式填充样式(FillMask)是横线、竖线和斜线等按一定规律重复出现而形成的图案,是构成填充部分的基本图元。CALLSETFILLMASK(mask)其中mask为INTEGER(1)型的有8个元素的一维数组,数组元素中的每一位2进制代表填充元中的一个像素,值为1表示该像素点填充颜色,值为0表示该像素点不填充颜色;第n个数组元素对应填充元的第n行。如左表中所示的填充元为虚线,右表中所示的填充元为细实线。,五、基本图形函数,画像素点result=SETPIXELRGB(x,y,color)result=SETPIXELRGB_W(wx,wy,color)其中(x,y)为INTEGER(2)型,为视口坐标系中目标像素的坐标;(wx.wy)为REAL(8)型,为视窗坐标系中目标像素的坐标。例12.5绘制曲线。USEMSFLIBREAL(8)x,yPARAMETER(pi=3.141593)INTEGER(2)statusREAL(8):DZ=4.5,XJG=0.001D0CALLSETVIEWPORT(49,49,800-50,600-50)DOx=0,DZ,XJG!画函数曲线y=sin(x)*3status=SETPIXELRGB_W(x,y,#FFFFFF)ENDDOEND,设置绘图起点CALLMOVETO(x,y,xy)CALLMOVETO_W(wx,wy,wxy)wx、wy均为REAL(8)型,其意义为目标点的视窗坐标;wxy为结构体WXYCOORD型的变量,结构体WXYCOORD类型在MSFLIB.MOD中定义如下:TYPEwxycoordREAL(8)wx!x坐标REAL(8)wy!y坐标ENDTYPEwxycoord,绘制形状绘制直线result=LINETO(x,y)result=LINETO_W(wx,wy),USEMSFLIBINTEGER(2)statusTYPE(xycoord)xystatus=SETCOLORRGB(#FFFFFF)CALLMOVETO(INT2(80),INT2(50),xy)status=LINETO(INT2(240),INT2(150)CALLSETLINESTYLE(#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)为视口坐标系中椭圆外接矩形框右下角的坐标使外接矩形为正方形即可画圆。,USEMSFLIBINTEGER(2)statusINTEGER(1):style(8)/#01,#02,#04,#08,#10,#20,#40,#80/!右斜线!绘制红色空心椭圆status=SETCOLORRGB(#0000FF)status=ELLIPSE($GBORDER,80,50,240,150)!绘制白色填充斜线圆status=SETCOLORRGB(#FFFFFF)CALLSETFILLMASK(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指定,其取值及意义如表所示。,例:index=SETFONT(tTimesNewRomanh18wl0),以像素为单位,3设置文本显示角度CALLSETGTEXTROTATION(degrees)其中degrees为INTEGER(4)型,计量单位是十分之一度。4输出字符以图形方式将一个字符串文本输出到屏幕上CALLOUTGTEXT(text)其中,text为字符型,是将要被显示的字符串。输出的字符串在当前图形位置,使用当前字体(由SETFONT设定)和当前图形色(由SETCOLORRGB设定)显示。,USEMSFLIBTYPE(XYCOORD)xyINTEGER(4)tcolorINTEGER(2)statusCHARACTER*8:tfont,ttype(3)*20ttype=(/隶书,楷体_GB2312,华文彩云/)tcolor=#0000FFstatus=SETTEXTCOLORRGB(#FFFFFF)status=INITIALIZEFONTS()CALLMOVETO(50,100,xy)DOi=1,3WRITE(tfont,10)i*5+20,i*3+20status=SETCOLORRGB(tcolor)status=SETFONT(t/TRIM(ttype(i)/tfont)CALLSETGTEXTROTATION(i*150)CALLOUTGTEXT(欢迎)tcolor=tcolor*#100ENDDO10FORMAT(h,I2,w,I2,)END,综合实例,从顺序文件score.dat中读取某班某门课的成绩,统计各成绩段(60分以下,6069,7079,8089,90100)的分布情况,输出其饼图。要求在图中标注各块的意义。分析:(1)用score数组存放成绩,用p数组存放各成绩段的人数(p(1)存放90100的人数,p(5)存放低于60分的人数)。(2)过程PLOT_PIE绘制饼图。,USEMSFLIBINTEGER,ALLOCATABLE:score(:)INTEGER:p(5)=0CHARACTER*10str(5)str=(/90分以上,8089分,7079分,6069分,60分以下/)OPEN(10,FILE=score.dat)n=0DOWHILE(.NOT.EOF(10)READ(10,*);n=n+1ENDDOREWIND(10)ALLOCATE(score(n)DOi=1,nREAD(10,*)score(i)ENDDO,DOi=1,nIF(score(i)60)THENp(5)=p(5)+1ELSEIF(score(i)=100)THENp(1)=p(1)+1ELSEp(10-score(i)/10)=p(10-score(i)/10)+1ENDIFENDDOCALLPLOT_PIE(p,n,5,str)END,SUBROUTINEPLOT_PIE(p,n,k,str)USEMSFLIBINTEGERstatus,p(k)CHARACTER*10str(n)REAL(8)x1,y1,x2,y2,x3,y3,x4,y4,x,yINTEGER(4):bcolor=1,tcolorPARAMETER(pi=3.141593)TYPE(WXYCOORD)tstatus=SETWINDOW(.TRUE.,-1.2,1.2,1.2,-1.2)!设置视窗大小status=SETBKCOLORRGB(#FFFFFF)CALLCLEARSCREEN($GCLEARSCREEN)status=INITIALIZEFONTS()status=SETFONT(h32p)x1=-1;y1=-1x2=1;y2=1x3=1;y3=0per=0,DOi=1,k!计算扇形大小per=per

温馨提示

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

评论

0/150

提交评论