第8章:控制网网图的绘制_第1页
第8章:控制网网图的绘制_第2页
第8章:控制网网图的绘制_第3页
第8章:控制网网图的绘制_第4页
第8章:控制网网图的绘制_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、第八章:控制网网图的绘制1第一节:利用MATLAB的绘图语句绘制网图1一、网形的绘制1二、误差椭圆的绘制3第二节: Auto CAD DXF文件数据格式介绍4一、Auto CAD的dxf文件介绍及其数据结构:4二、DXF文件的数据结构5第三节:图层设置、画点、画线以及注记程序7一、建立图层的dxf文件函数layer.m7二、画一个点并注记点名的dxf文件的函数point_text.m8三、编写画一条线的dxf文件的函数drawline.m9四、边长和方向观测值注记函数10五、输出误差椭圆的DXF文件11六、输出控制网网图的DXF文件12第八章:控制网网图的绘制在控制网设计及平差计算时,往往需要

2、对控制网的网形及点位精度有一个概括的、感性的认识,在技术总结报告中也应该包含有控制网网形等内容,因此绘制一幅包含点位、观测值、网形以及误差椭圆等信息的控制网网图是非常必要的,也是在实际工程中上交资料必不可少的内容。网形可以利用MATLAB在屏幕上绘制,但是为了便于图形的编辑、修改和出图,可以采用Auto CAD文件绘制控制网的网图,本章首先介绍利用MATLAB的绘图语句在屏幕上绘制点、连线、误差椭圆以及注记点名,然后介绍一种运用高级语言将控制网中有关数据转化为Auto CAD图形交换文件(dxf)的方法,进而分层绘制控制网中的点位、网形、误差椭圆以及注记点号、边长与方向观测值等。其中首先介绍了

3、Auto CAD 的DXF文件及其数据结构,然后介绍了采用Matlab语言编写DXF文件中画点、画线、画误差椭圆以及观测值注记的函数,最后根据写出的程序对实测的控制网绘制了网图,在网图中设置了不同的图层,可以根据需要进行出图。 第一节:利用MATLAB的绘图语句绘制网图一、网形的绘制调用函数netzbild可以进行控制网网图的绘制。由于网形图与误差椭圆绘制在同一个图形上,因此必须对误差椭圆进行放大,在如下的程序中使用了inputdlg对话框输入语句,其中缺省的放大倍数为100。在该程序中使用了ed dd pn m1 m2 m3 x y e d sid g f dir s t az c ai b

