计算呼伦贝尔城镇“天亮、天黑时刻”程序的设计
- 格式:pdf
- 大小:67.07 KB
- 文档页数:1
计算月出和日出日落时间的几种数学模型作者:陈素君来源:《现代职业教育.高职本科》 2016年第12期[摘要]利用天文学的基础知识和目前已有的天文资料,研究计算某地区月出与日落时刻的数学模型。
[关键词]月出时刻;日出日落时刻;检验[中图分类号] G642[文献标志码] A[文章编号] 2096-0603(2016)34-0038-02一、精确度较高的日落时刻计算模型我们把日落时刻定义为太阳每天从西方地平线降落的时刻。
日落的时间随着季节及纬度的不同而改变。
传统上认为在北半球,冬至时日落的时间最早,夏至时日落最晚。
但是实际上,由于黄赤交角与地球椭圆轨道的影响,日落最早的时间不会落在冬至,而是在12月初;日落最晚的时间也不会落在夏至,而是在6月底。
我们需要一种更精确的计算方法。
以下我们研究文献(详见参考文献[1])中的日落时刻计算模型:首先,日出日落时间指把地球假设为球形,圆盘太阳刚好到达地平线的时刻。
日落太阳的位置为h=-0.8333°,采用迭代法重新计算太阳的位置,直到满足要求的计算精度为止。
已知h=-0.8333°、经度Long、纬度Glat、时区Zone、第一次计算时间UT0=180。
(1)计算从格林威治时间公元2000年1月1日到计算日的天数days;(2)计算从格林威治时间公元2000年1月1日到计算日的世纪数t=■(3)计算太阳的平黄径L=280.460+36000.770×t(4)计算太阳的平近点角G=357.528+35999.050×t(5)计算太阳的黄道经度λ=L+1.915×sinG+0.020×sin(2G)(6)计算太阳的倾角ε=23.4393-0.0130×t(7)计算太阳的偏差δ=arcsin(sinε×sinλ)(8)计算格林威治时间的太阳的时间角GHA:GHA=UT0-180-1.915×sinG-0.020×sin (2G)+2.466×sin(2λ)-0.053×s in(4λ)(9)计算修正值e=arccos{■}(10)新的日落时间,西半球的经度Long为负数。
日出日落时间的计算以及中国常见的日出日落时间以地球中心为原点O,赤道所在平面为XY平面,东经120度指向西经60度为Y轴正方向.球心指向北极为Z轴正方向.有了Y轴与Z轴就可定X轴的方向(从东经30度指向西经150度)球面方程:X^2 + Y^2 + Z^2 = 1 (设地球直径为1)日出日落时刻圈方程:Y^2 + Z'^2 = 1 (Z'以Z轴作坐标变换,见下面) Z'=Z*sin(β+90) (β为太阳光直射点纬度)求纬度α度时日出时刻.先解出纬度为α度时的X,Y坐标.X=sinα*sin(β+90)*cos(β+90)/(cosβ*cosβ)Y=-SQRT(1-X^2-sinα*sinα) (SQRT为平方根)有了XY坐标,求反正切,得出一个角度值(由于在XY平面内,0度在X轴正向,实际的东经120度在Y轴负方向上,即270度角.所以要换算一下,才能得出经度差)实算一下:代入杭州的纬度为30.15度,夏至日时,太阳直射点纬度为23.4333度.算出X=-0.21835,Y=-0.83578,反正切得出-104.64度.计算时假设杭州在Y轴负方向上(即270度或-90度).两者之间相差14.64度,换成时间就是58.56分钟.(计算出的14.64度的含义是指,夏至日那天,当赤道上(北纬0度)东经120度的地方看到日出时,北纬30.15度,东经(120-14.64)度的地方也正好看到日出.)(换句话说:当赤道上东经120度的地方看到日出时,北纬30.15度东经120度的地方日出已经过去58.56分钟了.由于赤道上是昼夜等分的(假设太阳是个点光源),即日出时刻一定在6:00.那么同一经度的北纬30.15度地方,日出时间是5:01:26左右.杭州东经120度10分.比120度还早了40秒钟.所以日出时间为5:00:46)查寿星万年历,杭州在夏至日的日出时间为4:58:07,日落时间19:04:07.实测数据2009年5月1日 星期五 所有时间为北京时间 (任意地点日月升落时刻查询)省会城市北 京116.46E 39.92N(-14分9秒)日出:05时15分(-1分15秒/日)日落:19时09分(+1分0秒/日)长 春125.35E 43.88N(+21分23秒)日出:04时31分(-1分25秒/日)日落:18时41分(+1分11秒/日)长 沙113E 28.21N(-28分0秒)日出:05时48分(-49秒/日)日落:19时03分(+35秒/日)成 都104.06E 30.67N (-1时3分45秒)日出:06时20分(-53秒/日)日落:19时42分(+39秒/日)重 庆106.54E 29.59N (-53分50秒)日出:06时12分(-51秒/日)日落:19时31分(+38秒/日)福 州119.3E 26.08N (-2分48秒)日出:05时26分(-46秒/日)日落:18时34分(+31秒/日)贵 阳106.71E 26.57N (-53分9秒)日出:06时15分(-46秒/日)日落:19时26分(+32秒/日)广 州113.23E 23.16N (-27分4秒)日出:05时54分(-40秒/日)日落:18时55分(+27秒/日)哈尔滨126.63E 45.75N (+26分31秒)日出:04时21分(-1分30秒/日)日落:18时40分(+1分17秒/日)海 口110.35E 20.02N (-38分36秒)日出:06时09分(-35秒/日)日落:19时02分(+22秒/日)杭 州120.19E 30.26N (+45秒)日出:05时17分(-53秒/日)日落:18时37分(+39秒/日)合 肥117.27E 31.86N (-10分55秒)日出:05时26分(-56秒/日)日落:18时51分(+42秒/日)呼和浩特111.65E 40.82N (-33分23秒)日出:05时33分(-1分16秒/日)日落:19时30分(+1分2秒/日)济 南117E 36.65N (-12分0秒)日出:05时19分(-1分7秒/日)日落:19时00分(+53秒/日)昆 明102.73E 25.04N (-1时9分4秒)日出:06时33分(-44秒/日)日落:19时39分(+29秒/日)拉 萨91.11E 29.97N (-1时55分33秒)日出:07时13分(-53秒/日)日落:20时33分(+38秒/日)兰 州103.73E 36.03N (-1时5分4秒)日出:06时13分(-1分4秒/日)日落:19时52分(+50秒/日)南 昌115.89E 28.68N (-16分26秒)日出:05时36分(-50秒/日)日落:18时52分(+36秒/日)南 京118.78E 32.04N (-4分52秒)日出:05时19分(-57秒/日)日落:18时45分(+43秒/日)南 宁108.33E 22.84N (-46分40秒)日出:06时14分(-39秒/日)日落:19时14分(+26秒/日)澳 门113.33E 22.13N (-26分40秒)日出:05时55分(-38秒/日)日落:18时53分(+25秒/日)上 海121.48E 31.22N (+5分55秒)日出:05时10分(-55秒/日)日落:18时33分(+41秒/日)沈 阳123.38E 41.8N (+13分31秒)日出:04时43分(-1分20秒/日)日落:18时44分(+1分5秒/日)石家庄114.48E 38.03N(-22分4秒)日出:05时27分(-1分10秒/日)日落:19时13分(+56秒/日)台 北121.5E 25.05N (+6分0秒)日出:05时19分(-44秒/日)日落:18时24分(+29秒/日)太 原112.53E 37.87N (-29分52秒)日出:05时35分(-1分9秒/日)日落:19时20分(+55秒/日)天 津117.2E 39.13N (-11分11秒)日出:05时14分(-1分13秒/日)日落:19时04分(+58秒/日)武 汉114.31E 30.52N (-22分45秒)日出:05时40分(-53秒/日)日落:19时01分(+40秒/日)乌鲁木齐87.68E 43.77N (-2时9分16秒)日出:07时02分(-1分25秒/日)日落:21时12分(+1分11秒/日)西 安108.95E 34.27N (-44分11秒)日出:05时55分(-1分0秒/日)日落:19时28分(+47秒/日)西 宁101.74E 36.56N (-1时13分2秒)日出:06时20分(-1分6秒/日)日落:20时01分(+51秒/日)香 港114.1E 22.2N (-23分36秒)日出:05时52分(-38秒/日)日落:18时50分(+25秒/日)银 川106.27E 38.47N (-54分55秒)日出:05时58分(-1分9秒/日)日落:19时47分(+56秒/日)郑 州113.65E 34.76N (-25分23秒)日出:05时36分(-1分2秒/日)日落:19时10分(+48秒/日)珠 海113.52E 22.3N (-25分55秒)日出:05时54分(-38秒/日)日落:18时52分(+25秒/日)深 圳114.07E 22.62N (-23分43秒)日出:05时52分(-39秒/日)日落:18时50分(+26秒/日)。
重要地理时区计算的规律重要地理时区计算的规律1、确定日出日落时刻:(1)某地日出时刻,就是该地所在纬线与晨线交点的地方时。
(2)计算时可以用正午时刻-一半昼长,或者,子夜时刻+一半夜长(3)某地日落时刻,就是该地所在纬线与昏线交点的地方时。
(4)计算时可以用正午时刻+一半昼长,或者,子夜时刻-一半夜长+1日。
(5)春分或秋分时,全球昼夜平分,6时日出,18时日落。
(6)赤道上全年昼夜平方,全年都是6时日出,18时日落。
2、确定太阳高度:(一)某一时刻的太阳高度:(1)昼半球上的太阳高度大于零,最大值出现在正午,即地方时12点时。
(2)夜半球上的太阳高度小于零,最小值出现在子夜,即地方时0点时。
(3)晨昏线(圈)上太阳高度等于零。
(二)正午太阳高度:(1)太阳直射那一条纬线正午太阳高度等于90°。
(2)同一天正午太阳高度相同的纬线有两条,这两条纬线分布在直射纬线的两侧,与直射纬线的纬差相等。
(3)某一条纬线上的正午太阳高度等于90°减去该纬线与直射纬线的纬差。
(三)二分二至太阳高度分布规律:(1)春分时,太阳直射赤道,赤道上正午太阳高度为90°,正午太阳高度从赤道向两极逐渐减小。
(2)夏至时,太阳直射北回归线,北回归线上太阳高度为90°,北回归线以北地区正午太阳高度达到全年的最大值,南半球达到最小值。
(3)秋分时,太阳直射赤道,赤道上正午太阳高度为90°,正午太阳高度从赤道向两极逐渐减小。
(4)冬至时,太阳直射南回归线,南回归线上太阳高度为90°,南回归线南北地区正午太阳高度达到全年的最大值,北半球达到最小值。
3、确定日期分界线:日期分界线有两条,一条是国际日期变更线,简称日界线,该线两侧时刻相同,日期相差一天。
另一条日期分界线为地方时0点所在的经线,该线即是前一日的24点,也是后一日的0点。
(1)0点经线向东到日界线日期早一天;0点经线向西到日界线日期迟一天。
日出日落时间计算程序(C语言)//日出日落时间计算C语言程序#define PI 3.1415926#include<math.h>#include<iostream>using namespace std;intdays_of_month_1[]={31,28,31,30,31,30,31,3 1,30,31,30,31};intdays_of_month_2[]={31,29,31,30,31,30,31,3 1,30,31,30,31};long double h=-0.833;//定义全局变量void input_date(int c[]){int i;cout<<"Enter the date (form: 2009 03 10):"<<endl;for(i=0;i<3;i++){cin>>c[i];}}//输入日期void input_glat(int c[]){int i;cout<<"Enter the degree of latitude(range: 0°- 60°,form: 40 40 40 (means 40°40′40″)):"<<endl;for(i=0;i<3;i++){cin>>c[i];}}//输入纬度void input_glong(int c[]){int i;cout<<"Enter the degree of longitude(west is negativ,form: 40 40 40(means 40°40′40″)):"<<endl;for(i=0;i<3;i++){cin>>c[i];}}//输入经度int leap_year(int year){if(((year%400==0) || (year%100!=0) && (year%4==0))) return 1;else return 0;}//判断是否为闰年:若为闰年,返回1;若非闰年,返回0int days(int year, int month, int date){ int i,a=0;for(i=2000;i<year;i++){if(leap_year(i)) a=a+366;else a=a+365;}if(leap_year(year)){for(i=0;i<month-1;i++){a=a+days_of_month_2[i];}}else {for(i=0;i<month-1;i++){a=a+days_of_month_1[i];}}a=a+date;return a;}//求从格林威治时间公元2000年1月1日到计算日天数dayslong double t_century(int days, long double UTo){return ((long double)days+UTo/360)/36525;}//求格林威治时间公元2000年1月1日到计算日的世纪数tlong double L_sun(long double t_century){return(280.460+36000.770*t_century);}//求太阳的平黄径long double G_sun(long double t_century){return(357.528+35999.050*t_century);}//求太阳的平近点角long double ecliptic_longitude(long 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));}//求黄道经度long double earth_tilt(long double t_century){return (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(P I/180*ecliptic_longitude)));}//求太阳偏差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 gitude*PI/180)-0.053*sin(4*ecliptic_longi tude*PI/180));}//求格林威治时间的太阳时间角GHAlong double e(long double h, long double glat, long double sun_deviation){return180/PI*acos((sin(h*PI/180)-sin(glat*PI/180)*sin(sun_deviation*PI/180))/(cos(glat*P I/180)*cos(sun_deviation*PI/180)));}//求修正值elong double UT_rise(long double UTo, long double GHA, long double glong, long double e){return (UTo-(GHA+glong+e));}//求日出时间long double UT_set(long double UTo, long double GHA, long double glong, long double e){return (UTo-(GHA+glong-e));}//求日落时间long double result_rise(long double UT, long double UTo, long double glong, long double glat, int year, int month, int date){long double d;if(UT>=UTo) d=UT-UTo;else d=UTo-UT;if(d>=0.1) {UTo=UT;UT=UT_rise(UTo,GHA(UTo,G_sun(t_century(da ys(year,month,date),UTo)),ecliptic_longit ude(L_sun(t_century(days(year,month,date) ,UTo)),G_sun(t_century(days(year,month,da te),UTo)))),glong,e(h,glat,sun_deviation( earth_tilt(t_century(days(year,month,date ),UTo)),ecliptic_longitude(L_sun(t_centur y(days(year,month,date),UTo)),G_sun(t_cen tury(days(year,month,date),UTo))))));result_rise(UT,UTo,glong,glat,year,month, date);}return UT;}//判断并返回结果(日出)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;if(UT>=UTo) d=UT-UTo;else d=UTo-UT;if(d>=0.1){UTo=UT;UT=UT_set(UTo,GHA(UTo,G_sun(t_century(day s(year,month,date),UTo)),ecliptic_longitu de(L_sun(t_century(days(year,month,date), UTo)),G_sun(t_century(days(year,month,dat e),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(t_cent ury(days(year,month,date),UTo))))));result_set(UT,UTo,glong,glat,year,month,d ate);}return UT;}//判断并返回结果(日落)int Zone(long double glong){if(glong>=0) return (int)((int)(glong/15.0)+1);else return (int)((int)(glong/15.0)-1);}//求时区void output(long double rise, long double set, long double glong){if((int)(60*(rise/15+Zone(glong)-(int)(ri se/15+Zone(glong))))<10)cout<<"The time at which the sun rises is "<<(int)(rise/15+Zone(glong))<<":0"<<(int )(60*(rise/15+Zone(glong)-(int)(rise/15+Z one(glong))))<<" .\n";else cout<<"The time at which the sun rises is "<<(int)(rise/15+Zone(glong))<<":"<<(int) (60*(rise/15+Zone(glong)-(int)(rise/15+Zo ne(glong))))<<" .\n";if((int)(60*(set/15+Zone(glong)-(int)(set /15+Zone(glong))))<10)cout<<"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<<"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";}//打印结果int main(){long double UTo=180.0; int year,month,date;long double glat,glong; int c[3];input_date(c);year=c[0];month=c[1];date=c[2];input_glat(c);glat=c[0]+c[1]/60+c[2]/3600;input_glong(c);glong=c[0]+c[1]/60+c[2]/3600;long double rise,set;rise=result_rise(UT_rise(UTo,GHA(UTo,G_su n(t_century(days(year,month,date),UTo)),e cliptic_longitude(L_sun(t_century(days(ye ar,month,date),UTo)),G_sun(t_century(days (year,month,date),UTo)))),glong,e(h,glat, sun_deviation(earth_tilt(t_century(days(y ear,month,date),UTo)),ecliptic_longitude( L_sun(t_century(days(year,month,date),UTo )),G_sun(t_century(days(year,month,date), UTo)))))),UTo,glong,glat,year,month,date);set=result_set(UT_set(UTo,GHA(UTo,G_sun(t _century(days(year,month,date),UTo)),ecli ptic_longitude(L_sun(t_century(days(year, month,date),UTo)),G_sun(t_century(days(ye ar,month,date),UTo)))),glong,e(h,glat,sun _deviation(earth_tilt(t_century(days(year ,month,date),UTo)),ecliptic_longitude(L_s un(t_century(days(year,month,date),UTo)), G_sun(t_century(days(year,month,date),UTo )))))),UTo,glong,glat,year,month,date);output(rise,set,glong);system("pause");return 0;}。
c++日出日落计算公式详细(实用版)目录1.C++语言简介2.日出日落计算公式原理3.C++实现日出日落计算公式的代码示例正文【1.C++语言简介】C++是一种通用的高级编程语言,具有高效、灵活、可移植性强等特点。
C++是 C 语言的增强版,支持面向对象编程、泛型编程等现代编程特性,广泛应用于系统编程、应用开发、游戏开发等领域。
【2.日出日落计算公式原理】日出日落计算公式主要用于计算一天中日出和日落的时间。
其原理基于地球自转和公转的运动规律,以及地理经纬度和时区等参数。
具体公式如下:日出时间 = 12 - (当前经度 - 经度 1) / 15 + 当日前一天时间日落时间 = 12 + (当前经度 - 经度 2) / 15 + 当日前一天时间其中,当前经度是指所求地点的经度,经度 1 和经度 2 分别为日出和日落时太阳所在的经度。
【3.C++实现日出日落计算公式的代码示例】以下是一个简单的 C++程序,实现日出日落计算公式的代码示例:```cpp#include <iostream>#include <cmath>#include <iomanip>using namespace std;int main() {double current_longitude, longitude1, longitude2,current_time;cout << "请输入当前地点的经度 (示例:121.47): ";cin >> current_longitude;cout << "请输入日出时太阳所在的经度 (示例:121.47): ";cin >> longitude1;cout << "请输入日落时太阳所在的经度 (示例:121.47): ";cin >> longitude2;cout << "请输入当前时间 (示例:2021-10-01 00:00:00): ";cin >> current_time;double time_difference = fabs(current_time - 24 * 60 * 60);double sunrise_time = 12 - (current_longitude - longitude1) / 15 + time_difference;double sunset_time = 12 + (current_longitude - longitude2)/ 15 + time_difference;cout << "日出时间:" << setw(2) << setprecision(2) << sunrise_time << " 时" << setw(2) << setprecision(2) << sunrise_time- int(sunrise_time) * 60 << " 分" << endl;cout << "日落时间:" << setw(2) << setprecision(2) << sunset_time << " 时" << setw(2) << setprecision(2) << sunset_time- int(sunset_time) * 60 << " 分" << endl;return 0;}```该程序通过接收用户输入的经度、日出日落时太阳所在的经度以及当前时间,计算出日出和日落的时间,并输出结果。
地区的⽇出时间是怎么算的
⾚道上永远都是6点⽇出,18点⽇落。
其它地⽅是不确定的,具体算法:⽇出时间=(24-昼长)/2;⽇落时间=⽇出时间+昼长。
或:⼀天有24⼩时,包括⽩天和⿊夜,夜长=24-昼长,⽽凌晨0:00可以看作是⿊夜的中点,⽇出时间=夜长/2,⽇落时间=24-⽇出时间。
晨昏线的判断
⼀是根据晨昏线的定义来判断:顺着地球⾃转的⽅向,由昼半球进⼊夜半球的分界线是昏线,由夜半球进⼊昼半球的分界线是晨线.
⼆是根据晨昏线与昼半球的相对位置来判断:位于昼半球西侧的晨昏线为晨线,位于昼半球东侧的晨昏线为昏线.
晨昏线总与太阳直射点、太阳两者的连线垂直.除⼆分⽇晨昏线与某条经线重合外,其他任何时候晨昏线都与经线斜交.晨昏线的移动⽅向与地球⾃转⽅向相反。
太阳升起⽅向的变化规律
春秋分都是从正东⽅升起,冬季从东南升起,夏季从东北升起。
太阳只是宇宙中⼀颗⼗分普通的恒星,但它却是太阳系的中⼼天体。
太阳系中,包含我们的地球在内的⼋⼤⾏星,彗星和其它⽆数的太阳系⼩天体,都在太阳的强⼤引⼒作⽤下环绕太阳运⾏。
太阳系的疆域庞⼤,仅以冥王星为例,其运⾏轨道距离太阳就将近40个天⽂单位,也就是60亿千⽶之遥远,⽽实际上太阳系的范围还要数⼗倍于此。
根据经纬度计算⽇出、⽇落、中天、天亮、天⿊和昼长时间Jean Meeus的《天⽂算法》(Astronomical Algorithms,2nd Edition)第⼆版中第7章第60页内有详细介绍计算儒略⽇的⽅法:设Y为给定年份,M为⽉份,D为该⽉⽇期(带⼩数,把时:分:秒折算成⽇的形式)。
运算符INT表⽰为取所给数的整数部分,也即⼩数点前的部分。
1.若M > 2,Y和M不变。
若 M =1或2,以Y–1代Y,以M+12代M。
换句话说,如果⽇期在1⽉或2⽉,则被看作是在前⼀年的13⽉或14⽉。
2.对格⾥⾼利历(即1582年10⽉15⽇以后),有A = INT(Y/100),B = 2 - A + INT(A/4).另外,对于儒略历(即1582年10⽉15⽇之前),取B=0。
3.所求的儒略⽇即为:计算的代码:import java.io.IOException;import java.util.Date;import java.util.HashMap;import java.util.Map;import java.util.Properties;public class DayTime {private static Properties propt;private static double RAD = 180.0 * 3600 / Math.PI;private static double midDayTime;private static double dawnTime;private static String codeStr = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";static {propt = new Properties();try {propt.load(DayTime.class.getClassLoader().getResourceAsStream("jwd.properties"));} catch (IOException e) {e.printStackTrace();}}@SuppressWarnings("deprecation")public static Map<DayTimeType, String> dailytime(String area) {Date date = new Date();return dailytime(area, date.getYear(), date.getMonth(), date.getDay(), 0, 0, 0,8.0);}public static Map<DayTimeType, String> dailytime(String area, int year, int month, int day, int hour, int min, int sec,double tz) {Map<DayTimeType, String> map = new HashMap<DayTimeType, String>();String jwd = decodeJWD(area);System.out.println(jwd);Double wd = (Double.parseDouble(jwd.substring(0, 2)) + Double.parseDouble(jwd.substring(2, 4)) / 60) / 180 * Math.PI;Double jd = -(Double.parseDouble(jwd.substring(4, 7)) + Double.parseDouble(jwd.substring(7)) / 60) / 180 * Math.PI;double richu = timeToDouble(year, month, day, hour, min, sec) - 2451544.5;for (int i = 0; i < 10; i++)richu = sunRiseTime(richu, jd, wd, tz / 24);// 逐步逼近法算10次// ⽇出map.put(DayTimeType.SUNRISE, doubleToStr(richu));// ⽇落map.put(DayTimeType.SUNSET, doubleToStr(midDayTime + midDayTime - richu));// 中天map.put(DayTimeType.MIDTIME, doubleToStr(midDayTime));// 天亮map.put(DayTimeType.DAWNTIME, doubleToStr(dawnTime));// 天⿊map.put(DayTimeType.NIGHTTIME, doubleToStr(midDayTime + midDayTime - dawnTime));// 昼长map.put(DayTimeType.DAYTIME, doubleToStr((midDayTime - dawnTime) * 2 - 0.5));return map;}// 加密public static String decodeJWD(String encode) {StringBuilder jwd = new StringBuilder();for (int i = 0; i < 4; i++)if (2 == i)jwd.append(String.format("%03d", codeStr.indexOf(encode.charAt(i)) + 73));elsejwd.append(String.format("%02d", codeStr.indexOf(encode.charAt(i))));return jwd.toString();}// 解密public static String encodeJWD(Integer decode) {StringBuilder jwd = new StringBuilder();int i = 230811316;int ge = i % 100;int shi = i % 100000 - ge;int bai = i % 10000000 - shi;int qian = i % 1000000000 - bai;shi = shi / 100 - 73;qian = qian / 10000000;jwd.append(codeStr.charAt(qian)).append(codeStr.charAt(bai)).append(codeStr.charAt(shi)).append(codeStr.charAt(ge));return jwd.toString();}/**** @param date* 儒略⽇平午* @param lo* 地理经度* @param la* 地理纬度* @param tz* 时区* @return太阳升起时间*/public static Double sunRiseTime(double date, double lo, double la, double tz) {date = date - tz;// 太阳黄经以及它的正余弦值double t = date / 36525;double j = sunHJ(t);// 太阳黄经以及它的正余弦值double sinJ = Math.sin(j);double cosJ = Math.cos(j);// 其中2*PI*(0.7790572732640 + 1.00273781191135448*jd)恒星时(⼦午圈位置)double gst = 2 * Math.PI * (0.779057273264 + 1.00273781191135 * date) + (0.014506 + 4612.15739966 * t + 1.39667721 * t * t) / RAD;double E = (84381.406 - 46.836769 * t) / RAD; // 黄⾚交⾓double a = Math.atan2(sinJ * Math.cos(E), cosJ);// '太阳⾚经double D = Math.asin(Math.sin(E) * sinJ); // 太阳⾚纬double cosH0 = (Math.sin(-50 * 60 / RAD) - Math.sin(la) * Math.sin(D)) / (Math.cos(la) * Math.cos(D)); // ⽇出的时⾓计算,地平线下50分double cosH1 = (Math.sin(-6 * 3600 / RAD) - Math.sin(la) * Math.sin(D)) / (Math.cos(la) * Math.cos(D)); // 天亮的时⾓计算,地平线下6度,若为航海请改为地平线下12度// 严格应当区分极昼极夜,本程序不算if (cosH0 >= 1 || cosH0 <= -1)return -0.5;// 极昼double H0 = -Math.acos(cosH0); // 升点时⾓(⽇出)若去掉负号就是降点时⾓,也可以利⽤中天和升点计算double H1 = -Math.acos(cosH1);double H = gst - lo - a; // 太阳时⾓midDayTime = date - degree(H) / Math.PI / 2 + tz; // 中天时间dawnTime = date - degree(H - H1) / Math.PI / 2 + tz;// 天亮时间return date - degree(H - H0) / Math.PI / 2 + tz; // ⽇出时间,函数返回值}/*** 保证⾓度∈(-π,π)** @param ag* @return ag*/public static Double degree(double ag) {ag = mod(ag, 2 * Math.PI);return ag <= -Math.PI ? ag + 2 * Math.PI : ag > Math.PI ? ag - 2 * Math.PI : ag;}public static Double mod(double num1, double num2) {num2 = Math.abs(num2);// 只是取决于Num1的符号return num1 >= 0 ? num1 - ((int) (num1 / num2)) * num2 : ((int) (Math.abs(num1) / num2)) * num2 - Math.abs(num1);}/*** @param t* 儒略世纪数* @return太阳黄经*/public static Double sunHJ(double t) {t = t + (32.0 * (t + 1.8) * (t + 1.8) - 20) / 86400.0 / 36525.0;// 儒略世纪年数,⼒学时double j = 48950621.66 + 6283319653.318 * t + 53 * t * t - 994 + 334166 * Math.cos(4.669257 + 628.307585 * t) + 3489 * Math.cos(4.6261 + 1256.61517 * t) + 2060.6 * Math.cos(2.67823 + 628.307585 * t) * t;return j / 10000000;}/*** 儒略⽇的计算** @param y* 年* @param M* ⽉* @param d* ⽇* @param h* ⼩时* @param m* 分* @param s* 秒* @return int*/public static int timeToDouble(int y, int M, int d, int h, int m, int s) {double time = 0;if (M <= 2) {M += 12;y -= 1;}if (y * 372 + M * 31 + d >= 588829) {time = (int) (y / 100);time = 2 - time + (int) (time / 4);}time += (int) Math.round(365.25 * (y + 4716) + 0.01) + (int) (30.60001 * (M + 1)) + d + (h * 3600 + m * 60 + s) / (24 * 3600) - 1524.5;return (int) Math.round(time);}public static String doubleToStr(double time) {double t = time + 0.5;t = (t - (int) t) * 24;t = (t - h) * 60;int m = (int) t;t = (t - m) * 60;int s = (int) t;return h + ":" + m + ":" + s;}public static void main(String[] args) {// System.out.println(decodeJWD("N3dS肇庆"));// String jwd = decodeJWD("N3dS肇庆");// Double wd = (Double.parseDouble(jwd.substring(0, 2)) +// Double.parseDouble(jwd.substring(2, 4)) / 60) / 180 * Math.PI;// Double jd = -(Double.parseDouble(jwd.substring(4, 7)) +// Double.parseDouble(jwd.substring(7)) / 60) / 180 * Math.PI;// double richu = timeToDouble(2012, 6, 25, 0, 0, 0) - 2451544.5;// System.out.println(richu + " " + timeToDouble(2012, 6, 25, 0, 0, 0));// richu = sunRiseTime(richu, jd, wd, 8.0 / 24);// System.out.println(richu);// richu = sunRiseTime(richu, jd, wd, 8.0 / 24);// 逐步逼近法算两次// System.out.println(doubleToStr(richu));String t = "03";System.out.println(Integer.parseInt(t));System.out.println(propt.getProperty("HI"));String[] strs = propt.getProperty("HI").split(" ");for (int i = 1; i < strs.length; i++) {System.out.println(strs[i] + " ⽇出 " + dailytime(strs[i]).get(DayTimeType.SUNRISE)); System.out.println(strs[i] + " ⽇落" + dailytime(strs[i]).get(DayTimeType.SUNSET));System.out.println(strs[i] + " 中天" + dailytime(strs[i]).get(DayTimeType.MIDTIME)); System.out.println(strs[i] + " 天亮" + dailytime(strs[i]).get(DayTimeType.DAWNTIME)); System.out.println(strs[i] + " 天⿊" + dailytime(strs[i]).get(DayTimeType.NIGHTTIME)); System.out.println(strs[i] + " 昼长" + dailytime(strs[i]).get(DayTimeType.DAYTIME)); }System.out.println(encodeJWD(230811316));}}枚举类型:public enum DayTimeType {SUNRISE, SUNSET, MIDTIME, DAWNTIME, NIGHTTIME, DAYTIME}中国各个地区经纬度数据:。
昼夜长短的季节变化教学设计一、设计思路地理是一门研究人类活动与地理环境的学科,我们生活中到处都有各种地理现象。
当前学生的地理学习仅仅注重书本知识,脱离实际,一味地为了应付升学而被动学习,无法将知识与现实生活联系起来。
高中地理必修一学习了地球运动产生了昼夜长短的季节变化,在生活中我们能够知道不同季节日出日落时间会发生变化,今天我们就来研究一个地方不同季节昼夜长短的变化规律与计算方法。
二、教材分析:地球围绕太阳公转,使太阳直射点在地球表面不停的做周期性的运动,从而使得不同纬度的地区不同季节昼夜长短不同,日出日落时间,这是地理必修一的一个难点,学生一方面要掌握规律,最主要的是要结合实际生活,理解规律,并且能够灵活应用,达到学以致用的目的。
三、学生情况分析:由于高一年级15级文科班学生我没有带他们的课程,所以具体情况不清楚,但是通过高二教学中的表现,发现他们的基础非常差劲,同时由于自然地理的难度较大,所以在教学中要联系实际,接近生活,让同学们从理性认识转变为感性认识,养成一切联系生活实际的好习惯。
四、教学目标三维目标『知识与技能』1.联系生活实际,理解昼夜长短的变化。
2.比较不同季节的昼夜长短时间,掌握昼夜长短的计算方法。
『过程与方法』1.记录当地一年四季日出日落时间,总结昼夜长短的变化。
2.通过小组讨论,互相交流,总结计算昼夜长短时间的方法。
『情感态度与价值观』能够运用所学地理知识解释生活中的一些地理现象,做到联系生活实际,一切从生活实际出发,注重生活经验,并用知识指导生活实践,激发学习地理的兴趣,培养发现问题、分析问题、解决问题的能力,树立正确的人地思想,走可持续发展道路。
教学重点昼夜长短时间的变化规律教学难点昼夜长短时间的计算方法教学方法:提问式、小组讨论式、讲授式教学手段:多媒体课件课时安排:1课时五、教学过程:导入:老师:同学们,每天的太阳从哪个方向升起来?学生回答:东方。