您好,欢迎访问三七文档
Fortran95程序设计彭国伦编著第11章绘图Fortran95程序设计第11章绘图211-1VisualFortran的绘图功能绘图功能是VisualFortran在FORTRAN标准外所扩充的功能。使用VisualFortran的绘图功能时需要moduledflib。编译带有VisualFortran的绘图功能的程序时,需要选择FortranStandardGraphicsorQuickWinApplication模式。使用StandardGraphics模式时,会出现一个绘图窗口来画图。使用QuickWin模式时,除了绘图窗口外,还有内定的菜单可以使用。使用VisualFortran的绘图功能时,打开窗口的工作是自动完成的。程序代码只需要直接调用绘图函数就可以进行绘图。Fortran95程序设计第11章绘图311-2绘图函数VisualFortran的绘图函数大部分是函数,调用后的返回值大多是用来说明函数是否正常执行。几何绘图函数通常有两个版本,函数名称最后为「_W」的使用虚拟坐标,不然就使用窗口坐标。使用虚拟坐标时,都使用双精度浮点数来传递坐标值。在dflib.f90定义了自定义数据类型xycoord来保存窗口中的一个坐标。TYPExycoordINTEGER(2)xcoordINTEGER(2)ycoordENDTYPExycoordFortran95程序设计第11章绘图4integer(2)functionSetWindow(invert,x1,y1,x2,y2)用来设定虚拟坐标,invert的值是用来指定Y轴向上为正或为负。invert=.true.时向上为正,invert=.false.时向下为负。(x1,y1)、(x2,y2)则使用双精度浮点数来定义绘图范围两端的虚拟坐标值。integer(2)functionSetColor(index)使用索引值的方法来设定所要使用的颜色。subroutineOutGText(text)调用这个子程序可以在目前画笔的位置上写出text字符串。Fortran95程序设计第11章绘图5integer(4)functionRGBToInteger(R,G,B)全彩模式中,RGB三种色光可以各自有256种色阶变化,所以一个颜色需要使用3bytes的空间来做记录。但是FORTRAN中通常一个整数使用4bytes的空间来做记录,如果分别使用3个变量来记录一个颜色值会很浪费空间,因为这3个变量都只会使用到最低的8个位,其它地方都不会使用。这个函数可以重新组合RGB这三个传入的整数,取出这三个整数中最低8个位的数值,把它重新安排到返回值color中。color中的第0~7bits用存放原本的R,8~15bits会存放原本的G,16~23bits会存放原本的B,剩下第24~31bits的空间则不会使用。Fortran95程序设计第11章绘图6integer(2)functionSetColorRGB(color)用RGB方法来设定颜色,参数color中的第0~7个bits用来设定红光,第8~15bits用来设定绿光,第16~23bits用来设定蓝光,其它位不使用。VisualFortran中以#符号开头的数字,代表一个16进制的数字,例如使用SetColorRGB(#FF0000)来设定颜色。16进制数值在0~9时和10进制数字相同,但是接在9下面的数字为A、B、C、D、E、F。其中A等于10进制的10,B=11,C=12.....,同理可推得1016=16,FF16=255。使用16进制的系统可以比较容易来操作这种需要控制到位内容的数值。Fortran95程序设计第11章绘图7subroutineCLEARSCREEN(area)–功能:清除屏幕–参数:integer(4)area设定所要清除的范围,有下列的定义值可以使用:$GCLEARSCREEN清除整个屏幕$GVIEWPORT清除目前所设定的可用范围$GWINDOW清除所设定的文字窗口范围integer(2)functionELLIPSE[_W](control,x1,y1,x2,y2)–功能:在指定的矩形范围内画椭圆–参数:integer(2)control设定要填满内部或是只画外框,有下列的定义值可以使用:$GFILLINTERIOR涂满整个内部,$GBORDER只画外框,integer(2)x1,y1矩形端点1,integer(2)x2,y2矩形端点2Fortran95程序设计第11章绘图8integer(2)functionGETCURRENTPOSITION[_W](t)–功能:查询目前的画笔位置type(xycoord)t–功能:返回目前画笔的所在位置,使用虚拟坐标时t的类型为type(wxycoord)integer(2)functionGETPIXEL[_W](x,y)–功能:取得(x,y)点的颜色,返回值为INDEX模式的颜色值。integer(4)functionGETPIXELRGB[_W](x,y)–功能:取得(x,y)点的颜色,返回值为RGB模式的颜色值。integer(2)functionLINETO[_W](x,y)–功能:从目前画笔位置到(x,y)间画一条直线。–参数:integer(2)x,y指定画线的终点,返回值如果不为0,代表函数运行不正常。Fortran95程序设计第11章绘图9subroutineMOVETO[_W](x,y,t)–功能:把这只画笔移动到画纸上的(x,y)坐标处–参数:integer(2)x,y设定画笔坐标位置,type(xycoord)t返回上次的画笔位置–注意:原点(0,0)是位在窗口的左上角,x坐标轴向右为正,y坐标轴向下为正。integer(2)functionRECTANGLE[_W](control,x1,y1,x2,y2)–功能:画矩形–参数:integer(2)control设定只画外框或画实心的矩形,integer(2)x1,y1,x2,y2设定矩形的范围Fortran95程序设计第11章绘图10integer(2)functionSETPIXEL[_W](x,y)–功能:用目前设定的颜色在指定坐标处画点(IndexColor模式)–参数:integer(2)x,y画点的坐标integer(2)functionSETPIXELRGB[_W](x,y)–功能:用目前设定的颜色在指定坐标处画点(RGBColor模式)–参数:integer(2)x,y画点的坐标subroutineOUTTEXT(text)–功能:在目前的文字输出位置写出字符串text的内容–参数:character*(*)text所要输出的字符串内容Fortran95程序设计第11章绘图11subroutineSETBKCOLOR(color)–功能:设定背景颜色(IndexColor模式)–参数:integer(4)color所要设定的颜色subroutineSETBKCOLORRGB(color)–功能:设定背景颜色(RGBColor模式)–参数:integer(4)color所要设定的颜色subroutineSETTEXTPOSITION(row,column,t)–功能:设定文字输出的位置–参数:integer(2)row,column设定文字输出的位置subroutineSETTEXTWINDOW(r1,c1,r2,c2)–功能:设定文字窗口的范围–参数:integer(2)r1,c1,r2,c2设定文字窗口的左上角及右下角范围Fortran95程序设计第11章绘图12subroutineOUTGTEXT(text)–功能:在目前画笔位置输出字符串–参数:character*(*)text所要输出的字符串integer(2)functionSETFONT(options)–功能:设定所要使用的字型–参数:character*(*)options使用文字叙述来设定要使用的字型,要描述的内容有「字型」、「长宽」、「样式」等等。Fortran95程序设计第11章绘图13在屏幕上画出一条斜线、一个方形及一个椭圆的示例程序programPlot_Demo!使用VisualFortran的绘图功能时需要moduledflibuseDFLIBimplicitnonetype(xycoord)::tinteger::resultcallMoveTo(10,10,t)!把目前绘图的位置移动到坐标(10,10)result=LineTo(100,50)!从(10,10)到(100,50)间绘一条直线!画一个左上角为(110,10),右下角为(150,50)的实心方形result=Rectangle($GFILLINTERIOR,110,10,150,50)!画一个可以放入在(10,60)--(150,100)方形当中的空心椭圆result=Ellipse($GBORDER,10,60,150,100)endprogramPlot_Demo[plot.f90]Fortran95程序设计第11章绘图14programPlot_SineuseDFLIBimplicitnoneinteger,parameter::lines=500!用多少线段来画函数曲线real(kind=8),parameter::X_Start=-5.0!x轴最小范围real(kind=8),parameter::X_End=5.0!x轴最大范围real(kind=8),parameter::Y_Top=2.0!y轴最大范围real(kind=8),parameter::Y_Bottom=-2.0!y轴最小范围[sin.f90]在屏幕上画出sin函数的图形Fortran95程序设计第11章绘图15integer::result!取回绘图函数运行状态integer(kind=2)::color!设定颜色用real(kind=8)::step!循环的增量real(kind=8)::x,y!绘图时使用,每条小线段都连接real(kind=8)::NewX,NewY!(x,y)及(NewX,NewY)real(kind=8),external::f!待绘图的函数type(wxycoord)::wt!返回上一次的虚拟坐标位置type(xycoord)::t!返回上一次的实际坐标位置Fortran95程序设计第11章绘图16!设定虚拟坐标范围大小result=SetWindow(.true.,X_Start,Y_Top,X_End,Y_Bottom)!用索引值的方法来设定颜色result=SetColor(2)!内定的2号是应该是绿色callMoveTo(10,20,t)!移动画笔到窗口的(10,20)callOutGText(f(x)=sin(x))!写出内容!使用全彩RGB0-255的256种色阶来设定颜色color=RGBToInteger(255,0,0)!把控制RGB的三个值转换到color中result=SetColorRGB(color)!利用color来设定颜色callMoveTo_W(X_Start,0.0_8,wt)!画X轴result=LineTo_W(X_End,0.0_8)!callMoveTo_W(0.0_8,Y_Top,wt)!画Y轴result=LineTo_W(0.0_8,Y_Bottom)!step=(X_End-X_Start)/lines!计算小线段间的X间距Fortran95程序设计第11章绘图17!参数#FF0000是使用16进制的方法来表示一个整数result=SetColorRGB(#FF0000)!开始绘制小线段们dox=X_Start,X_End-step,stepy=f(x)!线段的左端点NewX=x+stepNewY=f(NewX)!线段的右端点callMoveTo_W(x,y,wt)result=LineTo_W(
本文标题:fortran绘图
链接地址:https://www.777doc.com/doc-1425469 .html