
《第2章 绘图子程序设计》由会员分享,可在线阅读,更多相关《第2章 绘图子程序设计(33页珍藏版)》请在文档大全上搜索。
1、1第二章 绘图子程序设计一、绘图子程序的设计准则二、基本子程序的设计方法三、功能子程序的设计方法2 绘图子程序绘图子程序是指用计算机高级语言编写的具有不是指用计算机高级语言编写的具有不同绘图功能的子程序。同绘图功能的子程序。 绘图子程序分为:绘图子程序分为:基本子程序基本子程序、功能子程序功能子程序和和应应用子程序用子程序。基本子程序:基本子程序:是与绘图设备等硬件有关的子程序。是与绘图设备等硬件有关的子程序。 一般控制绘图机启动和停止,设置绘图单位,画一般控制绘图机启动和停止,设置绘图单位,画直线,控制绘图笔的抬落以及选择绘图笔等。直线,控制绘图笔的抬落以及选择绘图笔等。3功能子程序:功能子
2、程序:是在是在基础上设计的具有某种基础上设计的具有某种特定绘图功能的子程序,如画矩形、正多边形、椭圆等特定绘图功能的子程序,如画矩形、正多边形、椭圆等图形。图形。 功能子程序反映不同行业绘图的共同要求,通用性功能子程序反映不同行业绘图的共同要求,通用性较强。较强。应用子程序:应用子程序:是在是在和和基础上设基础上设计的一些专业性较强的子程序,如绘制等值线图、剖面计的一些专业性较强的子程序,如绘制等值线图、剖面图、柱状图等的子程序。图、柱状图等的子程序。 本章主要介绍基本子程序和功能子程序;应用本章主要介绍基本子程序和功能子程序;应用子程序需根据需求编写。子程序需根据需求编写。4 一、绘图子程序
3、的设计准则一、绘图子程序的设计准则 1. 子程序的通用性子程序的通用性 尽量减少子程序对硬件的依赖性尽量减少子程序对硬件的依赖性 依赖性越小,绘图子程序的通用性就越强,向其它计依赖性越小,绘图子程序的通用性就越强,向其它计算机和绘图设备的移植就越容易。算机和绘图设备的移植就越容易。 通用性是指绘图子程序对多种计算机和绘图设备通用性是指绘图子程序对多种计算机和绘图设备的适用性。的适用性。 编程语言编程语言 机器语言和汇编语言对硬件的依赖性较大,编写的子机器语言和汇编语言对硬件的依赖性较大,编写的子程序通用性差,不便于移植。程序通用性差,不便于移植。 除特殊要求外,除特殊要求外,尽可能采用计算机高
4、级语言编写通用尽可能采用计算机高级语言编写通用性强的绘图子程序。性强的绘图子程序。5 2. 子程序的参数子程序的参数 一般来说,子程序中参数的多少反映了子程序功能的一般来说,子程序中参数的多少反映了子程序功能的强弱;但参数过多又给用户带来不便。因此,在强弱;但参数过多又给用户带来不便。因此,在保证子程保证子程序功能的前提下,子程序中的参数应尽可能的少。序功能的前提下,子程序中的参数应尽可能的少。 3. 时间和内存时间和内存 选择合适的算法和设计思路,使子程序被调用时选择合适的算法和设计思路,使子程序被调用时占用占用更少的运算时间和内存。更少的运算时间和内存。6 基本子程序基本子程序是使绘图机完
5、成基本绘图动作的子程序。是使绘图机完成基本绘图动作的子程序。 如驱动和停止绘图机,画直线,控制绘图笔的抬、如驱动和停止绘图机,画直线,控制绘图笔的抬、落以及选择绘图笔等动作。落以及选择绘图笔等动作。 绘图动作含义:绘图动作含义: 抬笔:抬笔:使绘图笔的笔尖离开纸面,准备空走。使绘图笔的笔尖离开纸面,准备空走。 落笔:落笔:使绘图笔的笔尖接触纸面,准备绘图。使绘图笔的笔尖接触纸面,准备绘图。 归位:归位:抬笔走到绘图机台面左下角的原点抬笔走到绘图机台面左下角的原点(0, 0)。 选笔:选笔:选择某一支绘图笔,即选择绘图颜色。选择某一支绘图笔,即选择绘图颜色。 移动:移动:绘图笔在绘图范围内的移动
6、。绘图笔在绘图范围内的移动。 二、基本子程序的设计方法二、基本子程序的设计方法7 实现思路:实现思路:利用高级语言的利用高级语言的输出语句输出语句把绘图指令及相把绘图指令及相应的参数写入一个文件。绘图仪可从该文件中依次接收相应的参数写入一个文件。绘图仪可从该文件中依次接收相应的绘图指令并根据提供的参数值完成绘图动作。应的绘图指令并根据提供的参数值完成绘图动作。 对于不同的绘图仪,生产厂家一般都提供了相应的对于不同的绘图仪,生产厂家一般都提供了相应的绘图指令绘图指令,用于驱动绘图仪完成绘图动作。,用于驱动绘图仪完成绘图动作。 绘图指令格式为:绘图指令格式为:绘图指令绘图指令(字符字符)参数参数
7、可以在基本子程序中使用各种绘图指令,实现不同可以在基本子程序中使用各种绘图指令,实现不同的绘图动作。的绘图动作。 如何设计绘图基本子程序来控制绘图动作呢?如何设计绘图基本子程序来控制绘图动作呢?8 1. 绘图仪的绘图指令、基本子程序设计绘图仪的绘图指令、基本子程序设计 以以DXY-1100平板绘图仪平板绘图仪为例介绍绘图指令、相应的基为例介绍绘图指令、相应的基本子程序编写方法。本子程序编写方法。 xycm27cm40笔架笔架笔夹笔夹9 绘图仪初始化子程序绘图仪初始化子程序 指令格式:指令格式:M 0 , 0 (M是绘图指令,代表抬笔移动;是绘图指令,代表抬笔移动;0 , 0是参数值,代表坐标原
8、点)是参数值,代表坐标原点) 功能:功能:使绘图仪连通、绘图笔夹自动取出使绘图仪连通、绘图笔夹自动取出1号绘图笔并号绘图笔并抬笔将绘图笔移至坐标原点抬笔将绘图笔移至坐标原点(0, 0)点。点。 是每次使用绘图仪之前都必须进行的准备动作。是每次使用绘图仪之前都必须进行的准备动作。 子程序编写为:子程序编写为:10 subroutine in character *12 fm write(*, (a)Enter plotter filename: read (*, (a)fm open(11, file = fm) write(11, 111) M 0, 0 111 format(1x, a) e
9、nd(文件名(文件名.PLT 或或 p l t ) 调用方法调用方法:编写主程序调用子程序,即:编写主程序调用子程序,即CALLin。将主程序、子程序编译、连接后即可运行。运行结果是在将主程序、子程序编译、连接后即可运行。运行结果是在硬盘上产生了一个包含字符串硬盘上产生了一个包含字符串M 0, 0的文本文件。的文本文件。 等同于等同于C语言中编写一个把字符串语言中编写一个把字符串M 0, 0写入文本文写入文本文件的函数。件的函数。(fm为存放绘图指令的文件名)为存放绘图指令的文件名)11 绘图笔归位子程序绘图笔归位子程序 指令格式:指令格式:H (无参数)(无参数) 功能:功能:结束绘图,把画
10、笔放回笔架,并使笔夹归位到结束绘图,把画笔放回笔架,并使笔夹归位到坐标原点(坐标原点(0,0)。 subroutine home (子程序名子程序名) write(11,111) 111 format(1x, H ) (命令)(命令) end12 绝对抬笔移动子程序绝对抬笔移动子程序 指令格式:指令格式:M x , y (与绘图初始化的指令相同)(与绘图初始化的指令相同) 其中其中x , y是点的绝对坐标(以左下角坐标原点为基准),是点的绝对坐标(以左下角坐标原点为基准),是实型参数。是实型参数。 功能:功能:从绘图笔当前位置抬笔移动到点(从绘图笔当前位置抬笔移动到点(x , y)处。)处。
11、subroutine movea(x , y) write(11,111)x , y 111 format(1x, M , f 8.3 , , , f 8.3) endend 13(5,5)图图2-1 如图如图2-1,若绘图笔当前位置为若绘图笔当前位置为(0, 0),要抬笔移动到点,要抬笔移动到点(5, 5),),利用绝对抬笔移动子程序实现。利用绝对抬笔移动子程序实现。 下面是个绝对抬笔移动的例子。下面是个绝对抬笔移动的例子。 若再执行一次若再执行一次CALL movea(0., 0.)?)? 实现方法:实现方法: CALL movea(5., 5.) 绝对落笔画线子程序绝对落笔画线子程序 指
12、令格式:指令格式: D x , y 其中其中x , y是点的绝对坐标。是点的绝对坐标。 功能:功能:从绘图笔当前位置从绘图笔当前位置落笔画线到点(落笔画线到点(x , y)14 subroutine linea(x , y) write(11,111)x , y111 format(1x, D , f 8.3 , , , f 8.3) end15 相对落笔画线子程序相对落笔画线子程序 指令格式:指令格式:I x , y 其中其中x , y是相对坐标(以绘图笔当前位置为坐标原点是相对坐标(以绘图笔当前位置为坐标原点的坐标)的坐标) 功能:功能:从绘图笔当前位置抬笔移动到点(从绘图笔当前位置抬笔移
13、动到点(x , y)处。)处。 (程序略)(程序略) 功能:功能:以绘图笔当前位置为坐标原点,抬笔移动到指以绘图笔当前位置为坐标原点,抬笔移动到指定位置定位置。 相对抬笔移动子程序相对抬笔移动子程序 指令格式:指令格式: R x , y (程序略)(程序略)16 选择绘图笔子程序选择绘图笔子程序 功能:功能:使绘图仪取出指定的绘图笔使绘图仪取出指定的绘图笔。 指令格式:指令格式: J n (n=18,对应,对应8支不同颜色的绘图支不同颜色的绘图笔,默认值为笔,默认值为n=1) 画坐标轴子程序画坐标轴子程序 其中,其中,X是绘图指令,是绘图指令, np,q,r是参数。是参数。 np=0时画时画y
14、轴,轴,np=1时画时画x轴。轴。q轴上两条刻度线间轴上两条刻度线间的距离。的距离。r轴上刻度线的重复次数。轴上刻度线的重复次数。 功能:功能:从绘图笔当前位置起绘制从绘图笔当前位置起绘制x轴或轴或y轴。轴。 指令格式:指令格式: X np,q,r17 选择线型子程序选择线型子程序 指令格式:指令格式: Bi Lk 其中其中B、L是指令,是指令,i、k是参数。是参数。 功能:功能:使绘图笔按某种线型(实线,虚线)画线。使绘图笔按某种线型(实线,虚线)画线。 指令指令L的功能是定义线型是实线还是虚线;当的功能是定义线型是实线还是虚线;当k=0画实画实线,线,k=1画虚线。画虚线。 指令指令B的功
15、能是确定虚线的画法;按参数的功能是确定虚线的画法;按参数i(0 i 255) 值的大小画线,落笔画线长度为值的大小画线,落笔画线长度为 i 值一半,抬笔移动距离值一半,抬笔移动距离为为 i 值另一半。值另一半。 i 的默认值为的默认值为30,即,即3(最小绘图单位为(最小绘图单位为0.1)。)。18 画圆弧子程序画圆弧子程序a1a2),(yx图2-6 x , y 圆心坐标;圆心坐标; r 圆的半圆的半径径; 、 圆弧起始和终止的角度圆弧起始和终止的角度( (度)度),x轴正向为轴正向为0度(图度(图2-6)。)。1a2a 功能:功能:使绘图笔按给定的参数逆时针绘圆弧使绘图笔按给定的参数逆时针绘
16、圆弧。 指令格式:指令格式:C x , y , r , a1 , a219 设置绘图单位子程序设置绘图单位子程序 功能:功能:使绘图仪按给定的坐标参数设置绘图度量单位。使绘图仪按给定的坐标参数设置绘图度量单位。要用到要用到IP和和SC两个指令。两个指令。 指令格式:指令格式:IP p1x , p1y , p2x , p2y ; SC q1x , q2x , q1y , q2y ; 指令指令IP的功能:按默认单位给出绘图区域的左下角原的功能:按默认单位给出绘图区域的左下角原点坐标和右上角坐标,从而确定绘图区域大小(范围)。点坐标和右上角坐标,从而确定绘图区域大小(范围)。 p1x , p1y 绘
17、图区域的左下角原点坐标绘图区域的左下角原点坐标(0 , 0)。 p2x , p2y 按默认单位(按默认单位(0.1) ,绘图区域的右上,绘图区域的右上角坐标角坐标(4000 , 2700)。(p1x , p1y)(p2x , p2y)确定区域大小(范围)确定区域大小(范围)20 指令指令SC的功能:重新设置绘图区域的左下角原点坐的功能:重新设置绘图区域的左下角原点坐标和右上角坐标,从而确定新的绘图单位。标和右上角坐标,从而确定新的绘图单位。 q1x , q1y 绘图区域的左下角原点坐标绘图区域的左下角原点坐标(0 , 0)。 q2x , q2y 重新设置的绘图区域右上角坐标,如:重新设置的绘图
18、区域右上角坐标,如:(40 , 27)。 因此,上述两个指令结合起来的含义是:因此,上述两个指令结合起来的含义是:在相同的绘在相同的绘图范围内,用一个新的绘图单位取代默认的绘图单位。图范围内,用一个新的绘图单位取代默认的绘图单位。(q1x , q1y)(q2x , q2y)区域大小相同,但度量单位不同区域大小相同,但度量单位不同21 对于对于DXY-1100绘图仪,绘图范围如图绘图仪,绘图范围如图2-7所示:所示:(40 , 27)2700(默认)(默认) 4000(默认)(默认)40(新)(新)27(新)(新)绘图区域绘图区域(0 , 0) (4000 , 2700) 图图2-7 DXY-1
19、100绘图仪绘图绘图仪绘图范围示意图范围示意图 默认单位中的默认单位中的1代表代表0.1mm。 新单位中的新单位中的1代表代表1cm。 IP 0 , 0 , 4000 , 2700 ; SC 0 , 0 , 40 , 27;22 绘制字符串子程序绘制字符串子程序 功能:功能:绘制给定的一个符号串。绘制给定的一个符号串。 要用到指令要用到指令SI、DI、LB三条指令。三条指令。 指令格式:指令格式: SI w , h ; 功能:以功能:以为单位指定字符的大小;参数为单位指定字符的大小;参数w、h分别代分别代表字符的宽度和高度。表字符的宽度和高度。23 DI run , rise ; 功能:指定字
20、符的输出角度;功能:指定字符的输出角度;run、rise是控制字符角是控制字符角度的参数,设字符输出角度为度的参数,设字符输出角度为a,则,则run = cos(a),rise = sin(a)。 角度角度a是从是从x轴正向开始,逆时针方向的角度,单位为轴正向开始,逆时针方向的角度,单位为弧度。弧度。 LB chars, char(3) ; 功能:输出一个字符串,以结束符终止;参数功能:输出一个字符串,以结束符终止;参数chars是是要输出的字符串,要输出的字符串,char(3)是一个字符常量,代表结束符。是一个字符常量,代表结束符。综合上述三条指令可编写绘制字符串子程序。综合上述三条指令可编
21、写绘制字符串子程序。24 至此,介绍了至此,介绍了DXY-1100绘图仪的绘图仪的12条绘图指令及相应条绘图指令及相应的基本子程序的基本子程序设计思路设计思路。 在使用其他绘图设备时,根据相应的绘图指令,我们在使用其他绘图设备时,根据相应的绘图指令,我们可采用相同的方法编写基本子程序。可采用相同的方法编写基本子程序。 Surfer软件提供了类似平板绘图仪的功能,提供的一软件提供了类似平板绘图仪的功能,提供的一些指令可以在屏幕上画图。我们可以根据相应的指令设计些指令可以在屏幕上画图。我们可以根据相应的指令设计出基本子程序,并在出基本子程序,并在Surfer环境下运行。既把生成的绘图环境下运行。既
22、把生成的绘图文件在文件在Surfer环境下显示出来,同时可打印输出。环境下显示出来,同时可打印输出。 Surfer环境下的绘图指令与环境下的绘图指令与DXY-1100绘图仪的指令略绘图仪的指令略有不同,但编写方法完全相同;共有有不同,但编写方法完全相同;共有10个绘图基本子程序。个绘图基本子程序。25 初始化子程序初始化子程序 in 选绘图笔子程序选绘图笔子程序 pen(n) n为笔号,取值为为笔号,取值为116。 设置绘图单位子程序设置绘图单位子程序 fact(a) 当当a = 10.0时,单位为时,单位为;当;当a = 1.0时,单位为时,单位为mmmm。 绝对抬笔移动子程序绝对抬笔移动子
23、程序 movea(x , y) 相对抬笔移动子程序相对抬笔移动子程序 mover(x , y) 绝对落笔画线子程序绝对落笔画线子程序 linea(x , y) 相对落笔画线子程序相对落笔画线子程序 liner(x , y) 2. Surfer环境下的绘图基本子程序环境下的绘图基本子程序26 绘制实型数子程序绘制实型数子程序 numb1( x , y , h , a , f ) x , y是实数输出的坐标位置,是实数输出的坐标位置,h为每个数的高度,为每个数的高度,这这3个参数的单位由绘图单位决定;个参数的单位由绘图单位决定; a为输出角度(角度);为输出角度(角度);f为要输出的实型数。为要输
24、出的实型数。 绘制整型数子程序绘制整型数子程序 numb2( x , y , h , a , i ) i为要输出的整型数。为要输出的整型数。 绘制字符串子程序绘制字符串子程序 text( x , y , h , a , asc ) asc为要输出的字符串。为要输出的字符串。 上述子程序的具体内容见教材上述子程序的具体内容见教材p5053。27 功能子程序:功能子程序:是在是在基础上设计的具有某种基础上设计的具有某种特定绘图功能的子程序。特定绘图功能的子程序。 1. 绘正多边形功能子程序绘正多边形功能子程序 设正多边形的边数为设正多边形的边数为n,其外接圆的圆心坐标为,其外接圆的圆心坐标为 (x
25、0 , y0),半径为,半径为r,a是正多边形起点是正多边形起点Ps到圆心连线与到圆心连线与x轴轴正向的夹角正向的夹角(度度)。 三、功能子程序的设计方法三、功能子程序的设计方法(x0 , y0)PsP1P2P3a 绘图思路绘图思路:在外接圆上找在外接圆上找出正多边形各顶点的坐标,并出正多边形各顶点的坐标,并依次用直线连接依次用直线连接。28 各顶点坐标为:各顶点坐标为: 正多边形各边顶点与圆心连线正多边形各边顶点与圆心连线的夹角的夹角b = 2/n 。 外接圆的参数方程外接圆的参数方程: x = x0 + r cos(t) y = y0 + r sin(t) (0t2)(x0 , y0)Ps
26、P1P2P3abxs = x0+r cos(a)ys = y0+r sin(a)Ps:x1 = x0+r cos(a+b)y1 = y0+r sin(a+b)P1:x2 = x0+r cos(a+2*b)y2 = y0+r sin(a+2*b)P2:xi = x0+r cos(a+i*b)yi = y0+r sin(a+i*b)Pi:29正正6 6边形螺旋图案边形螺旋图案30 2. 绘椭圆弧功能子程序绘椭圆弧功能子程序 已知:椭圆的中心坐标为已知:椭圆的中心坐标为(x0 , y0);长、短半轴分;长、短半轴分别为别为a、b;af 为长轴的方位角为长轴的方位角(与与x轴的夹角,单位:度轴的夹角,
27、单位:度);ts和和te分别为椭圆弧起点和终点的离心角分别为椭圆弧起点和终点的离心角(与长轴的夹角,与长轴的夹角,单位:度单位:度) 椭圆的参数方程:椭圆的参数方程:其中:其中:af 为长轴的方位角为长轴的方位角; 参数参数 t 为该点的离心角。为该点的离心角。abx0,y0aftste)cos()sin()sin()cos()sin()sin()cos()cos(aftbaftayyaftbaftaxx0031 绘图思路:绘图思路:将椭圆弧离心角区间将椭圆弧离心角区间ts , te分成分成n等份,每等份,每一份的角度一份的角度dt = (te - ts) / n,由椭圆的参数方程分别求出各由
28、椭圆的参数方程分别求出各点的坐标并连线。点的坐标并连线。 第第1点:点:t = dt + ts 第第2点:点:t = 2* * dt + ts 第第i点:点:t = i * * dt + ts)cos()sin()sin()cos()sin()sin()cos()cos(aftbaftayyaftbaftaxx00 据此,可编制绘制椭圆弧的功能子程序。据此,可编制绘制椭圆弧的功能子程序。tstePsPe32基本子程序基本子程序绘图源程序绘图源程序功能子程序功能子程序其它设计其它设计生成绘图指令文件生成绘图指令文件(.PLT)向绘图机传送绘图指向绘图机传送绘图指令文件令文件完成图形绘制完成图形绘制绘图机绘图过程流程图绘图机绘图过程流程图33本章要点本章要点 1. 绘图子程序的设计准则绘图子程序的设计准则; 2. 绘图基本子程序的设计方法绘图基本子程序的设计方法; 3. 绘图功能子程序的设计方法;绘图功能子程序的设计方法; 4. 绘图子程序的调用。绘图子程序的调用。