C++面向对象程序附合导线、解析交会、角度转换类及计算源代码.doc_第1页
C++面向对象程序附合导线、解析交会、角度转换类及计算源代码.doc_第2页
C++面向对象程序附合导线、解析交会、角度转换类及计算源代码.doc_第3页
C++面向对象程序附合导线、解析交会、角度转换类及计算源代码.doc_第4页
C++面向对象程序附合导线、解析交会、角度转换类及计算源代码.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

#include stdafx.h#include#include#include#includeDegSwitch.h#include Coordinate.h#include LineCalculation.husing namespace std;const int N=50;void main()int degree(int a); int coordinate(int b); int linecalculation(int c); char MODE; coutD.角度转换 C.解析交会 L.附合导线endlMODE; coutendl; int a; switch(MODE) caseD: a=degree(0);break; caseC: a=coordinate(0);break; caseL: a=linecalculation(0);break; / 附合导线验算函数int linecalculation(int c)static int AN3,AA3,CAngN3; static double angN,cangN,cang2N,CN2,SN,CcooN2,dxdyN2; double x1,y1,s=0,x=0,y=0,dx,dy,sc_ang,ec_ang; int b=-1,i=0,j=0,n=0,d,m,s0,f_a;char ch1;FILE *fp;fp=fopen(E:Minelearning测量程序设计M.txt,r);if(!fp) printf(文件打开失败);for(i=0;i3;i+)fscanf(fp,%d,&AAi);fscanf(fp,%lf %lf,&x1,&y1);for(i=0;iN;i+)for(j=0;j3;j+) fscanf(fp,%d,&Aij);fscanf(fp,%c,&ch1);for(i=0;iDMS_s(AA0,AA1,AA2); LineCalculation *e=new LineCalculation(); e-Start(&n,A,ang,S,&s,&x,&y); e-Angle_M(ang,n,b,&f_a,&d,&m,&s0); e-Angle_A(ang,n,b,f_a,S); e-C_Angle(ang,cang,n,b,sc_ang);DegSwitch *q=new DegSwitch; for(i=0;iDMS_Rad(0,0,cangi); e-Coordinate_M(Ccoo,S,sc_ang,cang,n,x,y,&dx,&dy); e-Coordinate_A(Ccoo,dxdy,n,dx,dy,S,s); e-Coordinate(C,Ccoo,n,x1,y1);coutendl调整后角度值:endl; DegSwitch *u=new DegSwitch; for(i=0;is_DMS(angi,&Ai0,&Ai1,&Ai2); coutAi0 Ai1 Ai2endl; coutendl坐标方位角:endl;for(i=0;is_DMS(cangi,&CAngi0,&CAngi1,&CAngi2); coutCAngi0 CAngi1 CAngi2endl; coutendl坐标:endl; for(i=0;in-1;i+) coutCi0 Ci1endl;coutnendl;/*fp=fopen(e:minelearning测量程序设计M2.txt,w);if(!fp) printf(文件创建失败);fprintf(fp,%s,调整后角度值:n);for(i=0;in;i+)for(j=0;j3;j+)fprintf(fp,%d ,Aij); fprintf(fp,%s, n);fprintf(fp,%s,坐标方位角:n);for(i=0;in-1;i+)for(j=0;j3;j+)fprintf(fp,%d ,CAngij); fprintf(fp,%s, n);fprintf(fp,%s,坐标:n);for(i=0;in-1;i+)for(j=0;j2;j+)fprintf(fp,%lf ,Cij); fprintf(fp,%s, n);fclose(fp);*/ return 0;/ 解析交会验算函数int coordinate(int b)int d1,m1,s1,d2,m2,s2; double xa,ya,xb,yb,xc,yc,xp,yp,ang1,ang2,s; char mode1; coutendl1.坐标正算 2.坐标反算 3.前方交会 4.后方交会endlmode1; Coordinate *m=new Coordinate(); DegSwitch *n=new DegSwitch(); switch(mode1) case1: cout已知点坐标:xaya; cout距离:s; cout连线方位角:d1m1s1; ang1=n-DMS_Rad(d1,m1,s1); m-C1SA_C2(xa,ya,s,ang1,&xb,&yb); cout所求点坐标:endlxb ybendl; break; case2: cout两点坐标:xayaxbyb; m-C1C2_SA(xa,ya,xb,yb,&s,&ang1); n-Rad_DMS(ang1,&d1,&m1,&s1); cout距离:smendl; cout方位角:d1度m1分s1秒endl; break; case3: cout已知两点坐标:xayaxbyb; cout观测角:d1m1s1; cind2m2s2; ang1=n-DMS_Rad(d1,m1,s1); ang2=n-DMS_Rad(d2,m2,s2); m-C1C2A1A2_P(xa,ya,ang1,xb,yb,ang2,&xp,&yp); cout所求点坐标:endlxp ypendl; break; case4: cout已知三点坐标:xayaxbybxcyc; cout观测角:d1m1s1; cind2m2s2; ang1=n-DMS_Rad(d1,m1,s1); ang2=n-DMS_Rad(d2,m2,s2); m-C1C2C3_P(xa,ya,xb,yb,xc,yc,ang1,ang2,&xp,&yp); cout所求点坐标:endlxp ypendl; break; coutendl; return 0;/ 角度转换验算函数int degree(int a)char mode2; double rawdata,result,Xa,Ya,Xb,Yb; int d=0,m=0,s=0; DegSwitch *x=new DegSwitch(); cout1.Deg_DMS 2.DMS_Deg 3.Deg_Rad 4.Rad_Deg 5.Rad_DMS 6.DMS_Rad 7.Coo_Angleendl mode2; coutendlrawdata; x-Deg_DMS(rawdata,&d,&m,&s); coutendl转换结果:d m sdms; result=x-DMS_Deg(d,m,s); coutendl转换结果:resultrawdata; result=x-Deg_Rad(rawdata); coutendl转换结果:resultrawdata; result=x-Rad_Deg(rawdata); coutendl转换结果:resultrawdata; x-Rad_DMS(rawdata,&d,&m,&s); coutendl转换结果:d m sdms; result=x-DMS_Rad(d,m,s); coutendl转换结果:resultXaYaXbYb; result=x-C_A(Xa,Ya,Xb,Yb); coutendl转换结果:resultendl;break; coutendl;return 0;/附合导线类#include StdAfx.h#include#include LineCalculation.h#include DegSwitch.husing namespace std;const double PI=648000;const int N=50;LineCalculation:LineCalculation(void)LineCalculation:LineCalculation(void)/ 附合导线-计数、角度转换、原始坐标增量计算函数void LineCalculation:Start(int *n,int A3,double ang,double S,double *s,double *x,double *y)int i=0,j=0; for(i=0;iN;i+) if(Si=0) break;*n=*n+1; DegSwitch *m=new DegSwitch(); for(i=0;iDMS_s(Ai0,Ai1,Ai2); for(i=0;i*n;i+) *s=*s+Si; / 附合导线-角度闭合差计算函数void LineCalculation:Angle_M(double ang,int n,int b,int *f_a,int*d,int*m,int*s) /n已知,ang中为弧度,起始角、终止角为弧度值double ec_ang1,sum1=0; for(int i=0;is_DMS(*f_a,&(*d),&(*m),&(*s);/ 附合导线-角度闭合差调整函数void LineCalculation:Angle_A(double ang,int n,int b,int f_a,double S)int ff=f_a/n*b; for(int i=0;in;i+) angi=angi+ff; int m=0,f1=0,f2=0; for(int j=1;jn;j+) if(Sj=Sm) m=j; if(f_a%n)!=0) if(f_a/n)%2!=0) f1=(f_a%n)/2; f2=f1+1; else f1=(f_a%n)/2; f2=f1; angm-1=angm-1+f1*b; angm=angm+f2*b; / 附合导线-坐标方位角计算函数void LineCalculation:C_Angle(double ang,double cang,int n,int b,double sc_ang)cang0=sc_ang+b*(PI-ang0); if(cang02*PI) cang0=cang0-2*PI; for(int i=1;in;i+) cangi=cangi-1+b*(PI-angi); if(cangi2*PI) cangi=cangi-2*PI;/ 附合导线-坐标增量计算函数void LineCalculation:Coordinate_M(double Ccoo2,double S,double sc_ang,double cang,int n,double x,double y,double*dx,double*dy)int i; DegSwitch *e0=new DegSwitch(); sc_ang=e0-DMS_Rad(0,0,sc_ang); Ccoo00=S0*cos(sc_ang); Ccoo01=S0*sin(sc_ang); double xs=0,ys=0; for(i=1;in;i+) Ccooi0=Si*cos(cangi-1); Ccooi1=Si*sin(cangi-1); xs=xs+Ccooi0; ys=ys+Ccooi1; *dx=xs-x; *dy=ys-y;/ 附合导线-改正后坐标增量计算函数void LineCalculation:Coordinate_A(double Ccoo2,double dxdy2,int n,double dx,double dy,double S,double s)for(int i=0;in;i+) dxdyi0=dx*Si/s; dxdyi1=dy*Si/s; Ccooi0-=dxdyi0; Ccooi1-=dxdyi1;/ 附合导线-各点坐标计算函数void LineCalculation:Coordinate(double C2,double Ccoo2,int n,double xa,double ya)C00=xa+Ccoo00; C01=ya+Ccoo01; int i=0,j=0; for(i=1;in;i+) for(j=0;j2;j+) Cij=Ci-1j+Ccooij;/ 解析交会类#include StdAfx.h#include Coordinate.h#include#includeDegSwitch.husing namespace std;Coordinate:Coordinate(void)Coordinate:Coordinate(void)/ 解析交会-坐标正算函数void Coordinate:C1SA_C2(double xa,double ya,double s,double ang,double*xb,double*yb) *xb=xa+s*cos(ang); *yb=ya+s*sin(ang);/ 解析交会-坐标反算函数void Coordinate:C1C2_SA(double xa,double ya,double xb,double yb,double*s,double*ang)DegSwitch*x=new DegSwitch(); *s=sqrt(pow(xb-xa),2)+pow(yb-ya),2); *ang=x-C_A(xa,ya,xb,yb);/ 解析交会-前方交会函数void Coordinate:C1C2A1A2_P(double xa,double ya,double ang1,double xb,double yb,double ang2,double*xp,double*yp) double a=tan(ang1),b=tan(ang2); *xp=(xa*a+xb*b+(yb-ya)*a*b)/(a+b); *yp=(ya*a+yb*b+(xa-xb)*a*b)/(a+b);/ 解析交会-后方交会函数void Coordinate:C1C2C3_P(double xa,double ya,double xb,double yb,double xc,double yc,double ang1,double ang2,double*xp,double*yp) double a=tan(ang1),b=tan(ang2); double tanBP=(yb-ya)/a+(yb-yc)/b+xa-xc)/(xb-xa)/a+(xb-xc)/b-(ya-yc); double BP=atan(tanBP); *xp=xb+(yb-ya)*(1/a-tanBP)-(xb-xa)*(1+tanBP/a)/(1+tanBP*tanBP); *yp=yb+(*xp-xb)*tanBP;/ 角度转换类#include StdAfx.h#include#include DegSwitch.husing namespace std;const double PI=3.1415926;DegSwitch:DegSwitch(void)DegSwitch:DegSwitch(void)/角度转换成度分秒函数void DegSwitch:Deg_DMS(double Deg,int*a,int*b,int*c)int DMS_D=(int)Deg; *a=DMS_D; double DMS_M1=(Deg-DMS_D)*60; int DMS_M=(int)DMS_M1; *b=DMS_M; int DMS_S=int(DMS_M1-DMS_M)*60); *c=DMS_S;/ 度分秒转换成角度函数double DegSwitch:DMS_Deg(int D, int M, int S)double M1=(double)S/60.0+M; double Deg=M1/60.0+D;return Deg;/ 角度转换成弧度函数double DegSwitch:Deg_Rad(double Deg)double Rad=Deg/180.0*PI;return Rad;/ 弧

温馨提示

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

评论

0/150

提交评论