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

📄 orbitparamdlg.cpp

📁 本程序使用VC6.0开发的GPS的星历预报软件
💻 CPP
字号:
// OrbitParamDlg.cpp : implementation file
//

#include "stdafx.h"
#include "SatelliteOrbitCalculationPro.h"
#include "OrbitParamDlg.h"

#include "math.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// COrbitParamDlg dialog


COrbitParamDlg::COrbitParamDlg(CWnd* pParent /*=NULL*/)
	: CDialog(COrbitParamDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(COrbitParamDlg)
	m_I = 0.0;
	m_A = 0.0;
	m_E = 0.0;
	m_R = 0.0;
	m_W = 0.0;
	m_O = 0.0;
	m_M = 0.0;
	m_PRNID = 0;
	m_Time = 0;
	m_RESULT_EP = 0.0;
	m_RESULT_AP = 0.0;
	//}}AFX_DATA_INIT
}


void COrbitParamDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(COrbitParamDlg)
	DDX_Text(pDX, IDC_EDIT3, m_I);
	DDX_Text(pDX, IDC_EDIT4, m_A);
	DDX_Text(pDX, IDC_EDIT5, m_E);
	DDX_Text(pDX, IDC_EDIT6, m_R);
	DDX_Text(pDX, IDC_EDIT7, m_W);
	DDX_Text(pDX, IDC_EDIT8, m_O);
	DDX_Text(pDX, IDC_EDIT9, m_M);
	DDX_Text(pDX, IDC_EDIT1, m_PRNID);
	DDX_Text(pDX, IDC_EDIT2, m_Time);
	DDX_Text(pDX, IDC_EDIT10, m_RESULT_EP);
	DDX_Text(pDX, IDC_EDIT11, m_RESULT_AP);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(COrbitParamDlg, CDialog)
	//{{AFX_MSG_MAP(COrbitParamDlg)
	ON_BN_CLICKED(IDC_SHOW_ORBIT, OnShowOrbit)
	ON_BN_CLICKED(IDC_SHOW_PHOTO, OnShowPhoto)
	ON_BN_CLICKED(IDC_SHOW_RESULT, OnShowResult)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// COrbitParamDlg message handlers

void COrbitParamDlg::Skip_Line(int LineNum)
{
	rewind(pFile);
	while(LineNum)
	{
		if(fgetc(pFile) == '\n') 
		{
			--LineNum;
		}
	}
}

//////////////////////////////////////////////////////////////////////////
//显示卫星的轨道参数
void COrbitParamDlg::OnShowOrbit() 
{
	// TODO: Add your control notification handler code here
	char _ch_Param_Temp[20];	
	pFile = fopen("OrbitParameter.txt", "r+");
	if (NULL == pFile) 
	{
		MessageBox("指定的文件没有响应");
	}
	
	memset(_ch_Param_Temp, 0, 20);
	rewind(pFile);
	
	UpdateData();

	int _Temp_PRNID;
	_Temp_PRNID = m_PRNID;
	CString _Temp_str;

	if ( m_Time <0 || m_Time > 86400 )
	{
		MessageBox("请将时间范围限定在[0,86400]之内");
	}

	else
	{
		if (m_PRNID > 31 || m_PRNID <1) 
		{
			m_I = 0.0;
			m_A = 0.0;
			m_E = 0.0;
			m_R = 0.0;
			m_W = 0.0;
			m_O = 0.0;
			m_M = 0.0;
			m_PRNID = 0;
			//   	m_Time = 0;
			m_RESULT_EP = 0.0;
			m_RESULT_AP = 0.0;
			MessageBox("请选择PRN号范围为[1,31]的卫星");
		}
		
		else
		{
			if (0 == m_PRNID) 
			{
				m_I = 0.0;
				m_A = 0.0;
				m_E = 0.0;
				m_R = 0.0;
				m_W = 0.0;
				m_O = 0.0;
				m_M = 0.0;
				m_PRNID = 0;
				//        	m_Time = 0;
				m_RESULT_EP = 0.0;
				m_RESULT_AP = 0.0;
				MessageBox("请输入卫星的PRN号");
			}
			
			else
			{
				if (2 == m_PRNID || 12 == m_PRNID) 
				{
					m_I = 0.0;
					m_A = 0.0;
					m_E = 0.0;
					m_R = 0.0;
					m_W = 0.0;
					m_O = 0.0;
					m_M = 0.0;
					m_PRNID = 0;
					//            	m_Time = 0;
					m_RESULT_EP = 0.0;
					m_RESULT_AP = 0.0;
					MessageBox("无此PRN号的卫星,请重新输入");
				}
				
				else 
				{
					Skip_Line( _Temp_PRNID );
					
					fseek(pFile, 8, SEEK_CUR);
					fscanf(pFile, "%14s", _ch_Param_Temp);
					m_E = atof( _ch_Param_Temp );
					
					fseek(pFile, 2, SEEK_CUR);
					fscanf(pFile, "%11s", _ch_Param_Temp);
					m_A = atof( _ch_Param_Temp );
					
					fseek(pFile, 2, SEEK_CUR);
					fscanf(pFile, "%12s", _ch_Param_Temp);
					m_W = atof( _ch_Param_Temp );
					
					fseek(pFile, 2, SEEK_CUR);
					fscanf(pFile, "%13s", _ch_Param_Temp);
					m_M = atof( _ch_Param_Temp );
					
					fseek(pFile, 2, SEEK_CUR);
					fscanf(pFile, "%12s", _ch_Param_Temp);
					m_I = atof( _ch_Param_Temp );
					
					fseek(pFile, 2, SEEK_CUR);
					fscanf(pFile, "%13s", _ch_Param_Temp);
					m_O = atof( _ch_Param_Temp );
					
					fseek(pFile, 2, SEEK_CUR);
					fscanf(pFile, "%16s", _ch_Param_Temp);
					m_R = atof( _ch_Param_Temp );
					
				}
			}		
		}
	}
	
	UpdateData( FALSE );

	fclose( pFile );		
}


//////////////////////////////////////////////////////////////////////////
//显示图像函数
void COrbitParamDlg::OnShowPhoto() 
{
	// TODO: Add your control notification handler code here
	
}


//////////////////////////////////////////////////////////////////////////
//显示计算结果
void COrbitParamDlg::OnShowResult() 
{
	// TODO: Add your control notification handler code here
    UpdateData();

	double _Temp_Init_X, _Temp_Init_Y, _Temp_Init_Z;
	double _Temp_X1, _Temp_Y1, _Temp_Z1;
	double _Temp_X2, _Temp_Y2, _Temp_Z2;
	double _Temp_X3, _Temp_Y3, _Temp_Z3;
	double _Temp_Terminal_X, _Temp_Terminal_Y, _Temp_Terminal_Z; 
	double _Temp_B;                                             //椭圆短轴
	double _Temp_n0;
	double _Temp_m0;
	double _Temp_E1;
	double _Temp_o0;
	double _Temp_C;
	int _Temp_Counter;

	_Temp_B = sqrt((1 - m_E * m_E)) * m_A * m_A;
	_Temp_n0 = 19964982 / (m_A * m_A * m_A);
	_Temp_m0 = m_M + _Temp_n0 * m_Time;
	_Temp_E1 = _Temp_m0;

	for(_Temp_Counter = 100; _Temp_Counter >0; _Temp_Counter--)
	{
		_Temp_E1 = _Temp_m0 + m_E * sin(_Temp_E1);
	}

   if (0 == m_A)
	{
		MessageBox("请点击“显示轨道参数”按钮");
    }

	else
	{
		_Temp_Init_X = m_A * m_A * (cos(_Temp_E1) - m_E) * (cos(m_W) * cos(m_O) - sin(m_W) * sin(m_O) * cos(m_I)) - _Temp_B * sin(_Temp_E1) * (sin(m_W) * cos(m_O) + cos(m_W) * sin(m_O) * cos(m_I));
		_Temp_Init_Y = m_A * m_A * (cos(_Temp_E1) - m_E) * (sin(m_W) * sin(m_O) - sin(m_W) * cos(m_O) * cos(m_I)) - _Temp_B * sin(_Temp_E1) * (sin(m_W) * sin(m_O) - cos(m_W) * cos(m_O) * cos(m_I));
		_Temp_Init_Z = m_A * m_A * (cos(_Temp_E1) - m_E) * sin(m_W) * sin(m_I) - _Temp_B * sin(_Temp_E1) * cos(m_W) * sin(m_I);

		_Temp_o0 = m_O + (m_R - 0.0000729211567) * m_Time;
		
		_Temp_X1 = _Temp_Init_X * cos(_Temp_o0) - _Temp_Init_Y * cos(m_I) * sin(_Temp_o0);
		_Temp_Y1 = _Temp_Init_X * sin(_Temp_o0) + _Temp_Init_Y * cos(m_I) * cos(_Temp_o0);
		_Temp_Z1 = _Temp_Init_Y * sin(m_I);

		_Temp_X2 = (6378137 + 40) * cos(1.9939) * cos(0.53205);
		_Temp_Y2 = (6378137 + 40) * cos(1.9939) * sin(0.53205);
		_Temp_Z2 = (6378137 * (1 - 0.00669437999013) + 40) * sin(1.9939);

		_Temp_X3 = _Temp_X1 - _Temp_X2;
		_Temp_Y3 = _Temp_Y1 - _Temp_Y2;
		_Temp_Z3 = _Temp_Z1 - _Temp_Z2;

        _Temp_Terminal_X = -sin(0.53205) * cos(1.9939) * _Temp_X3 - sin(0.53205) * sin(1.9939) * _Temp_Y3 + cos(0.53205) * _Temp_Z3;
		_Temp_Terminal_Y = -sin(1.9939) * _Temp_X3 + cos(1.9939) * _Temp_Y3;
		_Temp_Terminal_Z = cos(0.53205) * cos(1.9939) * _Temp_X3 + cos(0.53205) * sin(1.9939) * _Temp_Y3 + sin(0.53205) * _Temp_Z3;

		m_RESULT_EP = atan(_Temp_Terminal_X/_Temp_Terminal_Y);
		if (_Temp_Terminal_X < 0)
		{
			m_RESULT_EP = m_RESULT_EP/PI *180 + 180;
		}

		else
		{
			m_RESULT_EP = m_RESULT_EP/PI *180;
		}

		_Temp_C = _Temp_Terminal_Z / sqrt(_Temp_Terminal_X * _Temp_Terminal_X + _Temp_Terminal_Y * _Temp_Terminal_Y);
		m_RESULT_AP = atan(_Temp_C);
		m_RESULT_AP = m_RESULT_AP/PI *180;
			
	}

	UpdateData(FALSE);	
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -