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

📄 sunrisesetdlg.cpp

📁 计算日出日落时间,可在EVC或者vc下运行
💻 CPP
字号:
// SunrisesetDlg.cpp : implementation file
//

#include "stdafx.h"
#include "Sunriseset.h"
#include "SunrisesetDlg.h"
#include "math.h"  
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSunrisesetDlg dialog

CSunrisesetDlg::CSunrisesetDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSunrisesetDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSunrisesetDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CSunrisesetDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSunrisesetDlg)
		// NOTE: the ClassWizard will add DDX and DDV calls here
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CSunrisesetDlg, CDialog)
	//{{AFX_MSG_MAP(CSunrisesetDlg)
	ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSunrisesetDlg message handlers

BOOL CSunrisesetDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	CenterWindow(GetDesktopWindow());	// center to the hpc screen

	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}



void CSunrisesetDlg::OnButton1() 
{  
	double ut,ut0,ut1,Long,Glat,T;
     Long=120.3;  //经度
     Glat=31.57;   //纬度

	// TODO: Add your control notification handler code here
	CTime t1( 2000, 1, 1, 0, 0, 0 ); 
     CTime t2(2007, 9, 14, 0, 0, 0 ); 
      CTimeSpan d = t2 - t1;  // Subtract 2 CTimes
       
	  double days=d.GetDays( ); //计算出从格林威治时间公元2000年1月1日到计算日天数days;
     ut=180;
	 ut0=0;

    while(fabs(ut-ut0)>0.1)  
	{
		double t=(days+ut/360)/36525;

	  double L=(280.460+36000.770*t)-360*((280.460+36000.770*t)/360);  

	  double G=357.528+35999.050*t;    
	           //(4)计算太阳的平近点角
    
	  double c=L+1.915*sin(G)+0.020*sin(2*G);
	          //(5)计算太阳的黄道经度

	  double a=23.4393-0.0130*t;
	       //(6)计算地球的倾角 
	  
	  double b=asin(sin(a)*sin(c));
	        //(7)计算太阳的偏差
	  
	  double GHA=ut-180-1.915*sin(G)-0.020*sin(2*G)+2.466*sin(2*c)-0.053*sin(4*c);
		  //(8)计算格林威治时间的太阳时间角GHA

	  double e=acos((sin(-6)-sin(Glat)*sin(b))/(cos(Glat)*cos(b)));
	            //(9)计算修正值e

	     ut1=ut-(GHA+Long+e);
         //ut1=ut1-360*(ut1/360);
	          //(10)计算新的日出日落时间
	   ut0=ut;   
	   ut=ut1;  

      
	}
       T=ut/15+1;








}


//DEL double CSunrisesetDlg::count(double ut)
//DEL {  
//DEL     
//DEL     int t=(days+UTo/360)/36525;
//DEL 
//DEL 	  double L=280.460+36000.770×t;    
//DEL 
//DEL 	  double G=357.528+35999.050×t;     
//DEL 	           //(4)计算太阳的平近点角
//DEL     
//DEL 	  double c=L+1.915×sinG+0.020xsin(2G);
//DEL 	          //(5)计算太阳的黄道经度
//DEL 
//DEL 	  double a=23.4393-0.0130×t;
//DEL 	       //(6)计算地球的倾角 
//DEL 	  
//DEL 	  double b=asin(sina×sinc);
//DEL 	        //(7)计算太阳的偏差
//DEL 	  
//DEL 	  double GHA=UTo-180-1.915×sinG-0.020×sin(2G) +2.466×sin(2c)-0.053×sin(4c);
//DEL 		  //(8)计算格林威治时间的太阳时间角GHA
//DEL 
//DEL 	  double e=acos{[ sinh-sin(Glat)sin(b)]/cos(Glat)cos(b)};
//DEL 	            //(9)计算修正值e
//DEL 
//DEL 	   double  UT=UT-(GHA+Long+e);
//DEL 	          //(10)计算新的日出日落时间
//DEL 
//DEL }

double CSunrisesetDlg::count(double ut, double ut0)
{

}

⌨️ 快捷键说明

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