天文算法--章动和黄赤交角

章动和黄赤交角的计算方法

package cn.ancony.chinese_calendar;

import java.util.Arrays;

import static java.lang.Math.*;

/**
 * 章动和黄赤交角
 * <p>
 * 地球章动:地球自转轴围绕其平位置周期振动。
 * <p>
 * 影响:地球自转轴围绕黄极做岁差运动的同时,自转轴还会在岁差运动的轨迹上波动。
 * <p>
 * 章动主要是月球运动引起的,可以描述为一些周期项的和。主要项的周期是 6798.4 日(18.6 年),
 * 但其它项是一些短周期项(小于 10 天)。
 * <p>
 * 章动可以很容易的分解为黄道的水平分量和的垂直分量。
 * <p>
 * 黄道上的水平分量记为Δψ,称为黄经章动;它影响了天球上所有天体的经度。
 * 黄道的垂直分量记为Δε,称为交角章动,它影响了黄赤交角。
 * <p>
 * 计算所有天体的“视位置”及“恒星时”,都需要计算章动。
 * <p>
 * 黄赤交角:是地球自转轴的倾角,它也是黄道面与赤道面的夹角。
 * <p>
 * 有平黄赤交角(黄道与平赤道的夹角,用εo表示)与真黄赤交角(黄道与真赤道的夹角,用ε表示)之分。
 * <p>
 * 真黄赤交角是ε=εo+Δε,Δε是交角章动
 */
public class NutationAndObliquity {
    /**
     * 以下单位为度: IAU1980 章动理论(忽略了系数小于 0".0003 的项)。系数的单位是 0".0001
     * <p>
     * 平距角(日月对地心的角距离):D = 297.85036 +455267.111480*T - 0.0019142*T^2 + T^3/189474
     * <p>
     * 太阳(地球)平近点角:M = 357.52772 + 35999.050340*T - 0.0001603*T^2 - T^3/300000
     * <p>
     * 月球平近点角:M′= 134.96298 + 477198.867398*T + 0.0086972*T^2 + T^3/56250
     * <p>
     * 月球纬度参数:F = 93.27191 + 483202.017538*T - 0.0036825*T^2 + T^3/327270
     * <p>
     * 黄道与月球平轨道升交点黄经,从 Date 黄道平分点开始测量:Ω= 125.04452 - 1934.136261*T + 0.0020708*T^2 + T^3/450000
     * <p>
     * L = 280°.4665 + 36000.7698*T  月球太阳的平黄经
     * <p>
     * L′= 218°.3165 + 481267°.8813*T 太阳的平黄经
     * <p>
     * Δψ精度: 0".5,Δε精度: 0".1 (忽略以上表达式中的 T 平方项及 T 三次方项),则:
     * <p>
     * Δψ=-17".20sin(Ω)-1".32sin(2L)-0".23sin(2L′)+0".21sin(2Ω)
     * <p>
     * Δε=+9".20cos(Ω)+0".57cos(2L)+0".10cos(2L′)-0".09cos(2Ω)
     *
     * @param t J2000.0 起算的儒略世纪数:即 (JDE -2451545)/36525  JDE 是历书儒略日数
     * @return [Δψ, Δε],即[黄经章动,交角章动]。单位:秒
     */
    public static double[] nutation(double t) {
        double t2 = t * t, t3 = t2 * t;
        double d = 297.85036 + 455267.111480 * t - 0.0019142 * t2 + t3 / 189474,
                m = 357.52772 + 35999.050340 * t - 0.0001603 * t2 - t3 / 300000,
                m2 = 134.96298 + 477198.867398 * t + 0.0086972 * t2 + t3 / 56250,
                f = 93.27191 + 483202.017538 * t - 0.0036825 * t2 + t3 / 327270,
                omega = 125.04452 - 1934.136261 * t + 0.0020708 * t2 + t3 / 450000,
                l = 280.4665 + 36000.7698 * t,
                l2 = 218.3165 + 481267.8813 * t;
        double rOmega = toRadians(omega), r2l = toRadians(2 * l),
                r2l2 = toRadians(2 * l2), r2omega = toRadians(2 * omega);
        double ans1 = -17.20 * sin(rOmega) - 1.32 * sin(r2l) - 0.23 * sin(r2l2) + 0.21 * sin(r2omega),
                ans2 = 9.20 * cos(rOmega) + 0.57 * cos(r2l) + 0.10 * cos(r2l2) - 0.09 * cos(r2omega);
        return new double[]{ans1, ans2};
    }

    private static final double start = 84381.448;//23°26′21".448 转换为秒

    /**
     * 平黄赤交角的计算方法一(IAU 提供):
     * 2000年为εo 误差 1",4000 年εo误差为 10"。
     * εo = 23°26'21".448 - 46".8150*T - 0".00059*T^2 + 0".001813*T^3
     *
     * @param t J2000.0 起算的儒略世纪数
     * @return 黄赤交角,单位:秒
     */
    public static double epsilonO1(double t) {
        double t2 = t * t, t3 = t2 * t;
        return start - 46.8150 * t - 0.00059 * t2 + 0.001813 * t3;
    }

    /**
     * 平黄赤交角的计算方法二(改良的的表达式,比方法一精度更高,Laskar提供):
     * 精度是:1000 年后误差 0".01(公元 1000 到 3000)。10000 年后误差数个角秒。
     * 适用于|U|<1,即 J2000.0 起算前后各 10000 年的范围内。
     *
     * @param u J2000.0 起算的儒略万年数,或U=T/100
     * @return 黄赤交角, 单位:秒
     */
    public static double epsilonO2(double u) {
        double u2 = u * u, u3 = u2 * u, u4 = u3 * u, u5 = u4 * u, u6 = u5 * u,
                u7 = u6 * u, u8 = u7 * u, u9 = u8 * u, u10 = u9 * u;
        return start
                - u * 4680.93 - u2 * 1.55 + u3 * 1999.25 - u4 * 51.38 - u5 * 249.67
                - u6 * 39.05 + u7 * 7.12 + u8 * 27.87 + u9 * 5.79 + u10 * 2.45;
    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值