📄 adjpro0504.cpp
字号:
// 4-2 输入本站观测值
for(int j=obsnum;j<obsnum+a.st[i].obnum;j++)
{
in>>name; t=0; // 输入照准点名,操作过程同上
a.L[j].startp=a.st[i].stp;
for(k=0;k<n;k++)
if(strnicmp(name,a.Pt[k].name,20)==0)
{
a.L[j].endp=&(a.Pt[k]);
t++;
}
if(t==0)
{strcpy(a.Pt[n].name,name);
a.L[j].endp=&(a.Pt[n]);
n++;
}
in>>a.L[j].style;
a.L[j].A=a.L[j].A0=-PI;
if(a.L[j].style==1)
{
a.anglenum++;
a.st[i].aglnum++;
in>>a.L[j].angle; // 输入方向观测值
a.L[j].dist0=-PI;
a.L[j].dist=-PI;
}
if(a.L[j].style==2)
{ a.distnum++;
a.st[i].disnum++;
in>>a.L[j].dist; // 输入距离观测值
a.L[j].dist0=a.L[j].dist;
a.L[j].angle=-PI;
}
a.L[j].i=j-obsnum;
a.L[j].sti=i;
}
obsnum+=a.st[i].aglnum+a.st[i].disnum;
a.obnum+=a.st[i].aglnum+a.st[i].disnum;
}
// 文件正确性判断
// 5 固定边长输入
for(i=obsnum;i<obsnum+a.fixdisn;i++)
{
in>>name;int t=0;
for(int k=0;k<n;k++)
if(strnicmp(name,a.Pt[k].name,20)==0)
{
a.L[i].startp=&(a.Pt[k]);
t++;
}
if(t==0)
{strcpy(a.Pt[n].name,name);
a.L[i].startp=&(a.Pt[n]);
n++;
}
in>>name; t=0;
for(k=0;k<n;k++)
if(strnicmp(name,a.Pt[k].name,20)==0)
{
a.L[i].endp=&(a.Pt[k]);
t++;
}
if(t==0)
{strcpy(a.Pt[n].name,name);
a.L[i].endp=&(a.Pt[n]);
n++;
}
in>>a.L[i].dist;
a.L[i].dist0=a.L[i].dist; //输入距离值
a.L[i].A=a.L[i].A0=-PI;
a.L[i].style=4;
a.L[i].angle=-PI;
a.L[i].i=i-obsnum;
}
obsnum+=a.fixdisn;
// 5 固定方位角输入
for(i=obsnum;i<obsnum+a.fixafn;i++)
{
in>>name;int t=0;
for(int k=0;k<n;k++)
if(strnicmp(name,a.Pt[k].name,20)==0)
{
a.L[i].startp=&(a.Pt[k]);
t++;
}
if(t==0)
{strcpy(a.Pt[n].name,name);
a.L[i].startp=&(a.Pt[n]);
n++;
}
in>>name; t=0;
for(k=0;k<n;k++)
if(strnicmp(name,a.Pt[k].name,20)==0)
{
a.L[i].endp=&(a.Pt[k]);
t++;
}
if(t==0)
{strcpy(a.Pt[n].name,name);
a.L[i].endp=&(a.Pt[n]);
n++;
}
in>>a.L[i].A;a.L[i].A0=a.L[i].A;
a.L[i].style=3;
a.L[i].dist=-PI;
a.L[i].dist0=-PI;
a.L[i].i=i-obsnum;
a.L[i].angle=-PI;
}
obsnum+=a.fixafn;
if(n!=a.allpnum) {cout<<fname<<" error: file provide not correct point number ! "<<endl;
return 0;}
in.close();
return 1; // 关闭输入流及关联文件
}
//***************************平面网数据屏幕输出***************************************************
void XYnetdis(XYnet &aa)
{
cout<<aa.netname<<" "<<aa.allpnum<<" "<<aa.fixpnum<<" "<<aa.statnum<<" "
<<aa.obnum<<" "<<aa.fixdisn<<" "<<aa.fixafn<<endl;
cout<<aa.mangle<<" "<<aa.msa<<" "<<aa.msb<<endl<<endl;
for(int i=0;i<aa.fixpnum;i++)
cout<<aa.Pt[i].name<<" "<<aa.Pt[i].X<<" "<<aa.Pt[i].Y<<endl;
cout<<endl;
int n(0);
for(int j=0;j<aa.statnum;j++)
{cout<<aa.st[j].stp->name<<" "<<aa.st[j].aglnum<<" "<<aa.st[j].disnum<<endl;
for(i=n;i<n+aa.st[j].aglnum+aa.st[j].disnum;i++)
{
cout<<" "<<aa.L[i].i<<" "<<aa.L[i].endp->name<<" "<<aa.L[i].style;
if(aa.L[i].style==1) cout<<" "<<aa.L[i].angle<<endl;
if(aa.L[i].style==2) cout<<" "<<aa.L[i].dist<<endl;
}cout<<endl;
n+=aa.st[j].aglnum+aa.st[j].disnum;
}
for(i=aa.obnum;i<aa.obnum+aa.fixdisn+aa.fixafn;i++)
{
cout<<aa.L[i].startp->name<<" "<<aa.L[i].endp->name<<" "<<aa.L[i].style<<" ";
if(aa.L[i].style==4)cout<<aa.L[i].dist<<endl;
if(aa.L[i].style==3)cout<<aa.L[i].A<<endl;
}cout<<endl;
}
//*****************************平面网的边结构****************************************************
struct range{
XYP st; // 起点
XYP ed; // 终点
double A; // 计算方位角
double MA; // 方位角中误差
double S; // 计算边长
double MS; // 边长中误差
double sMS; // 边长相对精度
double E; // 相对误差极大值
double F; // 相对误差极小值
double T; // 相对误差极大值方位角
};
//*******************************平面控制网平差结果文件输出函数***********************************
//平面控制网平差结果文件输出函数
int XYfileout(XYnet &aa,char *outfile)
{
ofstream ou(outfile);
ou.width(5);
ou.right;
ou.precision(11);
// 1网的基本信息输出
ou<<endl<<" 平面控制网"<<aa.netname<<"平差计算结果 "<<endl<<endl;
ou<<"-----------------------------------------------------------------------"<<endl;
ou<<" 控制网输入数据 "<<endl;
ou<<"-----------------------------------------------------------------------"<<endl;
ou<<" 网 名: "<<aa.netname<<" 总点数: "<<aa.allpnum<<" 控制点数: "
<<aa.fixpnum<<" 测站数: "<<aa.statnum<<" 观测值总数: "<<aa.obnum<<endl
<<" 固定边长数: "<<aa.fixdisn<<" 固定方位角数: "<<aa.fixafn;
ou<<endl<<" 角度测量中误差: "<<aa.mangle<<"s 距离误差加常数: "<<aa.msa
<<"m 距离误差乘常数: "<<aa.msb<<"ppm"<<endl<<endl;
ou<<"-----------------------------------------------------------------------"<<endl;
ou<<" 控制点名 X Y "<<endl;
ou<<"-----------------------------------------------------------------------"<<endl;
for(int i=0;i<aa.fixpnum;i++)
{ou<<" ";ou.width(5);ou<<aa.Pt[i].name;ou<<" ";ou.width(13);
ou<<aa.Pt[i].X;ou<<" ";ou.width(13);ou<<aa.Pt[i].Y<<endl;
}ou<<endl;
ou<<"-----------------------------------------------------------------------"<<endl;
ou<<" 测站名 方向观测数 边长观测数 照准点 观测类型 观测值 "<<endl;
ou<<"-----------------------------------------------------------------------"<<endl;
int n(0);
for(int j=0;j<aa.statnum;j++)
{ou.width(6);ou<<aa.st[j].stp->name;ou.width(12);ou<<aa.st[j].aglnum;
ou.width(12);ou<<aa.st[j].disnum<<endl;
for(i=n;i<n+aa.st[j].aglnum+aa.st[j].disnum;i++)
{ou<<" "<<" ";ou.width(12);ou<<aa.L[i].endp->name<<" ";
if(aa.L[i].style==1)ou<<"方向"<<" "<<aa.L[i].angle<<endl;
if(aa.L[i].style==2)ou<<"边长"<<" "<<aa.L[i].dist<<endl;
}ou<<" "<<endl;
n+=aa.st[j].aglnum+aa.st[j].disnum;
}
if(aa.fixafn+aa.fixdisn>0){
ou<<"-----------------------------------------------------------------------"<<endl;
ou<<" 固定方位角与边长数据 "<<endl;
ou<<"-----------------------------------------------------------------------"<<endl;
ou<<" 起点名 终点名 数据类型 数 据 "<<endl;
ou<<"-----------------------------------------------------------------------"<<endl;
for(i=aa.obnum;i<aa.obnum+aa.fixdisn+aa.fixafn;i++)
{
ou<<" ";ou.width(6);ou<<aa.L[i].startp->name<<" ";
ou.width(6);ou<<aa.L[i].endp->name;ou.width(12);
if(aa.L[i].style==4){ou<<"边 长";ou.width(16);ou<<aa.L[i].dist<<endl;}
if(aa.L[i].style==3){ou<<"方位角";ou.width(16);ou<<aa.L[i].A0<<endl;}
}
ou<<"-----------------------------------------------------------------------"<<endl;
}
ou<<endl;
// 2输出网的近似坐标计算结果
ou<<"-----------------------------------------------------------------------"<<endl;
ou<<" 控制网近似坐标计算结果 "<<endl;
ou<<"-----------------------------------------------------------------------"<<endl;
ou<<" Name X(m) Y(m)"<<endl;
ou<<"-----------------------------------------------------------------------"<<endl;
for(i=0;i<aa.allpnum;i++)
{
ou<<" ";ou.width(6);ou<<aa.Pt[i].name<<" ";ou.width(12);
ou.precision(10);ou<<setf(aa.Pt[i].X0,3)<<" ";ou.width(12);
ou.precision(10);ou<<setf(aa.Pt[i].Y0,3)<<endl;
}
ou<<"-----------------------------------------------------------------------"<<endl;
double A[MAX][MAX],AQAT[MAX][MAX];
// 3输出观测值的平差结果
ou<<"--------------------------------------------------------------------------------"<<endl;
if(aa.anglenum>0){
ou<<" 方向观测值平差结果"<<endl;
ou<<"--------------------------------------------------------------------------------"<<endl;
ou<<" FROM TO TYPE VALUE(dms) M(sec) V(sec) RESULT(dms) Ri"<<endl;
ou<<"--------------------------------------------------------------------------------"<<endl;
for(i=0;i<aa.obnum;i++)
for(int j=0;j<2*aa.allpnum+aa.statnum;j++)
AT(aa.aa.A,A,aa.obnum,2*aa.allpnum+aa.statnum);
ATPA(A,aa.aa.QXX,AQAT,2*aa.allpnum+aa.statnum,aa.obnum);
// cout<<"now,output QLL:"<<endl;
// matdis(AQAT,aa.obnum,aa.obnum);
for(i=0;i<aa.obnum;i++)
if(aa.L[i].style==1)
{
ou.width(9);ou<<aa.L[i].startp->name;
ou.width(8);ou<<aa.L[i].endp->name;
ou.width(6);ou<<" 方向";
ou.width(16);
ou<<aa.L[i].angle;
ou.width(8);
ou<<setf(aa.aa.m0*sqrt(AQAT[i][i])*rou,2);
ou.width(9);
ou<<setf(aa.aa.V[i][0]*rou,2);
ou<<" ";
ou.width(12);
ou<<setf(h_d(d_h(aa.L[i].angle)+aa.aa.V[i][0]),5);
// ou<<aa.L[i].A0;
ou<<endl;
}
ou<<"--------------------------------------------------------------------------------"<<endl;
}
if(aa.distnum>0){
ou<<"--------------------------------------------------------------------------------"<<endl;
ou<<" 边长观测值平差结果"<<endl;
ou<<"--------------------------------------------------------------------------------"<<endl;
ou<<" FROM TO TYPE VALUE(m) M(cm) V(cm) RESULT(m) "<<endl;
ou<<"--------------------------------------------------------------------------------"<<endl;
for(i=0;i<aa.obnum;i++)
if(aa.L[i].style==2)
{
ou.width(9);ou<<aa.L[i].startp->name;
ou.width(8);ou<<aa.L[i].endp->name;
ou.width(6);ou<<"边长";
ou.width(16);
ou<<aa.L[i].dist;
ou.width(8);
ou<<setf(aa.aa.m0*sqrt(AQAT[i][i])*100,2);
ou.width(9);
ou<<setf(aa.aa.V[i][0]*100,2);
ou<<" ";
ou.width(11);
ou<<setf(aa.L[i].dist+aa.aa.V[i][0],4);
ou<<endl;
}
ou<<"--------------------------------------------------------------------------------"<<endl;
}
// 4输出坐标计算结果与精度
ou<<"-----------------------------------------------------------------------------------------"<<endl;
ou<<" 平差坐标及其精度"<<endl;
ou<<"-----------------------------------------------------------------------------------------"<<endl;
ou<<" Name X(m) Y(m) MX(cm) MY(cm) MP(cm) E(cm) F(cm) T(d.ms) "<<endl;
ou<<"-----------------------------------------------------------------------------------------"<<endl;
for(i=0;i<aa.fixpnum;i++)
{ou.right;
ou.width(8);ou<<aa.Pt[i].name;ou.precision(11);ou.width(17);
ou<<setf(aa.Pt[i].X,4);ou.precision(11);ou.width(16);ou<<setf(aa.Pt[i].Y,4)<<endl;
}
double Mx(0),My(0),Mp(0);
for(i=aa.fixpnum;i<aa.allpnum;i++)
{
ou.right;
ou.width(8);ou<<aa.Pt[i].name;ou.precision(11);
ou.width(17);ou<<setf(aa.Pt[i].X,4);ou.precision(11);
ou.width(16);ou<<setf(aa.Pt[i].Y,4);
ou.precision(4);ou.width(8);ou<<aa.Pt[i].mX*100;
ou.precision(4);ou.width(7);ou<<aa.Pt[i].mY*100;
ou.precision(4);ou.width(7);ou<<aa.Pt[i].mp*100;
ou.precision(4);ou.width(7);ou<<aa.Pt[i].E*100;
ou.precision(4);ou.width(7);ou<<aa.Pt[i].F*100;
ou<<" ";
ou.precision(9);ou.width(11);ou<<setf(aa.Pt[i].T,5);
ou<<endl;
Mx+=aa.Pt[i].mX*100/(aa.allpnum-aa.fixpnum);
My+=aa.Pt[i].mY*100/(aa.allpnum-aa.fixpnum);
Mp+=aa.Pt[i].mp*100/(aa.allpnum-aa.fixpnum);
}
ou.precision(4);
ou<<"-----------------------------------------------------------------------------------------"<<endl;
ou<<" Mx均值: ";ou.width(5);ou<<Mx;
ou<<" My均值: ";ou.width(5);ou<<My;
ou<<" Mp均值: ";ou.width(5);ou<<Mp<<endl;
ou<<"-----------------------------------------------------------------------------------------"<<endl<<endl;
// 5最弱点及精度
ou<<" 最弱点及其精度"<<endl;
ou<<"-----------------------------------------------------------------------------------------"<<endl;
ou<<" Name X(m) Y(m) MX(cm) MY(cm) MP(cm) E(cm) F(cm) T(dms) "<<endl;
double a(0);
for(i=aa.fixpnum;i<aa.allpnum;i++)
if(a<=aa.Pt[i].mp) {a=aa.Pt[i].mp;n=i;}
ou.right;
ou.width(8);ou<<aa.Pt[n].name;ou.precision(11);ou.width(17);
ou<<setf(aa.Pt[n].X,4);ou.precision(11);ou.width(16);ou<<setf(aa.Pt[n].Y,4);
ou.precision(4);ou.width(8);ou<<aa.Pt[n].mX*100;
ou.precision(4);ou.width(7);ou<<aa.Pt[n].mY*100;
ou.precision(4);ou.width(7);ou<<aa.Pt[n].mp*100;
ou.precision(4);ou.width(7);ou<<aa.Pt[n].E*100;
ou.precision(4);ou.width(7);ou<<aa.Pt[n].F*100;
ou<<" ";
ou.precision(9);ou.width(10);ou<<setf(aa.Pt[n].T,5);
ou<<endl;
ou<<"-----------------------------------------------------------------------------------------"<<endl;
// 6 网点间边长、方位角及其相对精度
ou<<" 网点间边长、方位角及其相对精度"<<endl;
ou<<"--------------------------------------------------------------------------------------------------"<<endl;
ou<<" FROM TO A(dms) MA(sec) S(m) MS(cm) S/MS E(cm) F(cm) T(dms) "<<endl;
ou<<"--------------------------------------------------------------------------------------------------"<<endl;
range L[MAX
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -