程序设计教案VB版第七章_第1页
程序设计教案VB版第七章_第2页
程序设计教案VB版第七章_第3页
程序设计教案VB版第七章_第4页
程序设计教案VB版第七章_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

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

文档简介

第七章绘制误差椭圆、误差曲线的程序设计方法§7-1绘制误差椭圆的程序设计方法测量平面控制网平差计算后进行精度评定时,点位中误差虽然可以用来评定待定点的点位精度,但是它却不能代表该点在某一任意方向上的位差大小。在有些情况下,往往需要确定点位在某些特殊方向上的位差大小;此外,还要了解点位在哪一个方向上的位差最大,在哪一个方向上的位差最小。例如,在工程放样中,就经常需要研究这个问题。为了便于求定待定点点位在任意方向上位差的大小,一般是通过求出待定点的点位误差椭圆来实现的。通过误差椭圆可以求得待定点在任意方向上的位差,这样就可以较精确地、形象而全面地反映待定点点位在各个方向上误差的分布情况。为了确定任意两个待定点之间相对位置的某些精度,也需要作出两个待定点之间的相对误差椭圆。无论是表示点位绝对位差的误差椭圆,还是表示两个待定点之间相对位置的某些精度的相对误差椭圆,在测量程序设计中所要面临的问题都是绘制椭圆,而这个椭圆一般情况下不是正立的。由于目前常用的几种编程语言(例如VB、VC)中没有现成的语句、命令、函数或方法来绘制倾斜任意角度的椭圆,因此,下面研究在计算机屏幕上绘制倾斜任意角度的椭圆的编程方法。一、绘制误差椭圆的基本思路以下讨论问题及编程中所使用的平面直角坐标系,设经过一段程序的控制,已将屏幕绘图区域的平面直角坐标系调整为测量平面直角坐标系(以下简称坐标系),即纵轴向上为X轴正向,横轴向右为Y轴正向。绘制倾斜任意角度的误差椭圆时,已知数据如下:椭圆的长半轴:E(也可用表示)椭圆的短半轴:F(也可用表示)椭圆中心点的在坐标系中的坐标:()椭圆长半轴在坐标系中的坐标方位角:T(T称为误差椭圆的主轴方向)如图7-1所示,绘制倾斜任意角度的误差椭圆的基本思路是:首先,求出在坐标系中坐标方位角为T的椭圆长半轴与椭圆圆周的交点G的坐标;然后,再求出椭圆圆周上一系列点的坐标(设时,点与G点重合;时,点与G点重合);最后,从G点开始用VB中画直线方法LINE(以下简称LINE)依次连接相邻点。为了用LINE依次连接相邻点时所画出的直线趋近于椭圆曲线,需要使椭圆圆周上一系列点(将点称为误差椭圆圆周上细部点,简称点,下同)分布合理,即点与点之间的直线距离应足够小。鉴于计算机屏幕的分辨率,可控制在0.2mm内。关于G点坐标的计算,应以椭圆中心点坐标()作为起始坐标、以椭圆的长半轴E为距离、以T为坐标方位角、按坐标正算的方法进行计算,即:(7-1)椭圆长轴与椭圆圆周的另一个交点GA的坐标为:(7-2)椭圆短轴与椭圆圆周的两个交点H、HA的坐标分别为:(7-3)(7-4)根据上述坐标,用LINE可画出椭圆的长轴及短轴。以下重点介绍计算点坐标的方法。二、计算点坐标的方法1、坐标转换公式如图7-1所示,设点在坐标系中的坐标为、,在坐标系中的坐标为、;点在坐标系中的坐标为、;轴正向在坐标系中的坐标方位角为。则可以推证出如下坐标互换公式:图7-1倾斜任意角度的误差椭圆(7-5)及:(7-6)2、计算点坐标的参数方程法如图7-2所示,该法的基本思路是:先用椭圆的参数方程求解正立竖放椭圆上点坐标、;然后,使用坐标转换公式的(7-5)式计算点在坐标系中的坐标、。点在坐标系中的坐标、可用参数方程表示为:(7-7)参照图7-1,用代替、代替、代替、代替、代替,将(7-7)式代入(7-5)式中,可得任一点在坐标系中的坐标为:(7-8)如图7-2所示,编程中,可设,其中是椭圆圆周上有序(即有一定规律)分布的一系列点中的任意相邻两点、和椭圆中心相连的直线的夹角,应从开始沿顺时针方向递增,即自轴正向沿着顺时针方向至的水平夹角;是程序中的循环变量,。3、计算点坐标的直线点斜式方程法如图7-2所示,该法的基本思路是:首先,求出图7-2正立竖放椭圆椭圆圆周上一系列点到椭圆中心的距离;然后,直接用坐标正算公式求解点在坐标系中坐标、。设正立竖放椭圆中心点在坐标系中的坐标为,则过该点及椭圆圆周上任一点的直线点斜式方程为:(7-9)其中:(7-10)(7-10)式中的为直线的斜率,、的意义与前面相同。在坐标系中的正立竖放椭圆的标准方程为:(7-11)将(7-9)式代入到(7-11)式,并顾及(7-10)式,可解得:(7-12)则点至点的距离为:(7-13)从式(7-13)可以看出,的计算与坐标系无关,也可以说与椭圆倾斜角度无关。在图7-1与图7-2中,不论椭圆是正立竖放,还是倾斜任意角度的,是不变的。因此,点在坐标系中的坐标按坐标正算公式可得:(7-14)编程中,如图7-1所示,从G点开始依顺时针方向用LINE依次连接相邻点,最后,再回到G点,即可绘出所要求的误差椭圆。4、计算点坐标的递推计算方法该方法与计算点坐标的参数方程法基本相同,只是编程计算中采用了递推计算的方法计算和。详见后面的示例程序。三、坐标轴的平移、旋转公式(即(7-5)式、(7-6)式的推导过程)如图7-3所示,设P点在坐标系中的坐标为(,),点在坐标系中的坐标为;经图7-3坐标轴的平移、旋转平移、旋转后,P点在坐标系中的坐标为(,)。根据求的公式如下:根据,也可求得,有以下两种方法。方法一:根据上面的两式联立方程组,可解得。方法二:如图7-3所示,设,则可得:四、正立横放椭圆的参数方程与标准方程绘制倾斜任意角度的误差椭圆时,也可根据正立横放椭圆推导出另一套公式进行编程。如图7-4所示,正立横放椭圆的参数方程为:图7-4正立横放椭圆在坐标系中,椭圆中心位于坐标原点的正立横放椭圆的标准方程为:五、绘制误差椭圆程序示例(输出图形见图7-5)PrivateSubGPHPIC22_Click()Rem*****绘制误差椭圆菜单子过程*****DimXAsDoubleDimYAsDoubleDimAAsDoubleDimBAsDoubleDimTAsStringClsForm2.DrawStyle=0:'*****设定绘制单实线Form2.DrawWidth=1:'*****设定绘制单实线的线宽Form2.Line(1,7)-(199,143),RGB(255,0,0),B:'*****绘制一个红色矩形作为绘图区域。X=80:'*****椭圆中心测量纵坐标*****Y=100:'*****椭圆中心测量横坐标*****A=25.4:'*****椭圆长半轴*****B=9.5:'*****椭圆短半轴*****T="1385412":'*****椭圆长半轴坐标方位角****CallGPHP15(X,Y,A,B,T)EndSubPrivateSubGPHP15(ByValXCAsDouble,ByValYCAsDouble,ByValAAsDouble,ByValBAsDouble,ByValTAsString)Rem*****绘制误差椭圆子过程*****DimIIAsIntegerDimNAsIntegerDimIAsIntegerDimDTAsDoubleDimTTAsDouble:'*****椭圆长半轴坐标方位角****N=200ReDimX(N+1)AsDoubleReDimY(N+1)AsDoubleTT=RAD(T):'*****程序中T应为度、分、秒(字符串)DT=2*PI()/NII=3:'*****选择绘制椭圆的方法SelectCaseIICase1:'*****用椭圆参数方程及将坐标进行平移、旋转变换的方法Form2.PSet(YC+A*Sin(TT),XC+A*Cos(TT)),RGB(0,0,0)ForI=1ToNX(I)=XC+A*Cos(I*DT)*Cos(TT)-B*Sin(I*DT)*Sin(TT)Y(I)=YC+A*Cos(I*DT)*Sin(TT)+B*Sin(I*DT)*Cos(TT)Form2.Line-(Y(I),X(I)),RGB(0,0,0)NextICase2:'*****用递推计算方法绘制误差椭圆,该方法与第一种方法的基本公式相同DimC1AsDoubleDimS1AsDoubleDimCCAsDoubleDimSSAsDoubleDimCTAsDoubleDimSTAsDoubleDimDCTAsDoubleDimXPAsDoubleDimYPAsDoubleC1=Cos(TT)S1=Sin(TT)CC=Cos(DT)SS=Sin(DT)CT=1ST=0Form2.PSet(YC+A*S1,XC+A*C1),RGB(0,0,0)ForI=1ToNDCT=CT*CC-ST*SS:'*****递推求算Cos(i*DT)ST=ST*CC+CT*SS:'*****递推求算Sin(i*DT)CT=DCTXP=XC+A*CT*Cos(TT)-B*ST*Sin(TT)YP=YC+A*CT*Sin(TT)+B*ST*Cos(TT)Form2.Line-(YP,XP),RGB(0,0,0)NextICase3:'*****用点斜式直线方程与竖放椭圆的标准方程联立方程组Rem*****解算椭圆中心O(0,0)至椭圆圆周交点距离的方法DimATAsDoubleDimBTAsDoubleDimXIAsDoubleDimYIAsDoubleDimMAsDoubleDimDIAsDoubleDimXPIAsDoubleDimYPIAsDoubleForm2.PSet(YC+A*Sin(TT),XC+A*Cos(TT)),RGB(0,0,0)AT=A^2BT=B^2ForI=1ToNM=Tan(I*DT):'*****直线的斜率M=M^2XI=AT*BT/(BT+AT*M):'*****正立竖放椭圆圆周i点纵坐标的平方,X(i)^2YI=XI*M:'*****正立竖放椭圆圆周i点横坐标的平方,Y(i)^2DI=Sqr(XI+YI):'*****椭圆中心至椭圆圆周i点的距离D(i)XPI=XC+DI*Cos(TT+I*DT):'*****斜立椭圆圆周i点的纵坐标XP(i)YPI=YC+DI*Sin(TT+I*DT):'*****斜立椭圆圆周i点的横坐标YP(i)Form2.Line-(YPI,XPI),RGB(0,0,0)NextIEndSelectRem*****绘制椭圆的长、短轴,用坐标正算的方法*****DimX1AsDoubleDimY1AsDoubleDimX2AsDoubleDimY2AsDoubleX1=XC+A*Cos(TT)Y1=YC+A*Sin(TT)X2=XC+A*Cos(TT+PI())图7-5误差椭圆Y2=YC+A*Sin(TT+PI())Line(Y1,X1)-(Y2,X2),RGB(255,0,0)X1=XC+B*Cos(TT+PI()/2)Y1=YC+B*Sin(TT+PI()/2)X2=XC+B*Cos(TT+3*PI()/2)Y2=YC+B*Sin(TT+3*PI()/2)Line(Y1,X1)-(Y2,X2),RGB(255,0,0)Rem*****以下绘制测量坐标系及方框*****Rem*****略*****EndSub§7-2绘制误差曲线的程序设计方法一、误差曲线简介误差曲线的方程为:式中:——误差曲线所对应的误差椭圆的长半轴——误差曲线所对应的误差椭圆的短半轴——以为起始方向、以误差曲线中心为起始点、沿顺时针方向对应误差曲线上某点的方向角——对应任意方向角的误差曲线上某点的位差以不同的和为极坐标的点的轨迹为一条闭合的曲线。显然,从曲线中心O至曲线上任意点P(对应误差曲线上某点的方向角为)的向径就是该方向的位差。这个曲线可以把各方向的位差清楚地图解出来。在工程测量中,误差曲线的用途是广泛的。根据这个图可以确定坐标平差值在各个方向上的位差。参见文献[34]P461-462)二、误差曲线的程序设计方法由于编程语言中没有现成的语句、命令、函数或方法来绘制倾斜任意角度的误差曲线,因此,下面研究在计算机屏幕上绘制倾斜任意角度的误差曲线的编程方法。绘制倾斜任意角度的误差曲线时,已知数据如下:对应误差曲线的误差椭圆的长半轴:A(或a)对应误差曲线的误差椭圆的短半轴:B(或b)对应误差曲线的误差椭圆中心点的测量坐标系坐标:(XO,YO)对应误差曲线的误差椭圆长半轴在测量坐标系中的坐标方位角:T下面讨论问题及编程中所使用的平面坐标系均为测量平面直角坐标系,即纵轴向上为X轴正向,横轴向右为Y轴正向。绘制倾斜任意角度的误差曲线的基本思路是:首先,求出在测量坐标系中坐标方位角为T的椭圆长半轴与椭圆圆周的交点G(该点也是椭圆长半轴与误差曲线的交点)的坐标;然后,再求出误差曲线上一系列点的坐标;最后,从G点开始用画直线方法LINE依次连接相邻点。为了用画直线方法LINE依次连接相邻点时所画出的直线趋近于误差曲线,需要将误差曲线上一系列点分布的合理,即与的距离应足够小,且任意相邻两点与和误差曲线中心(也是误差椭圆中心)相连的直线的夹角均相等——这是为了使编程计算有规律性。实际编程中,如图7-6所示,在测量坐标系中坐标方位角为T的椭圆长半轴与椭圆圆周的交点G的坐标,应以椭圆中心点坐标(Xo,Yo)作为起始坐标、以椭圆的长半轴A为距离、以T为坐标方位角、按坐标正算的方法计算G点的坐标:椭圆长轴与椭圆圆周的另一个交点GA的坐标为:椭圆短轴与椭圆圆周的两个交点F、FA的坐标分别为:根据上述坐标,用画直线方法LINE可图7-6倾斜任意角度的误差曲线画出椭圆的长轴及短轴,这也是误差曲线的长轴及短轴。计算倾斜任意角度的误差曲线上任意点坐标的方法,可采用与绘制误差椭圆相同的方法,如图7-6所示。首先,求出在测量坐标系中坐标方位角为T的椭圆长半轴与椭圆圆周的交点G的坐标。然后,再求出误差曲线上一系列点到误差曲线中心的距离。不论误差曲线是正立竖放,还是倾斜任意角度的,这个距离值是确定不变的,因此,可按正立竖放的误差曲线求算该距离值,如图7-7所示,对于误差曲线上的任意一点,有。实际编程中,可取。图7-7竖立正放的误差曲线按坐标正算可得误差曲线上任意点的坐标:最后,在图7-6中从G点开始用画直线方法LINE依次连接相邻点,即可绘出误差曲线。三、误差曲线编程示例(含屏幕显示及打印机打印误差曲线两部分)(见图7-8)PrivateSubGPHPIC23_Click()Rem*****绘制误差曲线一级菜单子过程*****EndSubPrivateSubGPHPIC24_Click()Rem*****显示误差曲线菜单子过程*****DimXAsDoubleDimYAsDoubleDimAAsDoubleDimBAsDoubleDimTAsStringClsForm2.DrawStyle=0:'*****设定绘制单实线Form2.DrawWidth=1:'*****设定绘制单实线的线宽Form2.Line(1,7)-(199,143),RGB(255,0,0),B:'绘制一个红色矩形作为绘图区域。X=80:'*****曲线中心测量纵坐标*****Y=100:'*****曲线中心测量横坐标*****A=25.4:'*****对应误差曲线的误差椭圆的长半轴*****B=9.5:'*****对应误差曲线的误差椭圆的短半轴*****T="1385412":'*****对应误差曲线的误差椭圆的长半轴坐标方位角****CallGPHP16(X,Y,A,B,T,1)EndSubPrivateSubGPHPIC25_Click()Rem*****打印机打印误差曲线菜单子过程DimXAsDoubleDimYAsDoubleDimAAsDoubleDimBAsDoubleDimTAsStringClsForm2.DrawStyle=0:'*****设定绘制单实线Form2.DrawWidth=1:'*****设定绘制单实线的线宽Form2.Line(1,7)-(199,143),RGB(255,0,0),B:'绘制一个红色矩形作为绘图区域。X=80:'*****曲线中心测量纵坐标*****Y=100:'*****曲线中心测量横坐标*****A=25.4:'*****对应误差曲线的误差椭圆的长半轴*****B=9.5:'*****对应误差曲线的误差椭圆的短半轴*****T="1385412":'*****对应误差曲线的误差椭圆的长半轴坐标方位角****CallGPHP16(X,Y,A,B,T,2)EndSubPrivateSubGPHP16(ByValXCAsDouble,ByValYCAsDouble,ByValAAsDouble,ByValBAsDouble,ByValTAsString,ByValPPAsInteger)Rem*****屏幕显示及打印机打印误差曲线子过程*****Rem*****当PP=1时,屏幕显示误差曲线*****Rem*****当PP=2时,打印机打印误差曲线*****DimNAsIntegerDimIAsIntegerDimDTAsDoubleDimTTAsDouble:'*****对应误差曲线的误差椭圆的长半轴坐标方位角****N=400TT=RAD(T):'*****程序中T应为度、分、秒(字符串)DT=2*PI()/NRem*****用点斜式直线方程与竖放椭圆(或竖放误差曲线)的标准方程联立方程组Rem*****解算椭圆中心O(0,0)至椭圆圆周(或竖放误差曲线)交点距离的方法Rem*****误差曲线的方程为:m^2=a^2*(Cos(t))^2+b^2*(Sin(t))^2DimATAsDoubleDimBTAsDoubleDimXIAsDoubleDimYIAsDoubleDimMAsDoubleDimDIAsDoubleDimXPIAsDoubleDimYPIAsDoubleAT=A^2BT=B^2IfPP=1ThenForm2.PSet(YC+A*Sin(TT),XC+A*Cos(TT)),RGB(0,0,0)ElseIfPP=2ThenDimXXXAsPrinterForEachXXXInPrintersIfXXX.Orientation=vbPRORPortraitThenSetPrinter=XXX:'*设置为系统默认打印机,参见《VB6.0中文版参考详解》P502ExitForEndIfNextPrinter.ScaleMode=0:'*****通常先设为零Printer.ScaleMode=6:'*****设置打印机坐标系的单位是毫米DimASPPAsSingleASPP=Printer.ScaleHeight/Printer.ScaleWidth:'***设置打印机新的绘图区坐标系纵横比Rem*****当设置打印机坐标系的单位是毫米时,ASPP值约为0.72Printer.ScaleWidth=200:'***设置打印机新的绘图区坐标系宽为200Printer.ScaleHeight=-Int(Printer.ScaleWidth*ASPP):'***设置打印机新的绘图区坐标系高Printer.ScaleLeft=-0:'***设置打印机新的绘图区坐标系坐标原点横坐标值Printer.ScaleTop=-Printer.ScaleHeight:'-ScaleHeight:'***设置打印机新的绘图区坐标系坐标原点纵坐标值Rem*****通过以上的设定,将打印机绘图区坐标系设为与数学坐标系相同Printer.DrawStyle=0:'*****设定打印机打印单实线Printer.DrawWidth=1:'*****设定打印机打印单实线的线宽Printer.PSet(YC+A*Sin(TT),XC+A*Cos(TT)):'***打印机打印EndIfForI=1ToNM=Tan(I*DT):'*****直线的斜率M=M^2XI=AT*BT/(BT+AT*M):'*****正立竖放椭圆圆周i点纵坐标的平方,X(i)^2YI=XI*M:'*****正立竖放椭圆圆周i点横坐标的平方,Y(i)^2DI=Sqr(XI+YI):'*****椭圆中心至椭圆圆周i点的距离D(i)XPI=XC+DI*Cos(TT+I*DT):'*****斜立椭圆圆周i点的纵坐标XP(i)YPI=YC+DI*Sin(TT+I*DT):'*****斜立椭圆圆周i点的横坐标YP(i)IfPP=1ThenForm2.Line-(YPI,XPI),RGB(0,0,0):'*****绘制斜立误差椭圆ElseIfPP=2ThenPrinter.Line-(YPI,XPI):'*****打印机打印斜立误差椭圆EndIfNextIIfPP=1ThenForm2.PSet(YC+A*Sin(TT),XC+A*Cos(TT)),RGB(0,0,255)ElseIfPP=2ThenPrinter

温馨提示

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

评论

0/150

提交评论