符合导线平差程序(C语言版)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

符合导线平差程序(C语言版)
#include
#include
#include
#include
#define PI 3.141592654
#define nam 30
#define m 1.0/2000
#define s 0.00000484813
double dms_rad(double a)
{
//提取角度
double sign=(a<0.0)?-1.0:1.0;
a=fabs(a);
int d=(int)((a+0.00001)/10000.0);
a=a-d*10000.0;
if (a<0.0)
{
d=d-1;
a=a+10000;
}
int mi=(int)((a+0.00001)/100.0);
a=a-mi*100;
if (a<0.0)
{
mi=mi-1;
a=a+100.0;
}
a=sign*(d*3600.0+mi*60.0+a)/206264.806247096363;
return a;
}
double rad_dms(double a)
{
a=a*206264.806247096363;
double sign=(a<0.0)?-1.0:1.0;
a=fabs(a);
int d=(int)(a/3600.0+0.0000001);
a=a-d*3600.0;
if(a<0.0)
{
d=d-1;
a=a+3600.0;
}
int mi=(int)(a/60.0+0.0001);
a=a-mi*60.0;
if(a<0.0)
{
mi=mi-1;
a=a+60.0;
}
a=d*10000.0+mi*100.0+a;
return a*sign;
}
double ZB_FWJ(double x1,double y1,double x2,double y2) {
double a=0.0;
if ((x2-x1)==0)
{
return 0.0;
}
else
{
a=(y2-y1)*1.0/(x2-x1);
return acos(a);
}
}
void read_file(FILE *fp,int q,int n,double *zuox1,double *zuoy1,double *jiao1,double *bian,double *jiao)
{
if(q==2)
{
for (int i=0;i<2;i++)
{
fscanf(fp,"%lf %lf %lf",&zuox1[i],&zuoy1[i],&jiao1[i]);
jiao1[i]=dms_rad(jiao1[i]);
printf ("%lf\n",jiao1[i]);
}
}
else if(q==4)
{
for (int i=0;i<4;i++)
{
fscanf(fp,"%f %f",&zuox1[i],&zuoy1[i]);
}
}
else
{
fscanf(fp,"%f %f",&zuox1[0],&zuoy1[0]);
fscanf(fp,"%f %f",&zuox1[1],&zuoy1[1]);
fscanf(fp,"%f %f %f",&zuox1[2],&zuoy1[2],&jiao1[0]);
jiao1[0]=dms_rad(jiao1[0]);
}
for(int i=0;i<n-1;i++)< p="">
{
fscanf(fp,"%lf %lf",&jiao[i],&bian[i]);
jiao[i]=dms_rad(jiao[i]);
printf ("%lf\n",jiao[i]);
}
fscanf(fp,"%lf %lf",&jiao[i],&bian[i]);
jiao[i]=dms_rad(jiao[i]);
printf ("%lf\n",jiao[i]);
}
void GZ_gcj(FILE *wfp,double *jiao,double *jiao1,double *bian,int jdguanceshu)
{
double sum=0.0,a=0.0,fb=0.0,b=0.0;//fb为角度闭合差
for (int i=0;i<jdguanceshu;i++)< p="">
{
sum+=jiao[i];
}
/* sum=rad_dms(sum);
printf("\n%lf\n",sum);
sum=dms_rad(sum);*/
a=jiao1[0]+jdguanceshu*PI-sum;
a=rad_dms(a);
printf("\n%lf\n",a);
a=dms_rad(a);
fb=a-jiao1[1];
printf ("\n%lf\n",fb);
b=rad_dms(fb);
fprintf(wfp,"角度闭合差为\n");
fprintf(wfp,"%lf",b);
if(fabs(fb)<="" p="" pi*sqrt(jdguanceshu))=""> {
fprintf (wfp,"角度闭合差合格\n");
}
else
{
fprintf (wfp,"角度闭合差不合格\n");
}
int hb=(int)(fb*1.0/jdguanceshu);
for (i=0;i<jdguanceshu;i++)< p="">
{
jiao[i]+=hb*s;
}
hb=(int)(fb-hb*s*jdguanceshu);
double temp=0.0;
int *qa=new int[jdguanceshu];
for(i=0;i<jdguanceshu;i++)< p="">
{
temp=bian[i];
for (int j=0;j<jdguanceshu;j++)< p="">
{
if(temp>bian[j])
{
qa[i]=j;
}
}
}
for (i=0;i<hb;i++)< p="">
{
jiao[qa[i]]+=s;
jiao[qa[i]+1]+=s;
i++;
}
}
void JS_fwj(double *jiao1,double *jiao,int jdguanceshu) {
jiao[0]=jiao1[0]-jiao[0]+PI;
for (int i=1;i<jdguanceshu;i++)< p="">
{
jiao[i]=jiao[i-1]-jiao[i]+PI;
/* jiao[i]=rad_dms(jiao[i]);
printf("\n%lf\n",jiao[i]);
jiao[i]=dms_rad(jiao[i]);*/
}
}
void JS_zbzl(FILE *wfp,double *XY,int jdguanceshu,double *bian,double *jiao,double *zuox1,double *zuoy1,int q) {
double x=0.0,y=0.0,sum=0.0,temp1=0.0,temp2=0.0,fD=0.0;
int K=0;
for (int i=0;i<jdguanceshu-1;i++)< p="">
{
sum+=bian[i];
// printf("\n%lf\n",sum);
}
for (i=0;i<jdguanceshu-1;i++)< p="">
{
XY[i*2]=bian[i]*cos(jiao[i]);
printf("\n%lf\n",XY[i*2]);
XY[i*2+1]=bian[i]*sin(jiao[i]); printf("\n%lf\n",XY[i*2+1]);
}
for(i=0;i<2*(jdguanceshu-1);i++) {
x+=XY[i];
i++;
}
x=x-zuox1[q-1]+zuox1[0];
for(i=1;i<2*(jdguanceshu-1);i++) {
y+=XY[i];
i++;
}
y=y-zuoy1[q-1]+zuoy1[0]; fprintf(wfp,"X增量为\n");
fprintf(wfp," %lf\n",x);
fprintf(wfp,"Y增量为\n");
fprintf(wfp," %f\n",y);
fD=sqrt(x*x+y*y);
fprintf(wfp,"fD为\n");
fprintf(wfp,"%lf\n",fD);
K=(int)(sum/fD);
printf ("\n%d\n",K);
fprintf(wfp,"相对闭合差为\n"); fprintf(wfp,"1/%d\n",K);
if (K>m)
fprintf (wfp,"相对闭合差合格\n"); else
fprintf (wfp,"相对闭合差不合格\n");
for (i=0;i<jdguanceshu-1;i++)< p="">
{
XY[i*2]+=bian[i]/sum*x;
XY[i*2+1]+=bian[i]/sum*y;
}
}
void JS_zb(FILE *wfp,double *XY,double *zuox1,double *zuoy1,int jdguanceshu)
{
XY[0]+=zuox1[0];
XY[1]+=zuoy1[0];
for (int i=1;i<jdguanceshu-1;i++)< p="">
{
XY[i*2]+=XY[i*2-2];
XY[i*2+1]+=XY[i*2-1];
}
fprintf(wfp,"1 %f %f\n",zuox1[0],zuoy1[0]);
for (i=0;i<jdguanceshu-1;i++)< p="">
{
fprintf(wfp,"%d %lf %lf\n",i+2,XY[i*2],XY[i*2+1]);
}
fprintf(wfp,"%d %lf %lf\n",jdguanceshu,zuox1[1],zuoy1[1]); } void main()
{
int n,q;
// char s[30]={0},D[30]={0};
// char *file;
printf ("请输入文件地址:");
// scanf("%s",s);
// file=s;
FILE *fp=fopen("D:\\datx.txt","r");
if (fp==NULL)
{
printf("打开文件失败!");
exit(1);
}
fscanf(fp,"%d %d",&q,&n);
printf("%d %d ",q,n);
double *zuox1=new double[q];
double *zuoy1=new double[q];
double *bian=new double[n-1];
double *jiao1=new double[4-q];
double *jiao=new double[n];
double *XY=new double[2*n-2];
read_file(fp,q,n,zuox1,zuoy1,jiao1,bian,jiao); fclose(fp);
printf ("请输入文件地址:");
// scanf("%s",D);
// file=D;
FILE *wfp=fopen("D:\\daty.txt","w");
if (wfp==NULL)
{
printf("打开文件失败!");
exit(1);
}
GZ_gcj(wfp,jiao,jiao1,bian,n);
JS_fwj(jiao1,jiao,n);
JS_zbzl(wfp,XY,n,bian,jiao,zuox1,zuoy1,q); JS_zb(wfp,XY,zuox1,zuoy1,n);
fclose (wfp);
}
</jdguanceshu-1;i++)<> </jdguanceshu-1;i++)<> </jdguanceshu-1;i++)<> </jdguanceshu-1;i++)<> </jdguanceshu-1;i++)<> </jdguanceshu;i++)<> </hb;i++)<>
</jdguanceshu;j++)<> </jdguanceshu;i++)<> </jdguanceshu;i++)<> </jdguanceshu;i++)<> </n-1;i++)<>。

相关文档
最新文档