算法系列(十八) 用天文方法计算二十四节气(下)

【接上篇】

经过上述计算转换得到坐标值是理论值,或者说是天体的几何位置,但是FK5系统 是一个目视系统,也就是说体现的是人眼睛观察效果(光学位置),这就需要根据地球的物理环境、大气 环境等信息做进一步的修正,使其和人类从地球上观察星体的观测结果一致。

首先需要进行章动 修正。章动是指地球沿自转轴的指向绕黄道极缓慢旋转过程中,由于地球上物质分布不均匀性和月球及其 它行星的摄动力造成的轻微抖动。英国天文学家詹姆斯·布拉德利(1693—1762)最早发现了章动,章动可 以沿着黄道分解为水平分量和垂直分量,黄道上的水平分量记为Δψ,称为黄经章动,它影响了天球上所 有天体的经度。黄道上的垂直分量记为Δε,称为交角章动,它影响了黄赤交角。目前编制天文年历所依 据的章动理论是伍拉德在1953年建立的,它是以刚体地球模型为基础的。1977年,国际天文联合会的一个 专家小组建议采用非刚体地球模型――莫洛坚斯基II模型代替刚体地球模型计算章动,1979年的国际天文 学联合会第十七届大会正式通过了这一建议,并决定于1984年正式实施。

地球章动主要是月球运 动引起的,也具有一定的周期性,可以描述为一些周期项的和,主要项的周期是6798.4日(18.6年),但其 它项是一些短周期项(小于10天)。本文采用的计算方法取自国际天文联合会的IAU1980章动理论,周期项 系数数据来源于《天文算法》一书第21章的表21-A,该表忽略了IAU1980章动理论中系数小于 0.0003"的周期项,因此只有63项。每个周期项包括计算黄经章动(Δψ)的正弦系数(相位内项系 数)、计算交角章动的(Δε)余弦系数(相位外项系数)以及计算辐角的5个基本角距(M、M'、D 、F、Ω)的线性组合系数。5个基本角距的计算公式是:

平距角(日月对地心的角距离):
D = 297.85036 + 455267.111480 * T - 0.0019142 * T2 + T3 / 189474        ( 3.10式)
太阳(地球)平近点角:
M = 357.52772 + 35999.050340 * T - 0.0001603 * T2 - T3 / 300000         (3.11式)
月球平近点角
M'= 134.96298 + 477198.867398 * T + 0.0086972 * T2 + T3 / 56250         (3.12式)

月球纬度参数:
F = 93.27191 + 483202.017538 * T - 0.0036825 * T2 + T3 / 327270          (3.13式)
黄道与月球平轨道升交点黄经:
Ω= 125.04452 - 1934.136261 * 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Ω。计算 出辐角后就可以计算周期项的值:

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,Omega;   

    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 * Omega;   

        resulte += (nutation[i].sine1 + nutation[i].sine2 * T ) * sin(sita);   

    }   

    /*先乘以章动表的系数 0.0001,然后换算成度的单位*/

    return resulte * 0.0001 / 3600.0;   

}

GetEarthNutationParameter()辅助函数用于计算5个基本角距:

void 

GetEarthNutationParameter(double dt, double *D, double *M, double *Mp, double *F, double 

*Omega)   

{   

    double T = dt * 10; /*T是从J2000起算的儒略世纪数*/

    double T2 = T * T;   

    double T3 = T2 * T;   

    /*平距角(如月对地心的角距离)*/

    *D = 297.85036 + 445267.111480 * T - 0.0019142 * T2 + T3 / 189474.0;   

    /*太阳(地球)平近点角*/

    *M = 357.52772 + 35999.050340 * T - 0.0001603 * T2 - T3 / 300000.0;   

    /*月亮平近点角*/

    *Mp = 134.96298 + 477198.867398 * T + 0.0086972 * T2 + T3 / 56250.0;   

    /*月亮纬度参数*/

    *F = 93.27191 + 483202.017538 * T - 0.0036825 * T2 + T3 / 327270.0;   

    /*黄道与月亮平轨道升交点黄经*/

    *Omega = 125.04452 - 1934.136261 * T + 0.0020708 * T2 + T3 / 450000.0;   

}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索double
, 天文
, 周期
, 地球 自转
, T3
, 儒略历转换
余弦匹配算法
二十四节气天文学意义、二十四节气天文位置、二十四节气的天文位置、二十四节气算法、二十四节气系列,以便于您获取更多的相关知识。

时间: 2024-09-30 04:18:50

算法系列(十八) 用天文方法计算二十四节气(下)的相关文章

算法系列(十八) 用天文方法计算二十四节气(上)

二十四节气在中国古代历法中扮演着非常重要的角色,本文将介绍二十四节气的基本知识,以及如何 使用VSOP82/87行星运行理论计算二十四节气发生的准确时间. 中国古代历法都是以月亮运行规律 为主,严格按照朔望月长度定义月,但是由于朔望月长度和地球回归年长度无法协调,会导致农历季节和 天气的实际冷暖无法对应,因此聪明的古人将月亮运行规律和太阳运行规律相结合制定了中国农历的历法 规则.在这种特殊的阴阳结合的历法规则中,二十四节气就扮演着非常重要的作用,它是联系月亮运行规 律和太阳运行规律的纽带.正是由

算法系列(十九) 用天文方法计算日月合朔(新月)

中国农历的朔望月是农历历法的基础,而朔望月又是严格以日月合朔发生的那一天作为月首,因此日 月合朔时间的计算是制定农历历法的关键.本文将介绍ELP-2000/82月球运行理论,以及如何用ELP- 2000/82月球运行理论计算日月合朔时间. 要计算日月合朔时间, 首先要对日月合朔这一天文现象进行数学定义.朔望月是在地球上观察到的月相周期,平均长度约等于 29.53059日,而恒星月(天文月)是月亮绕地球公转一周的时间,长度约27.32166日.月相周期长度比恒 星月长大约两天,这是因为在月球绕地球

算法系列(八) RLE行程长度压缩算法

RLE(Run Length Encoding)行程长度压缩算法(也称游程长度压缩算法),是最早出现.也是 最简单的无损数据压缩算法.RLE算法的基本思路是把数据按照线性序列分成两种情况:一种是连续的 重复数据块,另一种是连续的不重复数据块.对于第一种情况,对连续的重复数据块进行压缩,压缩 方法就是用一个表示块数的属性加上一个数据块代表原来连续的若干块数据.对于第二种情况,RLE算 法有两种处理方法,一种处理方法是用和第一种情况一样的方法处理连续的不重复数据块,仅仅是表 示块数的属性总是1:另一

算法系列(七) 爱因斯坦的思考题(下)

CheckGroupRelation()函数需要根据当前组group的位置进行适当的处理,如果当前组是第一个 组或最后一个组,则group的相邻组只有一个,就是最靠近group的组,其它情况下group的相邻组都是 两个.CheckGroupRelation()函数的实现如下: 162 bool CheckGroupRelation(GROUP *groups, int groupIdx, ITEM_TYPE type, int value) 163 { 164 if(groupIdx == 0

WorldWind系列十二:Measure插件学习(下)

添加层次控制 public void Render(DrawArgs drawArgs) { // Draw the measure line + ends Vector3 referenceCenter = new Vector3( (float)drawArgs.WorldCamera.ReferenceCenter.X, (float)drawArgs.WorldCamera.ReferenceCenter.Y, (float)drawArgs.WorldCamera.ReferenceC

算法系列(二十) 计算中国农历(二)

所谓的"天文算法",就是利用经典力学定律推导行星运转轨道,对任意时刻的行星位置进行精确计 算,从而获得某种天文现象发生时的时间,比如日月合朔这一天文现象就是太阳和月亮的地心黄经(视黄 经)差为0的那一瞬间.能够计算任意时刻行星位置的一套理论就被称为星历表,比较著名的星历表有美 国国家航空航天局下属的喷气推进实验室发布的DE系列星历表,还有瑞士天文台在DE406基础上拓展的瑞 士星历表等等.根据行星运行轨道直接计算行星位置通常不是很方便,更何况大多数民用天文计算用不上 那么多精确的轨道参

[算法系列之十八]海量数据处理之BitMap

一:简介 所谓的BitMap就是用一个bit位来标记某个元素对应的Value, 而Key即是该元素.由于采用了bit为单位来存储数据,因此在存储空间方面,可以大大节省. 二:基本思想 我们用一个具体的例子来讲解,假设我们要对0-7内的5个元素(4,7,2,5,3)排序(这里假设这些元素没有重复).那么我们就可以采用BitMap的方法来达到排序的目的.要表示8个数,我们就只需要8个bit(1Bytes). (1)首先我们开辟1字节(8bit)的空间,将这些空间的所有bit位都置为0,如下图: (2

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十八)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(十八) 完美精灵之八面玲珑(WPF Only)② 紧接着上一节,首先得解释一下为什么需要将这272张图片合成为一张大图.因为如果游戏中还有装备.坐骑等其他设置,那么我们就需要对图片源进行时时的合成:同时对272张甚至更多的图片进行合成效率高还是对2张大图进行合成效率高这是显而易见的.在本节例子中,主角由身体(衣服)及武器两个部分组成:因此,我们还需要定义一个交错数组来保存已经加载的角色装备合成图到内存中: //

x264代码剖析(十八):核心算法之滤波

x264代码剖析(十八):核心算法之滤波           H.264/MPEG-4 AVC视频编码标准中,在编解码器反变换量化后,图像会出现方块效应,主要原因是:1)基于块的帧内和帧间预测残差的DCT变换,变换系数的量化过程相对粗糙,因而反量化过程恢复的变换系数有误差,会造成在图像块边界上的视觉不连续:2)运动补偿可能是从不是同一帧的不同位置上内插样点数据复制而来,因为运动补偿块的匹配不可能是绝对准确的,所以就会在复制块的边界上产生数据不连续:3)参考帧中的存在的不连续也被复制到需要补偿的图