📄 trans2.cpp
字号:
// Trans2.cpp : 实现文件
//
#include "stdafx.h"
#include "CoorTrans.h"
#include "Trans2.h"
#include <cmath>
#define TT acos(-1.0)
// CTrans2 对话框
IMPLEMENT_DYNAMIC(CTrans2, CDialog)
CTrans2::CTrans2(CWnd* pParent /*=NULL*/)
: CDialog(CTrans2::IDD, pParent)
, x(0)
, y(0)
, z(0)
, b1(_T("0"))
, l1(_T("0"))
, H(0)
{
B=N=L=B3=L3=H=0;
B1=B2=L1=L2=0;
f=1/298.3;
a=6378245;
b=a-a*f;
e=sqrt((a*a-b*b)/(a*a));
}
CTrans2::~CTrans2()
{
}
void CTrans2::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT1, x);
DDX_Text(pDX, IDC_EDIT2, y);
DDX_Text(pDX, IDC_EDIT3, z);
DDX_Text(pDX, IDC_EDIT4, b1);
DDX_Text(pDX, IDC_EDIT5, l1);
DDX_Text(pDX, IDC_EDIT6, H);
DDX_Control(pDX, IDC_COMBO2, cmb);
}
BEGIN_MESSAGE_MAP(CTrans2, CDialog)
ON_BN_CLICKED(IDC_BUTTON1, &CTrans2::OnBnClickedButton1)
ON_CBN_SELCHANGE(IDC_COMBO2, &CTrans2::OnCbnSelchangeCombo2)
END_MESSAGE_MAP()
// CTrans2 消息处理程序
void CTrans2::computer1()
{
L=atan2(y,x);
B=atan(z/sqrt(x*x+y*y));
double Bx=0;
while(abs(B-Bx)>0.000000001)
{
N=a/sqrt(1-e*e*sin(B)*sin(B));
H=sqrt(x*x+y*y)/cos(B)-N;
Bx=B;
B=atan(z/sqrt(x*x+y*y)/(1-e*e*N/(N+H)));
}
H=sqrt(x*x+y*y)/cos(B)-N;
B1=int(B*180/TT);B2=int((B*180/TT-B1)*60);B3=(((B*180/TT-B1)*60-B2)*60);
L1=int(L*180/TT);L2=int((L*180/TT-L1)*60);L3=(((L*180/TT-L1)*60-L2)*60);
B2=abs(B2);B3=abs(B3);L2=abs(L2);L3=abs(L3);
if (B3==60.0) //解决分秒为60的问题
{
B3=.0;
B2+=1;
}
if (B2==60)
{
B2=0;
if (B1>=0)
{
B1+=1;
}
else B1-=1;
}
if (L3==60.0)
{
L3=.0;
L2+=1;
}
if (L2==60)
{
L2=0;
if (L1>=0)
{
L1+=1;
}
L1-=1;
}
//b1=(char)B1+"°"+(char)B2+"'"+(char)B3+"'";
//l1=L1+"°"+L2+"'"+L3+"'";
CString c;
b1.Format("%d",B1);
b1+="°";
c.Format(" %d",B2);
b1+=c;
b1+="′";
c.Format(" %.6f",B3);
b1+=c;
b1+="″";
l1.Format("%d",L1);
l1+="°";
c.Format(" %d",L2);
l1+=c;
l1+="′";
c.Format(" %.6f",L3);
l1+=c;
l1+="″";
}
void CTrans2::OnBnClickedButton1()
{
UpdateData();// TODO: 在此添加控件通知处理程序代码
computer1();
UpdateData(FALSE);
}
void CTrans2::OnCbnSelchangeCombo2()
{
UpdateData();
int ind=cmb.GetCurSel();
switch(ind)
{
case 0:
f=1/298.257;
a=6378140;
break;
case 1:
f=1/298.223563;
a=6378137;
break;
case 2:
f=1/298.3;
a=6378245;
break;
default:
break;
}
b=a-a*f;
e=sqrt((a*a-b*b)/(a*a));
computer1();
UpdateData(FALSE);
// TODO: 在此添加控件通知处理程序代码
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -