二十四节气算法怎么算的

27177人阅读
编程语言(17)
算法系列(37)
C/C++(19)
读书笔记(13)
&&&&&&& 二十四节气在中国古代历法中扮演着非常重要的角色,本文将介绍二十四节气的基本知识,以及如何使用VSOP82/87行星运行理论计算二十四节气发生的准确时间。&&&&&&& 中国古代历法都是以月亮运行规律为主,严格按照朔望月长度定义月,但是由于朔望月长度和地球回归年长度无法协调,会导致农历季节和天气的实际冷暖无法对应,因此聪明的古人将月亮运行规律和太阳运行规律相结合制定了中国农历的历法规则。在这种特殊的阴阳结合的历法规则中,二十四节气就扮演着非常重要的作用,它是联系月亮运行规律和太阳运行规律的纽带。正是由于二十四节气结合置闰规则,使得农历的春夏秋冬四季和地球绕太阳运动引起的天气冷暖变化相一致,成为中国几千年来生产、生活的依据。&&&&&&& 二十四节气起源于中国黄河流域。远在春秋时代,古人就开始使用仲春、仲夏、仲秋和仲冬四个节气指导农耕种植。后来经过不断地改进与完善,到秦汉年间,二十四节气已经基本确立。公元前年,汉武帝颁布由邓平等人制定的《太初历》,正式把二十四节气订于历法,明确了二十四节气的天文位置。二十四节气天文位置的定义,就是从太阳黄经零度开始,沿黄经每运行度所经历的时日称为“一个节气”。太阳一个回归年运行度,共经历个节气,每个公历月对应个节气。其中,每月第一个节气为“节令”,即:立春、惊蛰、清明、立夏、芒种、小暑、立秋、白露、寒露、立冬、大雪和小寒等个节令;每月的第二个节气为“中气”,即:雨水、春分、谷雨、小满、夏至、大暑、处暑、秋分、霜降、小雪、冬至和大寒等个中气。“节令”和“中气”交替出现,各历时天,人们习惯上把“节令”和“中气”统称为“节气”。&&&&&&& 为了更好地理解二十四节气的天文位置,首先要解释几个天文学概念。“天球”是人们为了研究天体的位置和运动规律而引入的一个假象的球体,根据观察点(也就是球心)的位置不同,可分为“日心天球”、“地心天球”等等。图()就是天球概念的一个简单示意图:图()天球概念示意图&天文学中常用的一个坐标体系就是“地心天球”,它与地球同心且有相同的自传轴,理论上具有无限大的半径。地球的赤道和南北极点延伸到天球上,对应着天赤道和南北天极点。和地球上用经纬度定为位置一样,天球也划分了经纬度,分别命名为“赤经”和“赤纬”,地球上的经度用的是度(分秒)为单位,赤经以时(分秒)为单位。天空中的所有天体都可以投射到天球上,用赤经和赤纬定为天体在天球上的位置。“黄道(Ecliptic)”是地球绕太阳公转轨道的轨道平面与天球(地心天球)相交的大圆,由于地球公转受月球和其它行星的摄动,地球的公转轨道并不是严格的平面,因此黄道的严格定义是:地月系质心绕太阳公转的瞬时平均轨道平面与天球相交的大圆。黄道和天赤道所在的两个平面并不是重叠的,它们之间存在一个度分的交角,称为“黄赤交角”。由于黄赤交角的存在,黄道和天赤道就在天球上有两个交点,这两个交点就是春分点和秋分点。在天球上以黄道为基圈可以形成黄道坐标系,在黄道坐标系中,也使用了经纬度的概念,分别称为“黄经”和“黄纬”。天体的黄经从春分点起沿黄道向东计量,春分点是黄经度,沿黄道一周是度,使用的单位是度、分和秒。黄纬以黄道测量平面为准,向北记为度到度,向南记为度到度。&&&&&&& 黄道平面可以近似理解为地球绕太阳公转的平面,以黄道为基圈的黄道坐标系根据观测中心是太阳还是地球还可以区分为日心坐标系和地心坐标系,对应天体的黄道坐标分别被称为“日心黄经、日心黄纬”和“地心黄经、地心黄纬”。日心黄经和日心黄纬比较容易理解,因为太阳系的行星都是绕太阳公转,以太阳为中心将这些行星向天球上投影是最简单的确定行星位置关系的做法。但是人类自古观察太阳的周年运动,都是以地球为参照,以太阳的周年视运动位置来计算太阳的运行轨迹,使用的其实都是地心黄经和地心黄纬,要了解古代历法,理解这一点非常重要。图()就解释了造成这种视觉错觉的原因:图(2)太阳黄道视觉位置原理图&&&&&&& 古人定义二十四节气的位置,是太阳沿着黄道运行时的视觉位置,每个节气对应的黄道经度其实是地心黄经。从图()可以看出日心黄经和地心黄经存在度的转换关系,同样可以理解,日心黄纬和地心黄纬在方向上是反的,因此可以很方便地将两类坐标相互转换,转换公式是:太阳地心黄经地球日心黄经°&&&&&&&&&&&&&&&&& (3.1式)太阳地心黄纬 = -地球日心黄纬&&&&&&&&&&&&&&&&&&&&&&&& (3.2式)&&&&&&& 了解了以上的天文学基础之后,就可以着手对二十四节气的发生时间进行计算。我们常说的节气发生时间,其实就是在太阳沿着黄道做视觉运动过程中,当太阳地心黄经等于某个节气黄经度数时的那个瞬间的时间。所谓的用天文算法计算二十四节气时间,就是根据牛顿力学原理或开普勒三大行星定律,计算出与历法密切相关的地球、太阳和月亮三个天体的运行轨道和时间参数,以此得出当这些天体位于某个位置时的时间。这样的天文计算需要计算者有扎实的微积分学、几何学和球面三角学知识,令广大天文爱好者望而却步。但是随着VSOP-82/87行星理论以及ELP-2000/82月球理论的出现,使得天文计算变得简单易行,本文就是以VSOP-82/87行星理论为计算依据,计算二十四节气的准确时间。&&&&&&& 古代天文学家在对包括地球和月亮在内的行星运行轨道精确计算后发现,天体的运行因为受相近天体的影响,并不严格遵循理论方法计算出来的轨道,而是在理论轨道附近波动。这种影响在天文学上被称为摄动,摄动很难被精确计算,只能根据经验估算。但是经过长期的观测和计算,天文学家发现行星轨道因为摄动影响而产生的波动其实也是有规律的,即在相当长的时间内呈现出周期变化的趋势。于是天文学家开始研究这种周期变化,希望通过一种类似曲线拟合的方法,对一些周期计算项按照某种计算式迭代求和计算代替积分计算来模拟行星运行轨迹。这种计算式可以描述为:a + bt + ct2 + … xcos(p + qt + rt2 + …),其中是时间参数,这样的理论通常被称为半解析(semi-analytic)理论。其实早在十八世纪,欧洲学者Joseph Louis Lagrange就开始尝试用这种周期项计算的方法修正行星轨道,但是他采用的周期项计算式是线性方程,精度不高。年,P.Bretagnon公开发表了VSOP行星理论(这个理论的英文名称是:Secular Variations of the Planetary Orbits,VSOP的缩写其实是源于法文名称:Variations Séculaires des Orbites Planétaires),VSOP理论是一个描述太阳系行星轨道在相当长时间范围内周期变化的半分析(semi-analytic)理论。VSOP82理论是VSOP理论的第一个版本,提供了对太阳系几大行星位置计算的周期序列,通过对周期序列进行正弦或余弦项累加求和,就可以得到这个行星在给定时间的轨道参数。不过VSOP82由于每次都会计算出全部超高精度的轨道参数,这些轨道参数对于历法计算这样的民用场合很不适用。年,Bretagnon 和 Francou 创建了VSOP87行星理论,VSOP87行星理论不仅能计算各种精密的轨道参数,还可以直接计算出行星的位置,行星位置可以是各种坐标系,包括黄道坐标系。VSOP87行星理论由6张周期项系数表组成,分别是VSOP87、VSOP87A、VSOP87B、VSOP87C、VSOP87D和VSOP87E,其中VSOP87D表可以直接计算行星日心黄经(L)、日心黄纬(B)和到太阳的距离(R),此表计算出的结果适用于节气位置判断。&&&&&&& VSOP87D表包含了三部分数据,分别是计算行星日心黄经的周期项系数表(L表)、计算行星日心黄纬的周期项系数表(B表)和计算行星和太阳距离的周期项系数表(R表)。VSOP87D表有太阳系8大行星的数据,本文的计算只关心与地球相关的数据。L表由L0-L5六部分组成,每一部分都包含若干个周期项系数条目,比如L0表有559个周期项系数条目,L1表有341个条目等等。L表的每个周期项系数条目包含若干个参数,用于计算各种轨道参数和位置参数,计算地球的日心黄经只需要用到其中三个系数。计算所有的周期项系数并不是必须的,有时候减少一些系数比较小的周期项可以减少计算所花费的时间,当然,这会牺牲一点精度。假设计算地球日心黄经的三个系数是A、B和C,则每个周期项的计算表达式是:A * cos(B + C)&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&(3.3式)&其中是儒略千年数,的计算公式如下:&&&&&&&&&&&&&&&& &&&&(3.4式)&JDE是计算轨道参数的时间,单位是儒略日,是公元日 12时的儒略日数,关于儒略日的概念,请参考“日历生成算法”的第一篇《中国公历(格里历)》中的说明以及计算方法。以L0表的第二个周期项为例,这个周期项数据中与日心黄经计算有关的三个系数分别是A= ,B=4.,C=9140,则第二个周期项的计算方法是: * cos(4. + 914 * τ)。对L0表的各项分别计算后求和可得到L0表周期项总和L0,对L表的其它几个部分使用相同的方法计算周期项和,可以得到L1、L2、L3、L4和L5,然后用用3.5式计算出最终的地球日心黄经,单位是弧度:&&&&&&&&&(3.5式)&用同样的方法对地球日心黄纬的周期项系数表和计算行星和太阳距离的周期项系数表计算求和,可以得到地球日心黄纬B和日地距离R,B的单位是弧度,R的单位是天文单位(AU)[1]。由于3.5式的计算方法需要多次计算的乘方,浮点数的乘方计算的速度比较慢,实际计算时,通常对3.5式进行变换,用乘法和加法代替直接的乘方计算,这是一种常用的转换:&(式)&本文就是使用3.6式代替3.5式进行计算。&&&&&&& VSOP82/87行星理论中的周期项系数对不同的行星具有不同的精度,对地球来说,在年之间的200年跨度期间,计算精度是0.005&。前文曾说过,对于不需要这么高精度的计算应用时,可以适当减少一些系数比较小的周期项,减少计算量,提高计算速度。Jean Meeus在他的《天文算法》一书中就给出了一套精简后的VSOP87D表的周期项,将计算地球黄经的L0表由原来的559项精简到64项,计算地球黄纬的B0表甚至被精简到只有5项,从实际效果看,计算精度下降并不多,但是极大地减少了计算量。&&&&&&& 使用VSOP87D周期项系数表计算得到的是J2000.0平黄道和平春分点(mean dynamic ecliptic and equinox)为基准的日心黄经(L)和日心黄纬(B),其值与标准FK5系统略有差别,如果对精度要求很高可以采用下面的方法将计算得到的日心黄经(L)和日心黄纬(B)转到FK5系统[2]:首先然后&L',单位是度:&L' = L - 1.397 * T - 0.00031*T2&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&(3.7式)&3.7式中的T是儒略世纪数,它与儒略千年数的关系是:T = 10 *。然后使用L'计算L和B的修正值ΔL和ΔB:&ΔL = -0.09033 + 0.03916 * ( cos(L') + sin(L') ) * tan(B)&&&&&&&&&&&& (3.8式)&ΔB = +0.03916 * ( cos(L') - sin(L') ) &&&&&&&&&&&&&&&&&&&&&&&&&&&&(3.9式)&&ΔL和ΔB的单位都是&,是度分秒角度单位体系,需要将3.6式计算出得L和B转换成以度(°)为单位的值后再进行修正。&&&&&&& CalcSunEclipticLongitudeEC()函数就是使用VSOP87行星理论计算行星日心黄经的代码实现,整个计算过程和前文描述一样,首先根据VSOP87D表的数据计算出L0-L5,然后用3.6式计算出地球的日心黄经,3.6式计算出来的单位是弧度,因此转换成度分秒单位,最后使用3.1式将结果转换成太阳的地心黄经:&double CalcSunEclipticLongitudeEC(double dt)&{&&&& double L0 = CalcPeriodicTerm(Earth_L0, sizeof(Earth_L0) / sizeof(VSOP87_COEFFICIENT), dt);&&&& double L1 = CalcPeriodicTerm(Earth_L1, sizeof(Earth_L1) / sizeof(VSOP87_COEFFICIENT), dt);&&&& double L2 = CalcPeriodicTerm(Earth_L2, sizeof(Earth_L2) / sizeof(VSOP87_COEFFICIENT), dt);&&&& double L3 = CalcPeriodicTerm(Earth_L3, sizeof(Earth_L3) / sizeof(VSOP87_COEFFICIENT), dt);&&&& double L4 = CalcPeriodicTerm(Earth_L4, sizeof(Earth_L4) / sizeof(VSOP87_COEFFICIENT), dt);&&&& double L5 = CalcPeriodicTerm(Earth_L5, sizeof(Earth_L5) / sizeof(VSOP87_COEFFICIENT), dt);&&&&& double L = (((((L5 * dt + L4) * dt + L3) * dt + L2) * dt + L1) * dt + L0) / ;&&&&& /*地心黄经 = 日心黄经 + 180度*/&&&& return (Mod360Degree(Mod360Degree(L / RADIAN_PER_ANGLE) + 180.0));&}Mod360Degree()函数将大于360°或小于0°的值调整到0-360°之间,便于转换显示。CalcPeriodicTerm()函数使用3.3式对一个周期项系数表进行求和计算,可以指定需要计算的周期项数:&double CalcPeriodicTerm(const VSOP87_COEFFICIENT *coff, int count, double dt)&{&&&& double val = 0.0;&&&&& for(int i = 0; i & count; i++)&&&& &&& val += (coff[i].A * cos((coff[i].B + coff[i].C * dt)));&&&&& return val;&}同样的方法计算太阳的地心黄纬:&double CalcSunEclipticLatitudeEC(double dt)&{&&&& double B0 = CalcPeriodicTerm(Earth_B0, sizeof(Earth_B0) / sizeof(VSOP87_COEFFICIENT), dt);&&&& double B1 = CalcPeriodicTerm(Earth_B1, sizeof(Earth_B1) / sizeof(VSOP87_COEFFICIENT), dt);&&&& double B2 = CalcPeriodicTerm(Earth_B2, sizeof(Earth_B2) / sizeof(VSOP87_COEFFICIENT), dt);&&&& double B3 = CalcPeriodicTerm(Earth_B3, sizeof(Earth_B3) / sizeof(VSOP87_COEFFICIENT), dt);&&&& double B4 = CalcPeriodicTerm(Earth_B4, sizeof(Earth_B4) / sizeof(VSOP87_COEFFICIENT), dt);&&&&& double B = (((((B4 * dt) + B3) * dt + B2) * dt + B1) * dt + B0) / ;&&&& /*地心黄纬 = -日心黄纬*/&&& return -(B / RADIAN_PER_ANGLE);&}AdjustSunEclipticLongitudeEC()函数根据3.8式计算黄经的修正量,longitude和latitude参数是由VSOP87理论计算出的太阳地心黄经和地心黄纬,单位是度,dt是儒略千年数,返回值单位是度:&double AdjustSunEclipticLongitudeEC(double dt, double longitude, double latitude)&{&&&& double T = dt * 10; //T是儒略世纪数&&&&& double dbLdash = longitude - 1.397 * T - 0.00031 * T * T;&&&&& // 转换为弧度&&&& dbLdash *= RADIAN_PER_ANGLE;&&&&& return (-0.09033 + 0.03916 * (cos(dbLdash) + sin(dbLdash)) * tan(latitude * RADIAN_PER_ANGLE)) / 3600.0;&}经过上述计算转换得到坐标值是理论值,或者说是天体的几何位置,但是系统是一个目视系统,也就是说体现的是人眼睛观察效果(光学位置),这就需要根据地球的物理环境、大气环境等信息做进一步的修正,使其和人类从地球上观察星体的观测结果一致。【下篇将介绍修正理论和修正算法,请继续关注】&&小知识:天文单位天文单位(英文:,简写)是一个长度的单位,约等于地球跟太阳的平均距离。天文单位是天文常数之一,是天文学中测量距离,特别是测量太阳系内天体之间的距离的基本单位。地球到太阳的平均距离大约为一个天文单位,约等于亿千米。年,国际天文学联会把一天文单位定义为一颗质量可忽略、公转轨道不受干扰而且公转周期为日(即一高斯年)的粒子与一个质量相等约一个太阳的物体的距离。当前普遍被接受并使用的天文单位的值是±米(约一亿五千万公里)。小知识:系统常用的目视星表系统,又称第五基本星表,是在(第四基本星表)的基础上发展出来的,对星表进行了修正,于年正式启用。它定义了一个以太阳质心为中心,平赤道和春分点为基准的天球平赤道坐标系。近年来国际上又编制了星表(第六基本星表),但是还没有被正式启用。&&
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1341583次
积分:13639
积分:13639
排名:第741名
原创:104篇
译文:12篇
评论:1168条
阅读:61264
文章:31篇
阅读:747209
(2)(1)(1)(2)(1)(2)(1)(1)(1)(1)(1)(2)(1)(1)(2)(1)(1)(5)(2)(4)(1)(1)(5)(1)(1)(2)(3)(1)(1)(1)(1)(1)(3)(1)(1)(5)(1)(1)(1)(1)(3)(1)(1)(2)(1)(1)(2)(3)(1)(3)(2)(3)(8)(8)(1)(2)(2)(1)(5)20世纪至22世纪二十四节气的计算公式
立春日期的计算
  计算公式:[Y*D+C]-L
  公式解读:年数的后2位乘0.取整数减闰年数。20世纪C值4.6295, 21世纪C值=3.87,22世纪C值=4.15。
  举例说明:2058年立春日期的计算步骤[58&.0.]-[(58-1)/4]=17-14=3,则2月3日立春。
雨水日期的计算 [Y*D+C]-L
  公式解读:年数的后2位乘0.取整数减闰年数。21世纪雨水的C值18.73。
  举例说明:2008年雨水日期=[8&.0.]-[(8-1)/4]=20-1=19,2月19日雨水。
  例外:2026年计算得出的雨水日期应调减一天为18日。
惊蛰日期的计算 [Y*D+C]-L
  公式解读:年数的后2位乘0.取整数减闰年数。21世纪惊蛰的C值=5.63。
  举例说明:2088年惊蛰日期=[88&.0.]-[88/4]=26-22=4,3月4日是惊蛰。
  例外:无。
春分日期的计算 [Y*D+C]-L
  公式解读:年数的后2位乘0.取整数减闰年数。21世纪春分的C值=20.646。
  举例说明:2092年春分日期=[92&.0.]-[92/4]=42-23=19,3月19日是春分。
  例外:2084年的计算结果加1日。
清明节日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=4.81,20世纪=5.59。
  举例说明:2088年清明日期=[88&.0.]-[88/4]=26-22=4,4月4日是清明。
  例外:无。
谷雨节日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=20.1,20世纪=20.888。
  举例说明:2088年谷雨日期=[88&.0.]-[88/4]=41-22=19,4月19日是谷雨。
  例外:无。
立夏日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=5.52,20世纪=6.318。
  举例说明:2088年立夏日期=[88&.0.]-[88/4]=26-22=4,5月4日是立夏。
  例外:1911年的计算结果加1日。
小满日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=21.04,20世纪=21.86。
  举例说明:2088年小满日期=[88&.0.]-[88/4]=42-22=20,5月20日小满。
  例外:2008年的计算结果加1日。
芒种日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=5.678,20世纪=6.5。
  举例说明:2088年芒种日期=[88&.0.]-[88/4]=26-22=4,6月4日芒种。
  例外:1902年的计算结果加1日。
夏至日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=21.37,20世纪=22.20。
  举例说明:2088年夏至日期=[88&.0.]-[88/4]=42-22=20,6月20日夏至。
  例外:1928年的计算结果加1日。
小暑日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=7.108,20世纪=7.928。
  举例说明:2088年小暑日期= [88&0.]-[88/4]=28-22=6,7月6日是小暑。
  例外:1925年和2016年的计算结果加1日。
大暑日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=22.83,20世纪=23.65。
  举例说明:2088年大暑日期= [88&0.]-[88/4]=44-22=22,7月22日大暑。
  例外:1922年的计算结果加1日。
立秋日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=7.5,20世纪=8.35。
  举例说明:2088年立秋日期=[88&0.]-[88/4]=28-22=6,8月6日是立秋。
  例外:2002年的计算结果加1日。
处暑日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=23.13,20世纪=23.95。
  举例说明:2088年处暑日期=[88&0.]-[88/4]=44-22=22,8月22日处暑。
  例外:无。
白露日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=7.646,20世纪=8.44。
  举例说明:2088年白露日期=[88&0.]-[88/4]=28-22=6,9月6日是白露。
  例外:1927年的计算结果加1日。
秋分日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=23.042,20世纪=23.822。
  举例说明:2088年秋分日期=[8&.0.]-[88/4]=44-22=22,9月22日是秋分。
  例外:1942年的计算结果加1日。
寒露日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=8.318,20世纪=9.098。
  举例说明:2088年寒露日期=[88&0.]-[88/4]=29-22=7,10月7日是寒露。
  例外:无。
霜降日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=23.438,20世纪=24.218。
  举例说明:2088年霜降日期=[88&0.]-[88/4]=44-22=22,10月22日霜降。
  例外:2089年的计算结果加1日。
立冬日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=7.438,20世纪=8.218。
  举例说明:2088年立冬日期=[88&0.]-[88/4]=28-22=6,11月6日是立冬。
  例外:2089年的计算结果加1日。
小雪日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=22.36,20世纪=23.08。
  举例说明:2088年小雪日期=[88&0.]-[88/4]=43-22=21,11月21日小雪。
  例外:1978年的计算结果加1日。
大雪日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=7.18,20世纪=7.9。
  举例说明:2088年大雪日期=[88&0.]-[88/4]=28-22=6,12月6日大雪。
  例外:1954年的计算结果加1日。
冬至日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=21.94,20世纪=22.60。
  举例说明:2088年冬至日期=[88&0.]-[88/4]=43-22=21,12月21日冬至。
  例外:1918年和2021年的计算结果减1日。
小寒日期的计算 [Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=5.4055,20世纪=6.11。
  举例说明:1988年小寒日期=[88&.0.]-[(88-1)/4]=27-21=6,1月6日小寒。
  例外:1982年计算结果加1日,2019年减1日。
大寒日期的计算 [Y*D+C]-L
  公式解读:Y=年数的后2位,D=0.2422,L=闰年数,21世纪C=20.12,20世纪C=20.84。
  举例说明:2089年大寒日期=[89&0.]-[(89-1)/4]=41-22=19,1月19日大寒。
  例外:2082年的计算结果加1日,20世纪无。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。当前位置:
2017夏至节气怎么计算 2017夏至节气是几号
  导语:夏至节也就是夏至节气的时候,夏至的时候也是一年当中白昼最长的时候,也是一年中日照最充足的时候。在古代人们在夏至节还会通过祭神来祈求灾消年丰。那么2017夏至节气怎么计算?2017夏至节气是几号?想了解夏至的就随小编去看看吧。
  2017夏至节气怎么计算
  公式:[Y*D+C]-L
  公式解读:Y=年数后2位,D=0.2422,L=闰年数,21世纪C=21.37,20世纪=22.20。
  举例说明:2088年夏至日期=[88&0.]-[88/4]=42-22=20,6月20日夏至。
  例外:1928年的计算结果加1日。
  2017夏至节气是几号
  从日历上我们可以看到2017年夏至的时间是:日 (农历五月廿七)星期三
  什么是夏至
  夏至是二十四节气中最早被确定的节气之一。每年阳历的6月21日或22日,太阳到达黄经90度时,为夏至日。&至&是&极&的意思,夏至也叫&日长至&。过了夏至,太阳的直射点逐渐往南移动,北半球的白天就会一天比一天短,夜晚一天比一天长。
  要说夏至时吃什么蔬果最好,其中苦瓜是位列前面的,苦瓜具有清热的作用,最是适合夏至的时候食用了。以上是小编为大家整理的内容&2017夏至节气怎么计算 2017夏至节气是几号&。欲了解更多大寒习俗、养生、食谱请点击》》》
  文章由万年历频道(/)原创,禁止转载!
  猜你想看
相关文章推荐
··········
··········
本周热文推荐
··········二十四节气计算公式_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
二十四节气计算公式
上传于|0|0|文档简介
&&二十四节气对人民的作息时间影响很大,所以人们应该根据二十四节气来学会养生。
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢算法系列(十八) 用天文方法计算二十四节气(下) - 数据结构与算法 - 编程入门网
算法系列(十八) 用天文方法计算二十四节气(下)
【接上篇】
经过上述计算转换得到坐标值是理论值,或者说是天体的几何位置,但是FK5系统 是一个目视系统,也就是说体现的是人眼睛观察效果(光学位置),这就需要根据地球的物理环境、大气 环境等信息做进一步的修正,使其和人类从地球上观察星体的观测结果一致。
首先需要进行章动 修正。章动是指地球沿自转轴的指向绕黄道极缓慢旋转过程中,由于地球上物质分布不均匀性和月球及其 它行星的摄动力造成的轻微抖动。英国天文学家詹姆斯&布拉德利()最早发现了章动,章动可 以沿着黄道分解为水平分量和垂直分量,黄道上的水平分量记为&D&,称为黄经章动,它影响了天球上所 有天体的经度。黄道上的垂直分量记为&D&,称为交角章动,它影响了黄赤交角。目前编制天文年历所依 据的章动理论是伍拉德在1953年建立的,它是以刚体地球模型为基础的。1977年,国际天文联合会的一个 专家小组建议采用非刚体地球模型DD莫洛坚斯基II模型代替刚体地球模型计算章动,1979年的国际天文 学联合会第十七届大会正式通过了这一建议,并决定于1984年正式实施。
地球章动主要是月球运 动引起的,也具有一定的周期性,可以描述为一些周期项的和,主要项的周期是6798.4日(18.6年),但其 它项是一些短周期项(小于10天)。本文采用的计算方法取自国际天文联合会的IAU1980章动理论,周期项 系数数据来源于《天文算法》一书第21章的表21-A,该表忽略了IAU1980章动理论中系数小于 0.0003&的周期项,因此只有63项。每个周期项包括计算黄经章动(&D&)的正弦系数(相位内项系 数)、计算交角章动的(&D&)余弦系数(相位外项系数)以及计算辐角的5个基本角距(M、M'、D 、F、&O)的线性组合系数。5个基本角距的计算公式是:
平距角(日月对地心的角距离):
D = 297.85036 + 480 * T - 0.0019142 * T2 + T3 / 189474 & & & &( 3.10式)
太阳(地球)平近点角:
M = 357.52772 +
* T - 0.0001603 * T2 - T3 / 300000 & & & & (3.11式)
月球平近点角
M'= 134.96298 + 398 * T + 0.0086972 * T2 + T3 / 56250 & & & & (3.12式)
月球纬度参数:
F = 93.27191 + 538 * T - 0.0036825 * T2 + T3 / 327270 & & & & &(3.13式)
黄道与月球平轨道升交点黄经:
&O= 125.04452 -
* T + 0.0020708 * T2 + T3 / 450000 & & & & & &(3.14式)
以上各式中的T是儒略世纪数,计算出来的5个基本角距的单位都是度, 在计算正弦或余弦时要转换为弧度单位。计算每一个周期项的黄经章动过程是这样的,首先将3.10-3.14 式计算出来的值与对应的5个基本角距系数组合,计算出辐角。以本文使用的章动周期项系数表中的第七 项为例,5个基本角距对应的系数分别是1、0、-2、2和2,辐角&的值就是:-2D + M + 2F + 2&O。计算 出辐角后就可以计算周期项的值:
S = (S1+ S2 * T) * sin(&) & & & & & & & & & & & & &(3.15式)
仍以第七项为 例,S的值就是(-517 + 1.2 * T)* sin(&)。对每一项的值S累加就可得到黄经章动,单位是 0.0001&。交角章动的计算方法与黄经章动的计算类似,辐角&的值是一样的,只是计算章动使用的 是余弦系数:
C = (C1 + C2 * T) * cos(&) & & & & & & & & & & & & &(3.16式)
CalcEarthLongitudeNutation ()函数就是计算黄经章动的实现代码:
double CalcEarthLongitudeNutation(double dt)
double T = dt * 10;
double D,M,Mp,F,O
GetEarthNutationParameter(dt, &D, &M, &Mp, &F, &Omega);
double resulte = 0.0 ;
for(int i = 0; i & sizeof(nutation) / sizeof(nutation[0]); i++)
double sita = nutation[i].D * D + nutation[i].M * M + nutation[i].Mp * Mp +
nutation[i].F * F + nutation[i].omega * O
resulte += (nutation[i].sine1 + nutation[i].sine2 * T ) * sin(sita);
/*先乘以章动表的系数 0.0001,然后换算成度的单位*/
return resulte * 0.0001 / 3600.0;
GetEarthNutationParameter()辅助函数用于计算5个基本角距:
GetEarthNutationParameter(double dt, double *D, double *M, double *Mp, double *F, double
double T = dt * 10; /*T是从J2000起算的儒略世纪数*/
double T2 = T * T;
double T3 = T2 * T;
/*平距角(如月对地心的角距离)*/
*D = 297.85036 + 480 * T - 0.0019142 * T2 + T3 / ;
/*太阳(地球)平近点角*/
*M = 357.52772 +
* T - 0.0001603 * T2 - T3 / ;
/*月亮平近点角*/
*Mp = 134.96298 + 398 * T + 0.0086972 * T2 + T3 / 56250.0;
/*月亮纬度参数*/
*F = 93.27191 + 538 * T - 0.0036825 * T2 + T3 / ;
/*黄道与月亮平轨道升交点黄经*/
*Omega = 125.04452 -
* T + 0.0020708 * T2 + T3 / ;}

我要回帖

更多关于 二十四节气怎么计算的 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信