4、i fi变量,其意义与前面的叙述相同。对绘制的网图有放大和缩小功能,即点击鼠标左键放大图形,点击右键缩小图形,利用MATLAB菜单本身的功能可以将该图形输出为各种图形文件格式。function kk=netzbildglobal ed dd pn m1 m2 m3 x y e d sid g f dir s t az c ai bi fikk=0;title1 = '误差椭圆比例 'prompt011 = '请输入误差椭圆比例'lines= 1;d11= '100'c12 = inputdlg(prompt011,title1,lines,d11

5、);%输入误差椭圆比例对话框scale=str2num(str2mat(c12);hold offtitle(' 控制网网图 ');xlabel('Y坐标');ylabel('X坐标');plot(y(1:ed),x(1:ed),'k')hold on;plot(y(ed+1):end),x(ed+1):end),'k.')for i=1:ed+dd%写点名 text(y(i)+3,x(i)+3,num2str(pn(i);endfor i=1:m1%画边长连线 plot(y(e(i) y(d(i),x(e(i)

6、x(d(i),'r');endfor i=1:m2%画方向连线 plot(y(g(i) y(f(i),x(g(i) x(f(i),'b'); direction=rad_dms(dir(i);endfor i=1:m3%画方位角连线 plot(y(s(i) y(t(i),x(s(i) x(t(i),'y');endfor i=1:dd%画误差椭圆 fe(i)=fi(i)*pi/180.;plot(y(i+ed)+(ai(i)*cos(0:0.01:2*pi)*sin(fe(i)+bi(i)*sin(0:0.01:2*pi)*cos(fe(i)*s

7、cale,x(i+ed)+(ai(i)*cos(0:0.01:2*pi)*cos(fe(i)-bi(i)*sin(0:0.01:2*pi)*sin(fe(i)*scale,'r');endaxis equal;%使得X,Y比例一致zoom on;%利用鼠标左键放大图形,右键缩小图形return二、误差椭圆的绘制无论多么复杂的图形,其基本单元还是点与线。换句话说,只需利用基本元素点或线,通过各种组合,也能画出复杂的图形。MABLAB中没有提供直接绘制椭圆的命令,因此可以直接利用连线来画椭圆。测量中描述误差椭圆用三个量:长半轴A、短半轴B和方位角FI。在如图8-1-1的X'

8、OY'直角坐标系中椭圆的标准方程为:,如果以角度为变量,则椭圆的标准参数方程为:(8-1-1) 设在测量坐标系XOY中椭圆长半轴的方位角为,因此有:(8-1-2)用参数方程带入得到:(8-1-3)测量坐标系与MATLAB或AUTO CAD绘图的数学坐标系的X、Y坐标轴不同,绘图时需要调换X、Y坐标。在上式中,取不同的值,就有一组,只需这些点连接起来,就能绘出一个椭圆。 图8-1-1:误差椭圆的参数方程利用该程序绘制的某网图如图8-1-2,其中误差椭圆的放大比例为300倍。图8-1-2:某控制网网图第二节: Auto CAD DXF文件数据格式介绍一、Auto CAD的dxf文件介绍及其

9、数据结构: 美国AutoDESK公司研制的Auto CAD是一个功能强大的计算机辅助设计系统,在国内深受用户喜爱,并在各个领域得到广泛的运用。Auto CAD本身是一个完整的图形编辑系统,它维持着一个十分紧凑的图形数据库,其中存储着图形的几何信息。但是,对于普通用户而言很难直接利用图形数据库中的数据或者直接开发应用程序对图形进行操作,对普通用户的Auto CAD应用开发能力要求较高。为了满足用户的这些要求,Auto CAD提供了一个DXF文件,即图形交换文件(Drawing Interchange File).它是一个具有严格格式的ASCII码文件。以DXF文件为媒介,即可非常容易的实现Aut

10、o CAD与其他高级语言程序之间的数据交换,这样就可以直接利用高级语言生成图形再送 Auto CAD进行编辑、修改并输出图形。 图形交换文件与Auto CAD及高级语言之间的关系可用下图8-2-1表示: dxfout input Auto CAD 图形交换文件 高级语言 图形编辑状态 (DXF) (Matlab) dxfin output图8-2-1:Auto CAD及高级语言的联系简单的说就是利用高级语言导出生成DXF文件,再启动cad.exe来调用dxf文件出网图。二、DXF文件的数据结构 要利用DXF文件,就必须了解DXF文件的结构。 DXF文件由顺序出现的四大节(Section)组成,

11、即标题节(Header Section)、表节(Tables Section)、块节(Blocks Section)和实体节(Entities Section)构成。在某一图形的DXF文件中,标题节记录着与图形有关的变量设置,如:基点坐标、图形范围、捕捉方式、拖动方式、尺寸标注的状态等信息;表节中记录着四种类型的的表,它们依次是线型表、层表、字体表和视图表;块节记录着图形中所有块的定义信息;实体节中记录着组成图形的所有实体。 DXF文件全部是以组(GROUP)组成的。一个DXF文件可由若干个组构成,每个组占两行。组的首行是组代码,它是一个非负整数。组的第二行是组值,采用的格式取决于由组代码规定

12、的组的类型。组代码的具体赋值取决于文件中所描述的内容。组码与组值之间需遵循下面规定: 组代码 组值 09 字符串 1059 浮点数 6079 整型数具体的组代码的含义如下: 0 标识图素实体、表项或文件头的开始,后随的文字标明具体对象 1 图素实体的文字说明 2 名称、属性、特征、图块名等,如Line、point、circle、text等 35 其它文字或名称 6 线型名 7 实体名 8 图层名 9 变量名标识符(仅用于标题段) 10主X坐标(直线或文字起点、圆心等) 1118其它X坐标 20 主Y坐标 2128其它 Y坐标 30 主Z坐标 3136其它Z坐标 38实体的标高,如果非零的话 3

13、9实体厚度,如果非零的话 4048文字字符高,比例因数等浮点数数值 49重复性的值 5058角度值 62 颜色号 66实体跟随标志 7078整数值,如重复次数、标志位、模式等下面对各节的内容做一简单介绍。标题节(header):dxf文件的标题节用来记录与图象相关的变量的设定值。这些变量值可以用各种autocad命令来设置或修改,也可以用status(状态)命令显示变量的值。每个变量在标题节中用一个组码9来规定名字,其后跟着描述变量值的组。表格节(table):dxf文件的表格节包括多个表,每个表又包括可变数目的表项。表的顺序可能有变化,但ltype表总是在layer表的前面。每个表都是用带有

14、标记“table”的严格0组来引入的,继之是命名该表(port,ltype,style,view,dimstyle,ucs或appid)的2组,再继之以70组。70组规定了允许跟随的表项的最大数目,表名总是用大写字母输出。图块节(block):dxf的图块节用作记录图形中所有的图块定义信息。无论是用block命令定义的图块(称为用户块)还是在执行hatch、相关dim命令或者其他内部操作而使系统自动生成的“无名”块,都要在图块节中详细地进行描述。图元(实体)节(entities):每一个图元均以一个标识图元的0组开始。但是,图元描述没有显示的结束标记;当遇到下一个图元的开始,即意味着该图元描述

15、的结束。各图元都包括8组,它给出该图元所在的图层名。每个图元可以有相应的标高、厚度、线形或颜色号等信息。编写一个构造完整的DXF文件的高级语言程序是很复杂的,因为必须保持其一致性以便让Auto CAD能找到其所需要的一切信息。但实际上,Auto CAD可以省略DXF文件中的很多项,且仍能获得一个可用的图形。如:当不需要设置任何标题变量时,整个标题节即可省略;当不需要设置线型、层、字体和视图时,整个表节也可省略;当没有块定义时,整个块节也可以省略。事实上,整个DXF文件只有实体节是必不可少的。因此,用高级语言编写一个生成Auto CAD可读图形的DXF文件,只需着重了解其实体节的构造情况就可以了

16、。 DXF文件的实体节构成如下: 0 SECTION 2 实体节开始 ENTITIES 绘图元素:所有实体的描述 0 ENDSEC 实体节结束 实体节中可包含多个实体,每个实体以组码为0,其值为实体名的组开始,实体描述没有明显的结束标志,遇到下一个实体的开始,即意味着本实体的结束。每个实体中除了表示实体所驻留的层名组8及其组值是必须的外,其他均可采用系统缺省值。在表格节中可以定义层名以及层中的线形、颜色等信息。层表:2-层名,70-若其后为0则线型文件名与DXF文件名一致,若为64则不一致,62-本层所用颜色,6-本层所用线型名。每层只允许有一种颜色,颜色号为1-255,前7种为:1-大红,2

17、-黄,3-深绿,4-天兰,5-兰,6-玫瑰红,7-亮白。Auto CAD 软件的线型文件ACAD.LIN带有9种基本线型:实线-Continuous,规划线-Dashed,虚线-Hidden,点线-Dot,中心线-Center,双组划线-Phantom,点划线-Dashdot,分界限-Border,双点划线-Divide。字型表:40-初始字高,若为0则由TEXT定字高,41-宽度因子,50-字的倾角,71-字体文件生成标记,42-TEXT所用最后字高,3-字体文件名。在控制网网图绘制时主要涉及到点、线、文字等内容,在实体段中具体的表达如下:圆:10、20、30-圆心,40-半径。直线:10、

18、20、30-起点X、Y、Z坐标,11、21、31-终点X、Y、Z坐标。文字:10、20、30-插入点X、Y、Z坐标,40-字高,1-文字内容,50-文字倾角,41-X向比例,7-字体名。第三节:图层设置、画点、画线以及注记程序一、建立图层的dxf文件函数layer.m下面的一段Matlab程序中建立了6个图层,分别用于存放控制网的点与点名、边长连线、边长观测值注记、方向连线、方向观测值注记以及误差椭圆。6组代表相应层的线形,62组代表该层的颜色。其中入口变量fit2是dxf输出文件的通道号。function layer(fit2)%-LARER COLOR AND LTYPE CONFIGfp

19、rintf(fit2,'0n'); fprintf(fit2,'SECTIONn');fprintf(fit2,'2n'); fprintf(fit2,'TABLESn');fprintf(fit2,'0n'); fprintf(fit2,'TABLEn');fprintf(fit2,'2n'); fprintf(fit2,'LAYERn');% 定义点层POINTfprintf(fit2,'0n'); fprintf(fit2,'LAYERn

20、');fprintf(fit2,'2n'); fprintf(fit2,'POINTn');fprintf(fit2,'70n'); fprintf(fit2,'64n');fprintf(fit2,'62n'); fprintf(fit2,'1n'); %1为红色fprintf(fit2,'6n'); fprintf(fit2,'CONTINUOUSn');% 定义边长连线层SIDELINEfprintf(fit2,'0n'); fprint

21、f(fit2,'LAYERn');fprintf(fit2,'2n'); fprintf(fit2,'SIDELINEn');fprintf(fit2,'70n'); fprintf(fit2,'64n');fprintf(fit2,'62n'); fprintf(fit2,'7n'); %7为黑色fprintf(fit2,'6n'); fprintf(fit2,'CONTINUOUSn');% 定义方向连线层DIRECTIONLINEfprintf(

22、fit2,'0n'); fprintf(fit2,'LAYERn');fprintf(fit2,'2n'); fprintf(fit2,'DIRECTIONLINEn');fprintf(fit2,'70n'); fprintf(fit2,'64n');fprintf(fit2,'62n'); fprintf(fit2,'5n'); %5为兰色fprintf(fit2,'6n'); fprintf(fit2,'CONTINUOUSn')

23、;% 定义边长注记层SIDEfprintf(fit2,'0n'); fprintf(fit2,'LAYERn');fprintf(fit2,'2n'); fprintf(fit2,'SIDEn');fprintf(fit2,'70n'); fprintf(fit2,'64n');fprintf(fit2,'62n'); fprintf(fit2,'5n');fprintf(fit2,'6n'); fprintf(fit2,'CONTINUOUS

24、n');% 定义方向注记层DIRECTIONfprintf(fit2,'0n'); fprintf(fit2,'LAYERn');fprintf(fit2,'2n'); fprintf(fit2,'DIRECTIONn');fprintf(fit2,'70n'); fprintf(fit2,'64n');fprintf(fit2,'62n'); fprintf(fit2,'7n');fprintf(fit2,'6n'); fprintf(fit

25、2,'CONTINUOUSn');% 定义误差椭圆层ELLIPSEfprintf(fit2,'0n'); fprintf(fit2,'LAYERn');fprintf(fit2,'2n'); fprintf(fit2,'ELLIPSEn');fprintf(fit2,'70n'); fprintf(fit2,'64n');fprintf(fit2,'62n'); fprintf(fit2,'7n');fprintf(fit2,'6n')

26、; fprintf(fit2,'CONTINUOUSn');%结束表节fprintf(fit2,'0n'); fprintf(fit2,'ENDTABn');fprintf(fit2,'0n'); fprintf(fit2,'ENDSECn');return通过上面一个程序的阅读和理解,读者可以根据需要设置自己的图层,并对图层的颜色和线形进行设置。二、画一个点并注记点名的dxf文件的函数point_text.m下面一段MATLAB程序是画点并标注点号的函数,函数入口变量中fit2为输出文件的通道号,layernam

27、e为层名,groesse为注记的字体的大小,text为要注记的点名,x、y为所要画的点的坐标。本程序将点以及点名放置于同一层。function point_text(fit2,layername,groesse,text,x,y)fprintf(fit2,'0n'); fprintf(fit2,'POINTn');fprintf(fit2,'8n'); fprintf(fit2,'%sn',layername);fprintf(fit2,'10n'); fprintf(fit2,'%12.3fn',

28、x);fprintf(fit2,'20n'); fprintf(fit2,'%12.3fn',y);fprintf(fit2,'0n'); fprintf(fit2,'TEXTn');fprintf(fit2,'8n'); fprintf(fit2,'%sn',layername);fprintf(fit2,'10n'); fprintf(fit2,'%12.3fn',x);fprintf(fit2,'20n'); fprintf(fit2,'

29、%12.3fn',y);fprintf(fit2,'40n'); fprintf(fit2,'%dn',groesse);fprintf(fit2,'1n'); fprintf(fit2,'%sn',text);return调用该程序可以得到一个如下格式的dxf文件:表8-3-1:一个点以及注记的DXF文件格式0标识一个图元、表项或文件分节的开始和结束,跟在其后面的文字值指示出属于哪一种POINT说明该实体为点8图层名(固定的)layername图层名10说明紧跟的是初始x的坐标x初始x的坐标20说明紧跟的初始y的坐标y初

30、始y的坐标0同前面的说明text说明该实体的属性为注记8同前面的说明layername同前面的说明10同前面的说明x同前面的说明20同前面的说明y同前面的说明40说明紧跟的字体大小groesse字体大小1说明紧跟的是图素实体的文字说明text注记的点号在图层定义时给定了该层使用的线形变量为continuous。画出所有点并注记的程序如下:for i=1:sd point_text(fit3,'POINT',25,num2str(pn(i),y(i),x(i)end三、编写画一条线的dxf文件的函数drawline.m下面一段MATLAB程序是画线的函数,其中fit2为输出文件的

31、通道号,layername为层名,x1、y1、z1为直线起点的坐标,,x2、y2、z2为直线终点的坐标。function drawline(fit2,layername,x1,y1,z1,x2,y2,z2)fprintf(fit2,'0n'); fprintf(fit2,'LINEn');fprintf(fit2,'8n'); fprintf(fit2,'%sn',layername);fprintf(fit2,'10n'); fprintf(fit2,'%12.3fn',x1);fprintf(f

32、it2,'20n'); fprintf(fit2,'%12.3fn',y1);fprintf(fit2,'30n'); fprintf(fit2,'%12.3fn',z1);fprintf(fit2,'11n'); fprintf(fit2,'%12.3fn',x2);fprintf(fit2,'21n'); fprintf(fit2,'%12.3fn',y2);fprintf(fit2,'31n'); fprintf(fit2,'%12.3f

33、n',z2);return这段程序产生一个画线的dxf文件。表8-3-2:图元(entities)节的说明Line10,20和30(始点),11,21,31(终点)point10、20、30(点),50绘制该点时有效的的角度可选0。circle10、20和30(圆心),40(半径)text10、20和30(插入点),40(字高),1(文字值),50(旋转角可选0),51(倾斜角可选0),7(文字字型名)画出控制网所有测边连线的程序如下:for i=1:m1drawline(fit3,'SIDELINE',y(e(i),x(e(i),0,y(d(i),x(d(i),0);

34、end四、边长和方向观测值注记函数由于测量坐标系与Auto CAD坐标系的定义不同,如图8-3-1所示,在进行字体注记时要给出旋转角,该角度与方位角的换算如下:(8-3-1)对于边长注记希望字体朝上,便于阅读,因此字体的旋转角在0到90和270到360之间,边长观测值注记函数的目标是在网图上两点连线中间的位置上以平行于边长的方向标记出边长的实际观测值,该函数入口中side为边长实际观测值,x1、y1、x2、y2为两点的坐标。其中groesse为字体大小,50组表示字体的方位。图8-3-1:两种坐标系统function sidevalue(fit2,layername,groesse,side,

35、x1,y1,x2,y2)%-write sidefprintf(fit2,'0n'); fprintf(fit2,'TEXTn');fprintf(fit2,'8n'); fprintf(fit2,'%sn',layername);x=(x1+x2)/2;y=(y1+y2)/2;fi1=360-(alfa(y2-y1),(x2-x1)*180/pi-90);if(fi1>90&fi1<180) fi1=fi1+180;endif(fi1>180&fi1<270) fi1=fi1-180;en

36、dfprintf(fit2,'10n'); fprintf(fit2,'%12.3fn',x);fprintf(fit2,'20n'); fprintf(fit2,'%12.3fn',y);fprintf(fit2,'40n'); fprintf(fit2,'%dn',groesse);fprintf(fit2,'50n'); fprintf(fit2,'%10.4fn',fi1);fprintf(fit2,'1n'); fprintf(fit2,&#

37、39;%sn',num2str(side);return方向观测值的注记与边长不同的是其注记的位置是靠近点位且与方向线平行注记,如下程序中direction为方向观测值,offset是方向值注记的位置距该点的距离。function directionvalue(fit2,layername,groesse,direction,x1,y1,x2,y2,offset)%-write directionfprintf(fit2,'0n'); fprintf(fit2,'TEXTn');fprintf(fit2,'8n'); fprintf(fi

38、t2,'%sn',layername);x=(x1+x2)/2;y=(y1+y2)/2;fi2=-alfa(y2-y1),(x2-x1)*180/pi+90;fi1=alfa(y2-y1),(x2-x1);fprintf(fit2,'10n'); fprintf(fit2,'%12.3fn',x1+offset*sin(fi1);fprintf(fit2,'20n'); fprintf(fit2,'%12.3fn',y1+offset*cos(fi1);fprintf(fit2,'40n'); fp

39、rintf(fit2,'%dn',groesse);fprintf(fit2,'50n'); fprintf(fit2,'%10.4fn',fi2);fprintf(fit2,'1n'); fprintf(fit2,'%sn',num2str(direction);return五、输出误差椭圆的DXF文件下列函数中x、y为椭圆的中心坐标,a、b分别为椭圆的长半径和短半径,fi为长半径的方位角。由于网形与误差椭圆在同一图形中表示,因此误差椭圆的比例做了适当的放大,程序中scale 为放大的倍数。function pl

40、ot_ellipse(fit2,x,y,a,b,fi,scale)BETA = pi/ 30;fe=fi*pi/180;for j = 1:60XE(j) = x + (b*cos(fe)*sin(BETA * j)+a *sin(fe)*cos (BETA * j)*scale;YE(j) = y - (b*sin(fe)*sin(BETA * j)-a *cos(fe)*cos (BETA * j)*scale;ZE(j) = 0;endfor K = 1:59fprintf(fit2,' 0n'); fprintf(fit2,'LINEn');fprint

41、f(fit2,' 8n'); fprintf(fit2,'ELLIPSEn');fprintf(fit2,' 10n'); fprintf(fit2,'%15.3fn',XE(K);fprintf(fit2,' 20n'); fprintf(fit2,'%15.3fn',YE(K);fprintf(fit2,' 11n'); fprintf(fit2,'%15.3fn',XE(K+1);fprintf(fit2,' 21n'); fprintf(fit

42、2,'%15.3fn',YE(K+1);endfprintf(fit2,' 0n'); fprintf(fit2,'LINEn');fprintf(fit2,' 8n'); fprintf(fit2,'ELLIPSEn');fprintf(fit2,' 10n'); fprintf(fit2,'%15.3fn',XE(60);fprintf(fit2,' 20n'); fprintf(fit2,'%15.3fn',YE(60);fprintf(fit2,' 11n'); fprintf(fit2,'%15.3fn',XE(1);fprintf(fit2,' 21n'); fprintf(fit2,'%15.3fn',YE(1);return六、输出控制网网图的DXF文件画网图及注记的DXF文件程序如下,程序中首先打开输出文件名,设置绘图的几项参数,包括误差椭圆比例、字体大小、方向值注记距离点的距离。function kk=dxfoutglobal net ed dd sd dd1

温馨提示

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

评论

0/150

提交评论