工程测量闭合导线坐标计算表
- 格式:xlsx
- 大小:13.48 KB
- 文档页数:1


#include<stdio.h>//土木工程测量闭合导线坐标计算,这是哥写的!^_^#include<math.h>#define N 10main(){int i=0,n=0,m=0,y=0,b=0,d=0,e=0,x_z_1[N]={0},x_z_2[N]={0},w_1=0,w_2=0;int g[N][3]={0},j[N][3]={0},F[N+1][3]={0},H[3]={0};int sum_1=0,sum_2=0,sum_3=0,B_1=0,B_2=0,B_3=0,t_1=0,t_2=0,t_3=0,l=0,sum_sum=0,L=0; double a=0,Z_x[N]={0},Z_y[N]={0},sum_4=0,s[N]={0},Z_x_2[N]={0},Z_y_2[N]={0},r_1=0,r_2=0; double V_1[N]={0},V_2[N]={0},Z_1[N]={0},Z_2[N]={0},sum_x=0,sum_y=0,p[N+1]={0},q[N+1]={0}; double f=0,K=0,f_j=0;double sin(double);double cos(double);double fabs(double);double sqrt(double);double pow(double,double);printf("土木工程测量闭合导线坐标计算P106\n");start:printf("请输入测量数的组数:");scanf("%d",&n);printf("请输入角度观测值(度分秒)%d组数:\n",n);for(i=0;i<n;i++){scanf("%d%d%d",&j[i][0],&j[i][1],&j[i][2]);sum_1=sum_1+j[i][0];sum_2=sum_2+j[i][1];sum_3=sum_3+j[i][2];}printf("请输入水平距离%d个数:\n",n);for(i=0;i<n;i++)scanf("%lf",&s[i]);printf("请输入初始方位角(度分秒):\n");scanf("%d%d%d",&F[0][0],&F[0][1],&F[0][2]);printf("请输入初始坐标x y:\n");scanf("%lf%lf",&p[0],&q[0]);sum_sum=36000*sum_1+60*sum_2+sum_3;sum_2=sum_2+sum_3/60;sum_1=sum_1+sum_2/60;sum_2=sum_2%60;sum_3=sum_3%60; //总角度数(sum_1 sum_2 sum_3)l=(n-2)*180; //理论度数L=l*36000;if(L>sum_sum) //解决角度测量值小于理论值的情况{sum_sum=sum_sum-L;B_1=sum_sum/36000;B_2=sum_sum%36000/60;B_3=sum_sum%60;}elseB_1=sum_1-l;B_2=sum_2;B_3=sum_3; //闭合差(B_1 B_2 B_3)t_1=-B_1/n;t_2=-B_2/n;t_3=-B_3/n;//修正数位于秒用intfor(i=0;i<n;i++){g[i][0]=j[i][0]+t_1;g[i][1]=j[i][1]+t_2;g[i][2]=j[i][2]+t_3;if(g[i][2]<0){g[i][1]=g[i][1]-1;g[i][2]=g[i][2]+60;}if(g[i][1]<0){g[i][0]=g[i][0]-1;g[i][1]=g[i][1]+60;}if(g[i][0]<0) printf("\t\t角度输入错误!\n");}//修正后角度(g[i][0] g[i][1] g[i][2])if(B_3%n!=0) printf("\n角度修正数余数:%d\n",B_3%n); for(i=0;i<(B_3%n);i++)g[i][2]-=1; //校正修正数//修正后角度求和for(i=0;i<n;i++){H[0]=H[0]+g[i][0];H[1]=H[1]+g[i][1];H[2]=H[2]+g[i][2];}for(i=0;i<n;i++){H[1]=H[1]+H[2]/60;H[0]=H[0]+H[1]/60;H[1]=H[1]%60;H[2]=H[2]%60;}f_j=40.0*sqrt((double)(n));if(fabs((double)B_3)<=f_j) printf("\t\t符合角度精度要求!\n");else printf("\t\t不符合角度精度要求!\n");for(i=0;i<n;i++){m=F[i][0]*3600+F[i][1]*60+F[i][2];y=g[i][0]*3600+g[i][1]*60+g[i][2];b=m+180*3600-y;F[i+1][0]=b/3600;F[i+1][1]=b%3600/60;//转化为秒来计算F[i+1][2]=b%60;if(F[i+1][0]>360) F[i+1][0]=F[i+1][0]-360;if(F[i+1][0]<0) F[i+1][0]=F[i+1][0]+360;} //方位角(F[i][0] F[i][1] F[i][2])共n+1组数据for(i=0;i<n;i++){a=((double)F[i][0]+(double)F[i][1]/60.0+(double)F[i][2]/3600.0)*3.1415926/180.0; Z_x[i]=s[i]*cos(a); //待输入水平距离s[i]Z_y[i]=s[i]*sin(a); //坐标增量}for(i=0;i<n;i++) //四舍六入五凑偶精确到百分位{d=(int)(fabs(Z_x[i])*1000)%10;e=(int)(fabs(Z_y[i])*1000)%10;r_1=fabs(Z_x[i])-fabs((double)((int)(Z_x[i]*100))/100.0);r_2=fabs(Z_y[i])-fabs((double)((int)(Z_y[i]*100))/100.0);w_1=(int)fabs(Z_x[i]*100)%10;w_2=(int)fabs(Z_y[i]*100)%10;if(d>=6||(d==5&&(r_1>0.0||w_1%2==1))){Z_x_2[i]=(double)((int)fabs(Z_x[i]*100)+1)/100;if(Z_x[i]<0.0) Z_x_2[i]=-Z_x_2[i];}else Z_x_2[i]=(double)((int)(Z_x[i]*100))/100;if(e>=6||(e==5&&(r_2>0.0||w_2%2==1))){Z_y_2[i]=(double)((int)fabs(Z_y[i]*100)+1)/100;if(Z_y[i]<0.0) Z_y_2[i]=-Z_y_2[i];}else Z_y_2[i]=(double)((int)(Z_y[i]*100))/100;}for(i=0;i<n;i++){sum_x=sum_x+Z_x_2[i];sum_y=sum_y+Z_y_2[i];//坐标增量和}for(i=0;i<n;i++)sum_4=sum_4+s[i];//水平距离求和sum_4for(i=0;i<n;i++){V_1[i]=-((s[i]/sum_4)*fabs(sum_x));V_2[i]=-((s[i]/sum_4)*fabs(sum_y));if(sum_x<0.0) V_1[i]=-V_1[i];if(sum_y<0.0) V_2[i]=-V_2[i];}printf("坐标增量和:%7.2f %7.2f\n",sum_x,sum_y); //输出坐标增量和f=sqrt(pow(sum_x,2)+pow(sum_y,2));K=f/sum_4;if(K<1.0/2000.0) printf("\t\t%lf<1/2000 符合坐标精度要求!\n",K);else printf("\t\t不符合坐标精度要求!\n");printf("坐标增量参考修正数:\n");//此处应提前输出参考改正数,并人工取值(V_1[i] V_2[i])printf("参考修正数x值:");for(i=0;i<n;i++)printf("%7.3f ",V_1[i]);printf("\n");printf("参考修正数y值:");for(i=0;i<n;i++)printf("%7.3f ",V_2[i]);printf("\n");printf("请输入坐标增量修正数%d组数(正整数按参考值的100倍输入):\n",n);//人工判断并输入坐标改正数printf("修正x值:");for(i=0;i<n;i++)scanf("%d",&x_z_1[i]);printf("修正y值:");for(i=0;i<n;i++)scanf("%d",&x_z_2[i]);{Z_1[i]=Z_x_2[i]+0.01*(double)x_z_1[i];Z_2[i]=Z_y_2[i]+0.01*(double)x_z_2[i];//改正后坐标增量}for(i=0;i<n;i++){p[i+1]=p[i]+Z_1[i];//待输入坐标(p[0],q[0])q[i+1]=q[i]+Z_2[i];//坐标(p[i],q[i])}//剩余工作制表!printf("角度观测值(度分秒):\n");for(i=0;i<n;i++)printf("%d %d %d\n",j[i][0],j[i][1],j[i][2]);printf("总度数:%d %d %d\n",sum_1,sum_2,sum_3);printf("修正度数:\n");if((B_3%n)!=0){for(i=0;i<(B_3%n);i++)printf("%d %d %d+1\n",t_1,t_2,t_3);for(i=0;i<n-(B_3%n);i++)printf("%d %d %d\n",t_1,t_2,t_3);}else for(i=0;i<n;i++)printf("%d %d %d\n",t_1,t_2,t_3);printf("修正后角度:\n");for(i=0;i<n;i++)printf("%d %d %d\n",g[i][0],g[i][1],g[i][2]);printf("修正后角度求和:");printf("%d %d %d\n",H[0],H[1],H[2]);printf("方位角:\n");for(i=0;i<=n;i++)printf("%d %d %d\n",F[i][0],F[i][1],F[i][2]);printf("水平距离:\n");for(i=0;i<n;i++)printf("%7.2f ",s[i]);printf("\n");printf("水平距离和:%7.2f\n",sum_4);printf("坐标增量:\n");{//printf("%7.3f %7.3f\n",Z_x[i],Z_y[i]);printf("%7.2f %7.2f\n",Z_x_2[i],Z_y_2[i]);}printf("坐标增量和:%7.2f %7.2f\n",sum_x,sum_y);printf("坐标改正数:\n");for(i=0;i<n;i++)printf("%d %d\n",x_z_1[i],x_z_2[i]);printf("改正后坐标增量:\n");for(i=0;i<n;i++)printf("%7.2f %7.2f\n",Z_1[i],Z_2[i]);printf("坐标:\n");for(i=0;i<=n;i++)printf("%7.2f %7.2f\n",p[i],q[i]);goto start;}/*土木工程测量闭合导线坐标计算P106请输入测量数的组数:4请输入角度观测值(度分秒)4组数:102 48 978 51 1584 23 2793 57 45请输入水平距离4个数:112.01 87.58 137.71 89.50请输入初始方位角(度分秒):38 15 00请输入初始坐标x y:200 500符合角度精度要求!坐标增量和:-0.11 0.030.000267<1/2000 符合坐标精度要求!坐标增量参考修正数:参考修正数x值:0.029 0.023 0.035 0.023参考修正数y值:-0.008 -0.006 -0.010 -0.006请输入坐标增量修正数4组数(正整数按参考值的100倍输入):修正x值:3 2 4 2修正y值:-1 0 -1 -1角度观测值(度分秒):102 48 978 51 1584 23 2793 57 45总度数:360 0 36修正度数:0 0 -90 0 -90 0 -90 0 -9修正后角度:102 48 078 51 684 23 1893 57 36修正后角度求和:360 0 0方位角:38 15 0115 27 0216 35 54312 12 3638 15 0水平距离:112.01 87.58 137.71 89.50 水平距离和:426.80坐标增量:87.96 69.34-37.64 79.08-110.56 -82.1060.13 -66.29坐标增量和:-0.11 0.03坐标改正数:3 -12 04 -12 -1改正后坐标增量:87.99 69.33-37.62 79.08-110.52 -82.1160.15 -66.30坐标:200.00 500.00287.99 569.33250.37 648.41139.85 566.30 200.00 500.00请输入测量数的组数:*/。