void CMy1Dlg::OnOK()
{
// TODO: Add extra validation here
//MessageBox("Hello, Windows!");
if(((CButton *)GetDlgItem(IDC_RADIO10))->GetCheck() && ((CButton *)GetDlgItem(IDC_RADIO11))->GetCheck()){
//MessageBox("ddf");能弹出MessageBox,但是再往下的程序运行不出来。
//MessageBox("请输入您测量的转角数");
int n= GetDlgItemInt(IDC_EDIT1);
//cin>>n;
//cout<<"请输入转角数"<<endl;
//cin>>n;
ifstream ep;
ep.open("闭合导线各边距.txt",ios::in);
if(!ep.is_open()){
cout<<"打开文件失败"<<endl;
return ;
}
for(i=1;i<=n;i++){
ep>>di[i];
cout<<"第"<<i<<"导线边距为"<<di[i]<<endl;
g=g+di[i];
}
ep.close();
cout<<"各导线边的和"<<g<<'\n';
ifstream jp;
jp.open("闭合导线各测角观测值.txt",ios::in);
if(!jp.is_open()){
cout<<"打开文件失败"<<endl;
return ;
}
for(i=1;i<=n;i++){
jp>>d[i]>>f[i]>>m[i];
sumd=sumd+d[i]+(sumf+f[i]+(summ+m[i])/60)/60;
sumf=(sumf+f[i]+(summ+m[i])/60)%60;
summ=(summ+m[i])%60;
cout<<d[i]<<"°"<<f[i]<<"′"<<m[i]<<"″"<<"\n";
}
jp.close();
cout<<"内角和为"<<sumd<<"°"<<sumf<<"′"<<summ<<"″"<<"\n";
cout<<"角度闭合差为"<<sumd-(n-2)*180<<"°"<<sumf<<"′"<<summ<<"″";
if(abs(sumd-(n-2)*180)*60+sumf*60+summ>60*sqrt(60)){
cout<<"角度闭合差超限";
}
else{
gz=-((sumd-(n-2)*180)*60+sumf*60+summ)/n;
cout<<"角度闭合差符合精度要求,水平角改正数为"<<gz<<"″"<<'\n';
}
for(i=1;i<=n;i++){
if(abs(gz)<60){
m[i]=m[i]+gz;
if(m[i]<0){
f[i]=f[i]-1;m[i]=m[i]+60;
if(d[i]<0){
d[i]=d[i]-1;f[i]=f[i]+60;}
if(m[i]>=60){
m[i]=m[i]%60;f[i]=f[i]+m[i]/60;
if(f[i]>60){
f[i]=f[i]%60;d[i]=d[i]+f[i]/60;
}
}
}
}
if(abs(gz)>=60&&abs(gz)<3600){
f[i]=f[i]+gz/60;d[i]=d[i]+f[i]/60;
}
if(abs(gz)>=3600){
d[i]=d[i]+gz/3600;
}
yd[i]=d[i]+(long double)f[i]/60+(long double)m[i]/3600;
cout<<"改正后的第"<<i<<"个水平角为"<<d[i]<<"°"<<f[i]<<"′"<<m[i]<<"″"<<'\n';
gsumd=gsumd+d[i]+(gsumf+f[i]+(gsumm+m[i])/60)/60;
gsumf=(gsumf+f[i]+(gsumm+m[i])/60)%60;
gsumm=(gsumm+m[i])%60;
}
cout<<"改正后内角和"<<gsumd<<"°"<<gsumf<<"′"<<gsumm<<"″";
if(gsumd!=(n-2)*180){
cout<<"调整后角度不闭合,请查找错误";
return ;
}
ifstream ap;
ap.open("闭合导线已知方位角.txt",ios::in);
if(!ap.is_open()){
cout<<"打开文件失败"<<endl;
return ;
}
ap>>fd[1]>>ff[1]>>fm[1];
ap.close();
cout<<"导线边1的方位角为"<<fd[1]<<"°"<<ff[1]<<"′"<<fm[1]<<"″"<<'\n';
B[1]=fd[1]+(long double)ff[1]/60+(long double)fm[1]/3600;//导线边1的方位角小数形式
for(i=2;i<=n;i++){//开始求算各边方位角
fm[i]=fm[i-1]+m[i];//前进方向边的方位角=后方方位角+观测角-180
ff[i]=ff[i-1]+f[i];
fd[i]=fd[i-1]+d[i]-180;
if(fm[i]>=60){
ff[i]=ff[i]+1;fm[i]=fm[i]%60;
}
if(ff[i]>=60){
fd[i]=fd[i]+1;ff[i]=ff[i]%60;
}
if(fd[i]>=360){
fd[i]=fd[i]%360;
}
if(fd[i]<0){
fd[i]=fd[i]+360;
}
B[i]=fd[i]+(long double)ff[i]/60+(long double)fm[i]/3600;
cout<<"导线边"<<i<<"的坐标方位角为"<<fd[i]<<"°"<<ff[i]<<"′"<<fm[i]<<"″"<<'\n';
}
tB=B[n]+yd[1]-180;
if(tB<0){
tB=tB+360;cout<<"tB="<<tB<<'\n';
}
cout<<"初始方位角为"<<B[1]<<"推算的坐标方位角为"<<tB<<'\n';
if(tB!=B[1]){
cout<<"推算坐标方位角与原角不等,请查明原因";
return ;
}
else{
cout<<"推算坐标方位角与原角一致,下面开始计算坐标增量";
}
for(i=1;i<=n;i++){
B[i]=B[i]*(pi/180);
yd[i]=long double(yd[i]*pi/180);
x[i+1]=di[i]*cos(B[i]);
y[i+1]=di[i]*sin(B[i]);
if(x[i+1]>0){//纵坐标增量
x[i+1]=int(x[i+1]*100+0.5)/100.0;
}
if(x[i+1]<0){
x[i+1]=int(x[i+1]*100-0.5)/100.0;
}
if(y[i+1]>0){//横坐标增量{
y[i+1]=int(y[i+1]*100+0.5)/100.0;
}
if(y[i+1]<0){
y[i+1]=int(y[i+1]*100-0.5)/100.0;
}//四舍五入,保留两位小数
sumx=sumx+x[i+1];sumy=sumy+y[i+1];
cout<<x[i+1]<<'\t'<<y[i+1]<<'\n';}
cout<<"纵坐标增量闭合差为"<<"米"<<sumx<<"横坐标增量闭合差为"<<sumy<<"米"<<'\n';
fp=sqrt(pow(sumx,2)+pow(sumy,2));
K=double(fp/g);
cout<<"导线全长闭合差为"<<fp<<"米"<<setiosflags(ios::fixed)<<setprecision(5)<<"导线全长相对闭合差为"<<K<<"米"<<'\n';
double yunxu=0.0005;
if(K>=yunxu){
cout<<"成果不合格"<<endl;
return ;
}
else{
cout<<"符合精度要求"<<endl;
}
for(i=1;i<=n;i++){
if(sumx<0){
vx[i]=int(-sumx*di[i]*100/g+0.5)/1.0;
sumxz=sumxz+vx[i];
}
else{
vx[i]=int(-sumy*di[i]*100/g-0.5)/1.0;
sumxz=sumxz+vx[i];
}
if(sumy<0){
vy[i]=int(-sumy*di[i]*100/g+0.5)/1.0;
sumyh=sumyh+vy[i];
}
else{
vy[i]=int(-sumy*di[i]*100/g-0.5)/1.0;
sumyh=sumyh+vy[i];
}
cout<<"纵坐标增量改正数为"<<vx[i]<<"厘米"<<","<<"横坐标增量改正数为"<<vy[i]<<"厘米"<<endl;
}
for(i=1;i<=n;i++){
x[i+1]=x[i+1]+float(vx[i]/100);
y[i+1]=y[i+1]+float(vy[i]/100);
if(i+1>n){
x[1]=x[1]+float(vx[n]/100);
y[1]=y[1]+float(vy[n]/100);}
cout<<"改正后的导线"<<i<<"的纵坐标增量为"<<x[i+1]<<"米"<<","<<"横坐标增量为"<<y[i+1]<<"米"<<endl;
}
ifstream zp;
zp.open("闭合导线已知坐标.txt",ios::in);
if(!zp.is_open()){
cout<<"打开文件失败"<<endl;
return ;
}
zp>>xz[1]>>yh[1];
zp.close();
for(i=2;i<=n;i++){
xz[i]=xz[i-1]+x[i];
yh[i]=yh[i-1]+y[i];
}
for(i=1;i<=n;i++){
cout<<i<<"导线点的坐标为"<<setiosflags(ios::fixed)<<setprecision(2)<<"("<<xz[i]<<","<<yh[i]<<")"<<endl;
}
xzt=xz[n]+x[1];
yht=yh[n]+y[1];
cout<<setiosflags(ios::fixed)<<setprecision(2)<<"推算出的起始坐标为"<<"("<<xzt<<","<<yht<<")"<<endl<<endl;
cout<<"您已完成导线测量内业计算,各导线点的坐标为"<<endl;
for(i=1;i<=n;i++){
cout<<setiosflags(ios::fixed)<<setprecision(2)<<" "<<i<<" "<<"("<<xz[i]<<","<<yh[i]<<")"<<endl;
}
ofstream op;
op.open("闭合导线结果存放.txt",ios::app);
if(!op.is_open()){
cout<<"打开文件失败"<<endl;
return ;
}
for(i=1;i<=n;i++){
op<<setiosflags(ios::fixed)<<setprecision(2)<<i<<" "<<"("<<xz[i]<<","<<yh[i]<<")"<<endl;
}
op.close();
}
else{
return;
}
CDialog::OnOK();
}