利用日期,經(jīng)緯度求日落時(shí)間的C語言程序_第1頁
利用日期,經(jīng)緯度求日落時(shí)間的C語言程序_第2頁
利用日期,經(jīng)緯度求日落時(shí)間的C語言程序_第3頁
利用日期,經(jīng)緯度求日落時(shí)間的C語言程序_第4頁
利用日期,經(jīng)緯度求日落時(shí)間的C語言程序_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、利用日期、經(jīng)緯度求日出日落時(shí)間 C語言程序代碼#define PI 3.1415926  #include<math.h>  #include<iostream>  using namespace std;  int days_of_month_1=31,28,31,30,31,30,31,31,30,31,30,31;  int days_of_month_2=31,29,31,30,31,30,31,31,3

2、0,31,30,31;  long double h=-0.833;  /定義全局變量 void input_date(int c)      int i;      cout<<"Enter the date (form: 2009 03 10):"<<endl; 

3、;     for(i=0;i<3;i+)          cin>>ci;          /輸入日期 void input_glat(int c)      int i;    

4、60; cout<<"Enter the degree of latitude(range: 0°- 60°,form: 40 40 40 (means 40°4040):"<<endl;      for(i=0;i<3;i+)         &

5、#160;cin>>ci;          /輸入緯度 void input_glong(int c)      int i;      cout<<"Enter the degree of longitude(west is negativ,

6、form: 40 40 40 (means 40°4040):"<<endl;      for(i=0;i<3;i+)          cin>>ci;          /輸入經(jīng)度 int leap_year(in

7、t year)      if(year%400=0) | (year%100!=0) && (year%4=0) return 1;      else return 0;    /判斷是否為閏年:若為閏年,返回1;若非閏年,返回0  int days(int year, int&

8、#160;month, int date)      int i,a=0;      for(i=2000;i<year;i+)          if(leap_year(i) a=a+366;          else 

9、;a=a+365;            if(leap_year(year)          for(i=0;i<month-1;i+)              a=a+days_of_month_2i;  

10、                    else           for(i=0;i<month-1;i+)              a=

11、a+days_of_month_1i;                      a=a+date;      return a;    /求從格林威治時(shí)間公元2000年1月1日到計(jì)算日天數(shù)days  long double t_

12、century(int days, long double UTo)      return (long double)days+UTo/360)/36525;    /求格林威治時(shí)間公元2000年1月1日到計(jì)算日的世紀(jì)數(shù)t  long double L_sun(long double t_century)      

13、return (280.460+36000.770*t_century);    /求太陽的平黃徑 long double G_sun(long double t_century)      return (357.528+35999.050*t_century);    /求太陽的平近點(diǎn)角 long double ecliptic_longitude(lo

14、ng double L_sun,long double G_sun)      return (L_sun+1.915*sin(G_sun*PI/180)+0.02*sin(2*G_sun*PI/180);    /求黃道經(jīng)度 long double earth_tilt(long double t_century)      retur

15、n (23.4393-0.0130*t_century);    /求地球傾角 long double sun_deviation(long double earth_tilt, long double ecliptic_longitude)      return (180/PI*asin(sin(PI/180*earth_tilt)*sin(PI/180*ecliptic_longitude)

16、;    /求太陽偏差 long double GHA(long double UTo, long double G_sun, long double ecliptic_longitude)      return (UTo-180-1.915*sin(G_sun*PI/180)-0.02*sin(2*G_sun*PI/180)+2.466*sin(2*ecliptic_lon

17、gitude*PI/180)-0.053*sin(4*ecliptic_longitude*PI/180);    /求格林威治時(shí)間的太陽時(shí)間角GHA  long double e(long double h, long double glat, long double sun_deviation)      return 180/PI*acos(sin(h*PI/1

18、80)-sin(glat*PI/180)*sin(sun_deviation*PI/180)/(cos(glat*PI/180)*cos(sun_deviation*PI/180);    /求修正值e  long double UT_rise(long double UTo, long double GHA, long double glong, long double e)  

19、60;   return (UTo-(GHA+glong+e);    /求日出時(shí)間 long double UT_set(long double UTo, long double GHA, long double glong, long double e)      return (UTo-(GHA+glo

20、ng-e);    /求日落時(shí)間 long double result_rise(long double UT, long double UTo, long double glong, long double glat, int year, int month, int date)      lon

21、g double d;      if(UT>=UTo) d=UT-UTo;      else d=UTo-UT;      if(d>=0.1)           UTo=UT;      &

22、#160;   UT=UT_rise(UTo,GHA(UTo,G_sun(t_century(days(year,month,date),UTo),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo),G_sun(t_century(days(year,month,date),UTo),glong,e(h,glat,sun_deviation(earth_tilt(t_century(days(year,month,date),UTo),ecliptic_longitude(L_sun(t_ce

23、ntury(days(year,month,date),UTo),G_sun(t_century(days(year,month,date),UTo);          result_rise(UT,UTo,glong,glat,year,month,date);            return UT;    /判斷并返回

24、結(jié)果(日出) long double result_set(long double UT, long double UTo, long double glong, long double glat, int year, int month, int date)      long double d; 

25、0;    if(UT>=UTo) d=UT-UTo;      else d=UTo-UT;      if(d>=0.1)          UTo=UT;          UT=UT_set(UTo,

26、GHA(UTo,G_sun(t_century(days(year,month,date),UTo),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo),G_sun(t_century(days(year,month,date),UTo),glong,e(h,glat,sun_deviation(earth_tilt(t_century(days(year,month,date),UTo),ecliptic_longitude(L_sun(t_century(days(year,month,date),UTo),G_sun

27、(t_century(days(year,month,date),UTo);          result_set(UT,UTo,glong,glat,year,month,date);            return UT;    /判斷并返回結(jié)果(日落) int Zone(long dou

28、ble glong)      if(glong>=0) return (int)(int)(glong/15.0)+1);      else return (int)(int)(glong/15.0)-1);    /求時(shí)區(qū) void output(long double rise, long double 

29、set, long double glong)      if(int)(60*(rise/15+Zone(glong)-(int)(rise/15+Zone(glong)<10)          cout<<"The time at which the sun rises is "<

30、;<(int)(rise/15+Zone(glong)<<":0"<<(int)(60*(rise/15+Zone(glong)-(int)(rise/15+Zone(glong)<<" .n"      else cout<<"The time at which the sun rises is "<<(int

31、)(rise/15+Zone(glong)<<":"<<(int)(60*(rise/15+Zone(glong)-(int)(rise/15+Zone(glong)<<" .n"      if(int)(60*(set/15+Zone(glong)-(int)(set/15+Zone(glong)<10)          cout<&

32、lt;"The time at which the sun sets is "<<(int)(set/15+Zone(glong)<<": "<<(int)(60*(set/15+Zone(glong)-(int)(set/15+Zone(glong)<<" .n"      else cout<<"

33、;The time at which the sun sets is "<<(int)(set/15+Zone(glong)<<":"<<(int)(60*(set/15+Zone(glong)-(int)(set/15+Zone(glong)<<" .n"    /打印結(jié)果        

34、  int main()      long double UTo=180.0;      int year,month,date;      long double glat,glong;      int c3;    

35、60; input_date(c);      year=c0;      month=c1;      date=c2;      input_glat(c);      glat=c0+c1/60+c2/3600;      input_glong(c); 

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論