⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gausscompute.cpp

📁 该软件主要应用是采用高斯正反算进行换带计算的。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					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 + -