📄 gausscompute.cpp
字号:
if(y>10&&y<100) break;
}
n=int(y);//////////////得到带号;
y=y-int(y);
for(k=1;k<=m;k++) y=y*10;y=y-500000;
}
p=x*57.295779513/6367558.4969;
p1=p*PI/180;
/////////////////////////////////////////////
//////////////////////////////////////////////
/* 用迭代法求Bf */
Bf=0.;
for(;;)
{
xx=c*(Bf*180/PI/57.2957795131*(1-3./4.*e2*e2+45./64.*e2*e2*e2*e2-175./256.*e2*e2*e2*e2*e2*e2+11025./16384.*e2*e2*e2*e2*e2*e2*e2*e2)+((-3./4.*e2*e2+45./64.*e2*e2*e2*e2-175./256.*e2*e2*e2*e2*e2*e2+11025./16384.*e2*e2*e2*e2*e2*e2*e2*e2)*cos(Bf)+(15./32.*e2*e2*e2*e2-175./384.*e2*e2*e2*e2*e2*e2+675./8192.*e2*e2*e2*e2*e2*e2*e2*e2)*cos(Bf)*cos(Bf)*cos(Bf)+(-35./96.*e2*e2*e2*e2*e2*e2+735./2048.*e2*e2*e2*e2*e2*e2*e2*e2)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)+315./1024.*e2*e2*e2*e2*e2*e2*e2*e2*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf))*sin(Bf));
l=x-xx;
a1=c*((1-3./4.*e2*e2+45./64.*e2*e2*e2*e2-175./256.*e2*e2*e2*e2*e2*e2+11025./16384.*e2*e2*e2*e2*e2*e2*e2*e2)+(-3./4.*e2*e2+45./64.*e2*e2*e2*e2-175./256.*e2*e2*e2*e2*e2*e2+11025./16384.*e2*e2*e2*e2*e2*e2*e2*e2)*cos(Bf)*cos(Bf)-(-3./4.*e2*e2+45./64.*e2*e2*e2*e2-175./256.*e2*e2*e2*e2*e2*e2+11025./16384.*e2*e2*e2*e2*e2*e2*e2*e2)*sin(Bf)*sin(Bf)+(15./32.*e2*e2*e2*e2-175./384.*e2*e2*e2*e2*e2*e2+675./8192.*e2*e2*e2*e2*e2*e2*e2*e2)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)-(15./32.*e2*e2*e2*e2-175./384.*e2*e2*e2*e2*e2*e2+675./8192.*e2*e2*e2*e2*e2*e2*e2*e2)*cos(Bf)*cos(Bf)*3*sin(Bf)*sin(Bf)+(-35./96.*e2*e2*e2*e2*e2*e2+735./2048.*e2*e2*e2*e2*e2*e2*e2*e2)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)-(-35./96.*e2*e2*e2*e2*e2*e2+735./2048.*e2*e2*e2*e2*e2*e2*e2*e2)*sin(Bf)*sin(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*5+315./1024.*e2*e2*e2*e2*e2*e2*e2*e2*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)-315./1024.*e2*e2*e2*e2*e2*e2*e2*e2*sin(Bf)*sin(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*7);
dBf=l/a1;
if(fabs(dBf)<0.0000000001) break;
Bf+=dBf;
}
//////////////////////////////////////////////
//////////////////////////////////////////////
// Bf=p+(50221746+(293622+(2350+22*cos(p1)*cos(p1))*cos(p1)*cos(p1))*cos(p1)*cos(p1))/10000000000*sin(p1)*cos(p1)*57.295779513;
// Bf=Bf*PI/180;
tf=tan(Bf);qf=sqrt(e2*e2*cos(Bf)*cos(Bf));
// Nf=6399698.902-(21562.267-(108.973-(0.612-0.004*cos(Bf)*cos(Bf))*cos(Bf)*cos(Bf))*cos(Bf)*cos(Bf))*cos(Bf)*cos(Bf);
Nf=c*(1-1.0/2.0*e2*e2*cos(Bf)*cos(Bf)+3.0/8.0*e2*e2*e2*e2*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)-5.0/16.0*e2*e2*e2*e2*e2*e2*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)+35.0/128.0*e2*e2*e2*e2*e2*e2*e2*e2*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf));
Mf=Nf/(1+qf*qf);
B[i]=Bf-y*y*tf/(2*Mf*Nf)+y*y*y*y*tf/(24*Mf*Nf*Nf*Nf)*(5+3*tf*tf+qf*qf-9*qf*qf*tf*tf)-y*y*y*y*y*y*tf*(61+90*tf*tf+45*tf*tf*tf*tf)/(720*Mf*Nf*Nf*Nf*Nf*Nf);
B[i]=B[i]*180./PI;
l=y/(Nf*cos(Bf))-y*y*y*(1+2*tf*tf+qf*qf)/(6*Nf*Nf*Nf*cos(Bf))+y*y*y*y*y*(5+28*tf*tf+24*tf*tf*tf*tf+6*qf*qf+8*qf*qf*tf*tf)/(120*Nf*Nf*Nf*Nf*Nf*cos(Bf));
if(m_usercenterline==TRUE) //指定中央子午线;
{
L[i]=l+angle_r(m_centerlinenum);
L[i]=radian_a(L[i]);
}
else
{
if(m_bandwidth==1) {L[i]=l+angle_r(3*n);L[i]=radian_a(L[i]);}//3*n肯定为整数;
if(m_bandwidth==0) {L[i]=l+angle_r(6*n-3);L[i]=radian_a(L[i]);}//6*n-3肯定为整数;
}
j=i;
}
fp.Close();
prompt();
CFileDialog FileDlgSave(NULL,NULL,"*.txt",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_CREATEPROMPT,
"坐标反算结果数据文件名(*.txt)|*.txt|所有文件(*.*)|*.*||");
FileDlgSave.m_ofn.lpstrTitle="保存数据文件";
if(FileDlgSave.DoModal()==IDOK)
{
CString Str=FileDlgSave.GetPathName();
if(!f32.Open(Str,CFile::modeCreate|CFile::modeWrite
|CFile::typeText,&e32))
{
CString errorMessage="文件"+Str+"不能创建!";
AfxMessageBox(errorMessage,MB_OK|MB_ICONSTOP,0);
f32.Close();
return FALSE;
}
CString strBuffer;
for(i=1;i<=j;i++)
{
//degree_dfm(B[i]);
double t,m;
t=int(B[i])+(B[i]-int(B[i]))*60./100.;
m=((t*100)-int(t*100))*60/10000.;
t=(int(t*100.))/100.+m;
B[i]=t;
strBuffer.Format("B[%d]=%10.6lf L[%d]=%10.6lf\n",i,B[i],i,L[i]);f32.WriteString(strBuffer);
}
}
f32.Close();
}
return TRUE;
}
void GaussCompute::OnHdcal()
{
// TODO: Add your control notification handler code here
Hdcal();
}
bool GaussCompute::Hdcal()
{
UpdateData(TRUE);
int i,k,m,n,j;
double x,y,Bf,p,tf,qf,Nf,Mf,p1,B,L;
double dBf,xx,a1,l;
double t,q,N,L0,x1[200],y1[200],X;
Ellipsecomputer(m_coordsys);
CStdioFile fp;
CStdioFile f32;
CFileException e32;
CFileDialog FileDlg(TRUE,NULL,"*.*",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,
"换带计算数据文件(*.*)|*.txt|所有文件(*.*)|*.*||");
FileDlg.m_ofn.lpstrTitle="打开数据文件";
if(FileDlg.DoModal()==IDOK)
{
CString StrFile=FileDlg.GetPathName();
if(!fp.Open(StrFile,
CFile::modeRead|CFile::typeText,NULL))
{
AfxMessageBox("数据文件不存在或数据文件错!",MB_OK|MB_ICONSTOP,0);
fp.Close();
return FALSE;
}
CString buff;
for(i=1;;i++)
{
fp.ReadString(buff);
k=sscanf(buff,"%lf%lf",&x,&y);
if(k!=2&&k!=-1)
{
fp.Close();
return FALSE;
}
if(k==-1) break;
for(m=1;;m++)
{
y=y/10;
if(y>10&&y<100) break;
}
n=int(y);//////////////得到带号;
y=y-int(y);
for(k=1;k<=m;k++)
{
y=y*10;
}
y=y-500000;
p=x*57.295779513/6367558.4969;
p1=p*PI/180;
/* 用迭代法求Bf */
Bf=0.;
for(;;)
{
xx=c*(Bf*180/PI/57.2957795131*(1-3./4.*e2*e2+45./64.*e2*e2*e2*e2-175./256.*e2*e2*e2*e2*e2*e2+11025./16384.*e2*e2*e2*e2*e2*e2*e2*e2)+((-3./4.*e2*e2+45./64.*e2*e2*e2*e2-175./256.*e2*e2*e2*e2*e2*e2+11025./16384.*e2*e2*e2*e2*e2*e2*e2*e2)*cos(Bf)+(15./32.*e2*e2*e2*e2-175./384.*e2*e2*e2*e2*e2*e2+675./8192.*e2*e2*e2*e2*e2*e2*e2*e2)*cos(Bf)*cos(Bf)*cos(Bf)+(-35./96.*e2*e2*e2*e2*e2*e2+735./2048.*e2*e2*e2*e2*e2*e2*e2*e2)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)+315./1024.*e2*e2*e2*e2*e2*e2*e2*e2*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf))*sin(Bf));
l=x-xx;
a1=c*((1-3./4.*e2*e2+45./64.*e2*e2*e2*e2-175./256.*e2*e2*e2*e2*e2*e2+11025./16384.*e2*e2*e2*e2*e2*e2*e2*e2)+(-3./4.*e2*e2+45./64.*e2*e2*e2*e2-175./256.*e2*e2*e2*e2*e2*e2+11025./16384.*e2*e2*e2*e2*e2*e2*e2*e2)*cos(Bf)*cos(Bf)-(-3./4.*e2*e2+45./64.*e2*e2*e2*e2-175./256.*e2*e2*e2*e2*e2*e2+11025./16384.*e2*e2*e2*e2*e2*e2*e2*e2)*sin(Bf)*sin(Bf)+(15./32.*e2*e2*e2*e2-175./384.*e2*e2*e2*e2*e2*e2+675./8192.*e2*e2*e2*e2*e2*e2*e2*e2)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)-(15./32.*e2*e2*e2*e2-175./384.*e2*e2*e2*e2*e2*e2+675./8192.*e2*e2*e2*e2*e2*e2*e2*e2)*cos(Bf)*cos(Bf)*3*sin(Bf)*sin(Bf)+(-35./96.*e2*e2*e2*e2*e2*e2+735./2048.*e2*e2*e2*e2*e2*e2*e2*e2)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)-(-35./96.*e2*e2*e2*e2*e2*e2+735./2048.*e2*e2*e2*e2*e2*e2*e2*e2)*sin(Bf)*sin(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*5+315./1024.*e2*e2*e2*e2*e2*e2*e2*e2*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)-315./1024.*e2*e2*e2*e2*e2*e2*e2*e2*sin(Bf)*sin(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*7);
dBf=l/a1;
if(fabs(dBf)<0.0000000001) break;
Bf+=dBf;
}
tf=tan(Bf);qf=sqrt(e2*e2*cos(Bf)*cos(Bf));
Nf=c*(1-1.0/2.0*e2*e2*cos(Bf)*cos(Bf)+3.0/8.0*e2*e2*e2*e2*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)-5.0/16.0*e2*e2*e2*e2*e2*e2*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)+35.0/128.0*e2*e2*e2*e2*e2*e2*e2*e2*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf)*cos(Bf));
Mf=Nf/(1+qf*qf);
B=Bf-y*y*tf/(2*Mf*Nf)+y*y*y*y*tf/(24*Mf*Nf*Nf*Nf)*(5+3*tf*tf+qf*qf-9*qf*qf*tf*tf)-y*y*y*y*y*y*tf*(61+90*tf*tf+45*tf*tf*tf*tf)/(720*Mf*Nf*Nf*Nf*Nf*Nf);
l=y/(Nf*cos(Bf))-y*y*y*(1+2*tf*tf+qf*qf)/(6*Nf*Nf*Nf*cos(Bf))+y*y*y*y*y*(5+28*tf*tf+24*tf*tf*tf*tf+6*qf*qf+8*qf*qf*tf*tf)/(120*Nf*Nf*Nf*Nf*Nf*cos(Bf));
if(m_hd==0) {L=l+angle_r(6*n-3); L=radian_a(L);}
if(m_hd==1) {L=l+angle_r(3*n); L=radian_a(L);}
if(m_hd==2) {L=l+angle_r(6*n-3); L=radian_a(L);}
if(m_hd==3) {L=l+angle_r(3*n); L=radian_a(L);}
if(m_hd==0)
{
if(L-(6*n-3)>=0)
{
n=n+1;
L0=n*6-3;
}
else
{
n=n-1;
L0=n*6-3;
}
}
if(m_hd==1)
{
if(L-(3*n)>=0)
{
n=n+1;
L0=n*3;
}
else
{
n=n-1;
L0=n*3;
}
}
if(m_hd==2)
{
for(n=1;;n++)
{
if(fabs(L-3*n)<=1.3)
break;
}
L0=3*n;
}
if(m_hd==3)
{
for(n=1;;n++)
{
if(fabs(L-(6*n-3)<=3))
break;
}
L0=n*6-3;
}
l=angle_r(L)-angle_r(L0);
L=angle_r(L);//角度化为弧度;
X=c*(B*(1-3./4.*e2*e2+45./64.*e2*e2*e2*e2-175./256.*e2*e2*e2*e2*e2*e2+11025./16384.*e2*e2*e2*e2*e2*e2*e2*e2)+((-3./4.*e2*e2+45./64.*e2*e2*e2*e2-175./256.*e2*e2*e2*e2*e2*e2+11025./16384.*e2*e2*e2*e2*e2*e2*e2*e2)*cos(B)+(15./32.*e2*e2*e2*e2-175./384.*e2*e2*e2*e2*e2*e2+675./8192.*e2*e2*e2*e2*e2*e2*e2*e2)*cos(B)*cos(B)*cos(B)+(-35./96.*e2*e2*e2*e2*e2*e2+735./2048.*e2*e2*e2*e2*e2*e2*e2*e2)*cos(B)*cos(B)*cos(B)*cos(B)*cos(B)*cos(B)*cos(B)*cos(B)+315./1024.*e2*e2*e2*e2*e2*e2*e2*e2*cos(B)*cos(B)*cos(B)*cos(B)*cos(B)*cos(B)*cos(B))*sin(B));
t=tan(B);q=cos(B)*e2;N=a/(sqrt(1-e*e*sin(B)*sin(B)));
x1[i]=X+l*l/2*N*sin(B)*cos(B)+l*l*l*l/24*N*sin(B)*cos(B)*cos(B)*cos(B)*(5-t*t+9*q*q+4*q*q*q*q)+l*l*l*l*l*l/720*N*sin(B)*cos(B)*cos(B)*cos(B)*cos(B)*cos(B)*(61-58*t*t+t*t*t*t);
y1[i]=l*N*cos(B)+l*l*l/6*N*cos(B)*cos(B)*cos(B)*(1-t*t+q*q)+l*l*l*l*l/120*N*cos(B)*cos(B)*cos(B)*cos(B)*cos(B)*(5-18*t*t+t*t*t*t+14*q*q-58*q*q*t*t);
y1[i]=y1[i]+500000;
for(k=1;;k++)
{
y1[i]=y1[i]/10;
if(y1[i]>=0&&y1[i]<1) break;
}
y1[i]=n+y1[i];
for(m=1;m<=k;m++) y1[i]=y1[i]*10;
j=i;
}
fp.Close();
prompt();
CFileDialog FileDlgSave(NULL,NULL,"*.txt",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_CREATEPROMPT,
"换带计算结果数据文件名(*.txt)|*.txt|所有文件(*.*)|*.*||");
FileDlgSave.m_ofn.lpstrTitle="保存数据文件";
if(FileDlgSave.DoModal()==IDOK)
{
CString Str=FileDlgSave.GetPathName();
if(!f32.Open(Str,CFile::modeCreate|CFile::modeWrite
|CFile::typeText,&e32))
{
CString errorMessage="文件"+Str+"不能创建!";
AfxMessageBox(errorMessage,MB_OK|MB_ICONSTOP,0);
f32.Close();
return FALSE;
}
CString strBuffer;
for(i=1;i<=j;i++)
{
strBuffer.Format("x[%d]=%16.6lfm y[%d]=%16.6lfm\n",i,x1[i],i,y1[i]);
f32.WriteString(strBuffer);
}
}
f32.Close();
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -