二十四節(jié)氣精準計算方法

調(diào)用:

Jieqi jieqi = new Jieqi();
Integer value = Integer.parseInt(date);
return jieqi.JQtest(value) + "\n-----------------\n" + jieqi.paiYue(value);

源碼:

package com.example.heyi.Service;

public class Jieqi {

/**
 * @author lxslove
 * @mail moodlxs@163.com
 *
 */
    // ========角度變換===============
    private static final double rad = 180 * 3600 / Math.PI; // 每弧度的角秒數(shù)
    private static final double RAD = 180 / Math.PI; // 每弧度的角度數(shù)
    // ================日歷計算===============
    private static final double J2000 = 2451545; // 2000年前儒略日數(shù)(2000-1-1
    // 12:00:00格林威治平時)

    // =========黃赤交角及黃赤坐標變換===========
    private static final double hcjjB[] = { 84381.448, -46.8150, -0.00059,
            0.001813 };// 黃赤交角系數(shù)表
    private static final double preceB[] = { 0, 50287.92262, 111.24406,
            0.07699, -0.23479, -0.00178, 0.00018, 0.00001 };// Date黃道上的歲差p

    private double Y = 2000;
    private double M = 1;
    private double D = 1;
    private double h = 12;
    private double m = 0;
    private double s = 0;

    private static final double[] dts = {
            // 世界時與原子時之差計算表
            -4000, 108371.7, -13036.80, 392.000, 0.0000, -500, 17201.0,
            -627.82, 16.170, -0.3413, -150, 12200.6, -346.41, 5.403, -0.1593,
            150, 9113.8, -328.13, -1.647, 0.0377, 500, 5707.5, -391.41, 0.915,
            0.3145, 900, 2203.4, -283.45, 13.034, -0.1778, 1300, 490.1, -57.35,
            2.085, -0.0072, 1600, 120.0, -9.81, -1.532, 0.1403, 1700, 10.2,
            -0.91, 0.510, -0.0370, 1800, 13.4, -0.72, 0.202, -0.0193, 1830,
            7.8, -1.81, 0.416, -0.0247, 1860, 8.3, -0.13, -0.406, 0.0292, 1880,
            -5.4, 0.32, -0.183, 0.0173, 1900, -2.3, 2.06, 0.169, -0.0135, 1920,
            21.2, 1.69, -0.304, 0.0167, 1940, 24.2, 1.22, -0.064, 0.0031, 1960,
            33.2, 0.51, 0.231, -0.0109, 1980, 51.0, 1.29, -0.026, 0.0032, 2000,
            64.7, -1.66, 5.224, -0.2905, 2150, 279.4, 732.95, 429.579, 0.0158,
            6000 };

    // 取整數(shù)部分
    public static double int2(double v) {
        v = Math.floor(v);
        if (v < 0) {
            return v + 1;
        }

        return v;
    }

    // 對超過0-2PI的角度轉(zhuǎn)為0-2PI
    public static double rad2mrad(double v) {
        v = v % (2 * Math.PI);
        if (v < 0) {
            return v + 2 * Math.PI;
        }
        return v;
    }

    // 計算世界時與原子時之差,傳入年
    public double deltatT(double y) {
        int i = 0;
        for (i = 0; i < 100; i += 5) {
            if (y < dts[i + 5] || i == 95) {
                break;
            }
        }
        double t1 = (y - dts[i]) / (dts[i + 5] - dts[i]) * 10;
        double t2 = t1 * t1;
        double t3 = t2 * t1;
        return dts[i + 1] + dts[i + 2] * t1 + dts[i + 3] * t2 + dts[i + 4] * t3;
    }

    // 傳入儒略日(J2000起算),計算UTC與原子時的差(單位:日)
    public double deltatT2(double jd) {
        return this.deltatT(jd / 365.2425 + 2000) / 86400.0;
    }

    // 公歷轉(zhuǎn)儒略日,UTC=1表示原日期是UTC
    public double toJD(boolean UTC) {
        double y = this.Y; // 取出年月
        double m = this.M;
        double n = 0;

        if (m <= 2) {
            m += 12;
            y--;
        }

        if (this.Y * 372 + this.M * 31 + this.D >= 588829) {
            // 判斷是否為格里高利歷日1582*372+10*31+15
            n = int2(y / 100);
            n = 2 - n + int2(n / 4);// 加百年閏
        }

        n += int2(365.2500001 * (y + 4716)); // 加上年引起的偏移日數(shù)
        n += int2(30.6 * (m + 1)) + this.D; // 加上月引起的偏移日數(shù)及日偏移數(shù)
        n += ((this.s / 60 + this.m) / 60 + this.h) / 24 - 1524.5;
        if (UTC) {
            return n + this.deltatT2(n - J2000);
        }
        return n;
    }

    // 儒略日數(shù)轉(zhuǎn)公歷,UTC=1表示目標公歷是UTC
    public void setFromJD(double jd, boolean UTC) {
        if (UTC) {
            jd -= this.deltatT2(jd - J2000);
        }
        jd += 0.5;

        // 取得日數(shù)的整數(shù)部份A及小數(shù)部分F
        double A = int2(jd);
        double F = jd - A;
        double D;

        if (A > 2299161) {
            D = int2((A - 1867216.25) / 36524.25);
            A += 1 + D - int2(D / 4);
        }
        A += 1524; // 向前移4年零2個月
        this.Y = int2((A - 122.1) / 365.25);// 年
        D = A - int2(365.25 * this.Y); // 去除整年日數(shù)后余下日數(shù)
        this.M = int2(D / 30.6001); // 月數(shù)
        this.D = D - int2(this.M * 30.6001);// 去除整月日數(shù)后余下日數(shù)
        this.Y -= 4716;
        this.M--;
        if (this.M > 12) {
            this.M -= 12;
        }
        if (this.M <= 2) {
            this.Y++;
        }
        // 日的小數(shù)轉(zhuǎn)為時分秒
        F *= 24;
        this.h = int2(F);
        F -= this.h;
        F *= 60;
        this.m = int2(F);
        F -= this.m;
        F *= 60;
        this.s = F;
    }

    // 設(shè)置時間,參數(shù)例:"20000101 120000"或"20000101"
    public void setFromStr(String s) {
        this.Y = Double.parseDouble(s.substring(0, 4));
        this.M = Double.parseDouble(s.substring(4, 2));
        this.D = Double.parseDouble(s.substring(6, 2));
        this.h = Double.parseDouble(s.substring(9, 2));
        this.m = Double.parseDouble(s.substring(11, 2));
        this.s = Double.parseDouble(s.substring(13, 2)); /* 將5改為了2 */
    }

    // 日期轉(zhuǎn)為串
    public String toStr() {
        String Y = "     " + (int)this.Y;
        String M = "0" + (int)this.M;
        String D = "0" + (int)this.D;

        double h = this.h, m = this.m, s = Math.floor(this.s + .5);
        if (s >= 60) {
            s -= 60;
            m++;
        }
        if (m >= 60) {
            m -= 60;
            h++;
        }
        String sh = "0" + (int)h, sm = "0" + (int)m, ss = "0" + (int)s;
        Y = Y.substring(Y.length() - 5, Y.length());
        M = M.substring(M.length() - 2, M.length());
        D = D.substring(D.length() - 2, D.length());
        sh = sh.substring(sh.length() - 2, sh.length());
        sm = sm.substring(sm.length() - 2, sm.length());
        ss = ss.substring(ss.length() - 2, ss.length());
        return Y + "-" + M + "-" + D + " " + sh + ":" + sm + ":" + ss;
    }

    // 算出:jd轉(zhuǎn)到當?shù)豒TC后,UTC日數(shù)的整數(shù)部分或小數(shù)部分
    // 基于J2000力學(xué)時jd的起算點是12:00:00時,所以跳日時刻發(fā)生在12:00:00,這與日歷計算發(fā)生矛盾
    // 把jd改正為00:00:00起算,這樣儒略日的跳日動作就與日期的跳日同步
    // 改正方法為jd=jd+0.5-deltatT+shiqu/24.0
    // 把儒略日的起點移動-0.5(即前移12小時)
    // 式中shiqu是時區(qū),北京的起算點是-8小時,shiqu取8
    public double Dint_dec(double jd, int shiqu, boolean dec) {
        double u = jd + 0.5 - this.deltatT2(jd) + shiqu / 24.0;
        if (dec) {
            return Math.floor(u); // 返回整數(shù)部分
        }else {
            return u - Math.floor(u); // 返回小數(shù)部分
        }
    }

    // 計算兩個日期的相差的天數(shù),輸入字串格式日期,如:"20080101"
    double d1_d2(String d1, String d2) {
        double Y = this.Y, M = this.M, D = this.D, h = this.h, m = this.m, s = this.s; // 備份原來的數(shù)據(jù)

        this.setFromStr(d1.substring(0, 8) + " 120000");
        double jd1 = this.toJD(false);
        this.setFromStr(d2.substring(0, 8) + " 120000");
        double jd2 = this.toJD(false);

        this.Y = Y;
        this.M = M;
        this.D = D;
        this.h = h;
        this.m = m;
        this.s = s; // 還原
        if (jd1 > jd2) {
            return Math.floor(jd1 - jd2 + .0001);
        }else {
            return -Math.floor(jd2 - jd1 + .0001);
        }
    }

    // 返回黃赤交角(常規(guī)精度),短期精度很高
    public static double hcjj1(double t) {
        double t1 = t / 36525;
        double t2 = t1 * t1;
        double t3 = t2 * t1;
        return (hcjjB[0] + hcjjB[1] * t1 + hcjjB[2] * t2 + hcjjB[3] * t3) / rad;
    }

    // 黃赤轉(zhuǎn)換(黃赤坐標旋轉(zhuǎn))
    public static void HCconv(double[] JW, double E) {
        // 黃道赤道坐標變換,赤到黃E取負
        double HJ = rad2mrad(JW[0]), HW = JW[1];
        double sinE = Math.sin(E), cosE = Math.cos(E);
        double sinW = cosE * Math.sin(HW) + sinE * Math.cos(HW) * Math.sin(HJ);
        double J = Math.atan2(Math.sin(HJ) * cosE - Math.tan(HW) * sinE, Math
                .cos(HJ));
        JW[0] = rad2mrad(J);
        JW[1] = Math.asin(sinW);
    }

    // 補歲差
    public static void addPrece(double jd, double[] zb) {
        int i;
        double t = 1, v = 0, t1 = jd / 365250;
        for (i = 1; i < 8; i++) {
            t *= t1;
            v += preceB[i] * t;
        }
        zb[0] = rad2mrad(zb[0] + (v + 2.9965 * t1) / rad);
    }

    // ===============光行差==================
    private static final double GXC_e[] = { 0.016708634, -0.000042037,
            -0.0000001267 }; // 離心率
    private static final double GXC_p[] = { 102.93735 / RAD, 1.71946 / RAD,
            0.00046 / RAD }; // 近點
    private static final double GXC_l[] = { 280.4664567 / RAD,
            36000.76982779 / RAD, 0.0003032028 / RAD, 1 / 49931000 / RAD,
            -1 / 153000000 / RAD }; // 太平黃經(jīng)
    private static final double GXC_k = 20.49552 / rad; // 光行差常數(shù)

    // 恒星周年光行差計算(黃道坐標中)
    public static void addGxc(double t, double[] zb) {
        double t1 = t / 36525;
        double t2 = t1 * t1;
        double t3 = t2 * t1;
        double t4 = t3 * t1;
        double L = GXC_l[0] + GXC_l[1] * t1 + GXC_l[2] * t2 + GXC_l[3] * t3
                + GXC_l[4] * t4;
        double p = GXC_p[0] + GXC_p[1] * t1 + GXC_p[2] * t2;
        double e = GXC_e[0] + GXC_e[1] * t1 + GXC_e[2] * t2;
        double dL = L - zb[0], dP = p - zb[0];
        zb[0] -= GXC_k * (Math.cos(dL) - e * Math.cos(dP)) / Math.cos(zb[1]);
        zb[1] -= GXC_k * Math.sin(zb[1]) * (Math.sin(dL) - e * Math.sin(dP));
        zb[0] = rad2mrad(zb[0]);
    }

    // ===============章動計算==================
    private static final double nutB[] = {// 章動表
            2.1824391966, -33.757045954, 0.0000362262, 3.7340E-08, -2.8793E-10,
            -171996, -1742, 92025, 89, 3.5069406862, 1256.663930738,
            0.0000105845, 6.9813E-10, -2.2815E-10, -13187, -16, 5736, -31,
            1.3375032491, 16799.418221925, -0.0000511866, 6.4626E-08,
            -5.3543E-10, -2274, -2, 977, -5, 4.3648783932, -67.514091907,
            0.0000724525, 7.4681E-08, -5.7586E-10, 2062, 2, -895, 5,
            0.0431251803, -628.301955171, 0.0000026820, 6.5935E-10, 5.5705E-11,
            -1426, 34, 54, -1, 2.3555557435, 8328.691425719, 0.0001545547,
            2.5033E-07, -1.1863E-09, 712, 1, -7, 0, 3.4638155059,
            1884.965885909, 0.0000079025, 3.8785E-11, -2.8386E-10, -517, 12,
            224, -6, 5.4382493597, 16833.175267879, -0.0000874129, 2.7285E-08,
            -2.4750E-10, -386, -4, 200, 0, 3.6930589926, 25128.109647645,
            0.0001033681, 3.1496E-07, -1.7218E-09, -301, 0, 129, -1,
            3.5500658664, 628.361975567, 0.0000132664, 1.3575E-09, -1.7245E-10,
            217, -5, -95, 3 };

    public static class ZD {
        public double Lon;
        public double Obl;
    }

    // 計算黃經(jīng)章動及交角章動
    public static ZD nutation(double t) {
        ZD d = new ZD();
        d.Lon = 0;
        d.Obl = 0;
        t /= 36525;
        double c, t1 = t, t2 = t1 * t1, t3 = t2 * t1, t4 = t3 * t1;// t5=t4*t1;
        for (int i = 0; i < nutB.length; i += 9) {
            c = nutB[i] + nutB[i + 1] * t1 + nutB[i + 2] * t2 + nutB[i + 3]
                    * t3 + nutB[i + 4] * t4;
            d.Lon += (nutB[i + 5] + nutB[i + 6] * t / 10) * Math.sin(c); // 黃經(jīng)章動
            d.Obl += (nutB[i + 7] + nutB[i + 8] * t / 10) * Math.cos(c); // 交角章動
        }
        d.Lon /= rad * 10000; // 黃經(jīng)章動
        d.Obl /= rad * 10000; // 交角章動
        return d;
    }

    // 本函數(shù)計算赤經(jīng)章動及赤緯章動
    public static void nutationRaDec(double t, double[] zb) {
        double Ra = zb[0], Dec = zb[1];
        double E = hcjj1(t), sinE = Math.sin(E), cosE = Math.cos(E); // 計算黃赤交角
        ZD d = nutation(t); // 計算黃經(jīng)章動及交角章動
        double cosRa = Math.cos(Ra), sinRa = Math.sin(Ra);
        double tanDec = Math.tan(Dec);
        zb[0] += (cosE + sinE * sinRa * tanDec) * d.Lon - cosRa * tanDec
                * d.Obl; // 赤經(jīng)章動
        zb[1] += sinE * cosRa * d.Lon + sinRa * d.Obl; // 赤緯章動
        zb[0] = rad2mrad(zb[0]);
    }


    //=================以下是月球及地球運動參數(shù)表===================
    /***************************************
     * 如果用記事本查看此代碼,請在"格式"菜單中去除"自動換行"
     * E10是關(guān)于地球的,格式如下:
     *    它是一個數(shù)組,每3個數(shù)看作一條記錄,每條記錄的3個數(shù)記為A,B,C
     *    rec=A*cos(B+C*t);  式中t是J2000起算的儒略千年數(shù)
     *    每條記錄的計算結(jié)果(即rec)取和即得地球的日心黃經(jīng)的周期量L0
     * E11格式如下: rec = A*cos*(B+C*t) *t,     取和后得泊松量L1
     * E12格式如下: rec = A*cos*(B+C*t) *t*t,   取和后得泊松量L2
     * E13格式如下: rec = A*cos*(B+C*t) *t*t*t, 取和后得泊松量L3
     * 最后地球的地心黃經(jīng):L = L0+L1+L2+L3+...
     * E20,E21,E22,E23...用于計算黃緯
     * M10,M11等是關(guān)于月球的,參數(shù)的用法請閱讀Mnn()函數(shù)
     *****************************************/
    //地球運動VSOP87參數(shù)
    private static final double E10[] = { //黃經(jīng)周期項
            1.75347045673, 0.00000000000,     0.0000000000,  0.03341656456, 4.66925680417,  6283.0758499914,  0.00034894275, 4.62610241759, 12566.1516999828,  0.00003417571, 2.82886579606,     3.5231183490,
            0.00003497056, 2.74411800971,  5753.3848848968,  0.00003135896, 3.62767041758, 77713.7714681205,  0.00002676218, 4.41808351397,  7860.4193924392,  0.00002342687, 6.13516237631,  3930.2096962196,
            0.00001273166, 2.03709655772,   529.6909650946,  0.00001324292, 0.74246356352, 11506.7697697936,  0.00000901855, 2.04505443513,    26.2983197998,  0.00001199167, 1.10962944315,  1577.3435424478,
            0.00000857223, 3.50849156957,   398.1490034082,  0.00000779786, 1.17882652114,  5223.6939198022,  0.00000990250, 5.23268129594,  5884.9268465832,  0.00000753141, 2.53339053818,  5507.5532386674,
            0.00000505264, 4.58292563052, 18849.2275499742,  0.00000492379, 4.20506639861,   775.5226113240,  0.00000356655, 2.91954116867,     0.0673103028,  0.00000284125, 1.89869034186,   796.2980068164,
            0.00000242810, 0.34481140906,  5486.7778431750,  0.00000317087, 5.84901952218, 11790.6290886588,  0.00000271039, 0.31488607649, 10977.0788046990,  0.00000206160, 4.80646606059,  2544.3144198834,
            0.00000205385, 1.86947813692,  5573.1428014331,  0.00000202261, 2.45767795458,  6069.7767545534,  0.00000126184, 1.08302630210,    20.7753954924,  0.00000155516, 0.83306073807,   213.2990954380,
            0.00000115132, 0.64544911683,     0.9803210682,  0.00000102851, 0.63599846727,  4694.0029547076,  0.00000101724, 4.26679821365,     7.1135470008,  0.00000099206, 6.20992940258,  2146.1654164752,
            0.00000132212, 3.41118275555,  2942.4634232916,  0.00000097607, 0.68101272270,   155.4203994342,  0.00000085128, 1.29870743025,  6275.9623029906,  0.00000074651, 1.75508916159,  5088.6288397668,
            0.00000101895, 0.97569221824, 15720.8387848784,  0.00000084711, 3.67080093025, 71430.6956181291,  0.00000073547, 4.67926565481,   801.8209311238,  0.00000073874, 3.50319443167,  3154.6870848956,
            0.00000078756, 3.03698313141, 12036.4607348882,  0.00000079637, 1.80791330700, 17260.1546546904,  0.00000085803, 5.98322631256,161000.6857376741,  0.00000056963, 2.78430398043,  6286.5989683404,
            0.00000061148, 1.81839811024,  7084.8967811152,  0.00000069627, 0.83297596966,  9437.7629348870,  0.00000056116, 4.38694880779, 14143.4952424306,  0.00000062449, 3.97763880587,  8827.3902698748,
            0.00000051145, 0.28306864501,  5856.4776591154,  0.00000055577, 3.47006009062,  6279.5527316424,  0.00000041036, 5.36817351402,  8429.2412664666,  0.00000051605, 1.33282746983,  1748.0164130670,
            0.00000051992, 0.18914945834, 12139.5535091068,  0.00000049000, 0.48735065033,  1194.4470102246,  0.00000039200, 6.16832995016, 10447.3878396044,  0.00000035566, 1.77597314691,  6812.7668150860,
            0.00000036770, 6.04133859347, 10213.2855462110,  0.00000036596, 2.56955238628,  1059.3819301892,  0.00000033291, 0.59309499459, 17789.8456197850,  0.00000035954, 1.70876111898,  2352.8661537718};
    private static final double E11[] = { //黃經(jīng)泊松1項
            6283.31966747491,0.00000000000,     0.0000000000,  0.00206058863, 2.67823455584,  6283.0758499914,  0.00004303430, 2.63512650414, 12566.1516999828,  0.00000425264, 1.59046980729,     3.5231183490,
            0.00000108977, 2.96618001993,  1577.3435424478,  0.00000093478, 2.59212835365, 18849.2275499742,  0.00000119261, 5.79557487799,    26.2983197998,  0.00000072122, 1.13846158196,   529.6909650946,
            0.00000067768, 1.87472304791,   398.1490034082,  0.00000067327, 4.40918235168,  5507.5532386674,  0.00000059027, 2.88797038460,  5223.6939198022,  0.00000055976, 2.17471680261,   155.4203994342,
            0.00000045407, 0.39803079805,   796.2980068164,  0.00000036369, 0.46624739835,   775.5226113240,  0.00000028958, 2.64707383882,     7.1135470008,  0.00000019097, 1.84628332577,  5486.7778431750,
            0.00000020844, 5.34138275149,     0.9803210682,  0.00000018508, 4.96855124577,   213.2990954380,  0.00000016233, 0.03216483047,  2544.3144198834,  0.00000017293, 2.99116864949,  6275.9623029906};
    private static final double E12[] = { //黃經(jīng)泊松2項
            0.00052918870, 0.00000000000,     0.0000000000,  0.00008719837, 1.07209665242,  6283.0758499914,  0.00000309125, 0.86728818832, 12566.1516999828,  0.00000027339, 0.05297871691,     3.5231183490,
            0.00000016334, 5.18826691036,    26.2983197998,  0.00000015752, 3.68457889430,   155.4203994342,  0.00000009541, 0.75742297675, 18849.2275499742,  0.00000008937, 2.05705419118, 77713.7714681205,
            0.00000006952, 0.82673305410,   775.5226113240,  0.00000005064, 4.66284525271,  1577.3435424478};
    private static final double E13[] = { 0.00000289226, 5.84384198723,  6283.0758499914,  0.00000034955, 0.00000000000,     0.0000000000, 0.00000016819, 5.48766912348, 12566.1516999828};
    private static final double E14[] = {  0.00000114084, 3.14159265359,     0.0000000000,  0.00000007717, 4.13446589358,  6283.0758499914, 0.00000000765, 3.83803776214, 12566.1516999828};
    private static final double E15[] = {  0.00000000878, 3.14159265359,     0.0000000000 };
    private static final double E20[] = {  //黃緯周期項
            0.00000279620, 3.19870156017, 84334.6615813083,  0.00000101643, 5.42248619256,  5507.5532386674,  0.00000080445, 3.88013204458,  5223.6939198022,  0.00000043806, 3.70444689758,  2352.8661537718,
            0.00000031933, 4.00026369781,  1577.3435424478,  0.00000022724, 3.98473831560,  1047.7473117547,  0.00000016392, 3.56456119782,  5856.4776591154,  0.00000018141, 4.98367470263,  6283.0758499914,
            0.00000014443, 3.70275614914,  9437.7629348870,  0.00000014304, 3.41117857525, 10213.2855462110};
    private static final double E21[] = {  0.00000009030, 3.89729061890,  5507.5532386674,  0.00000006177, 1.73038850355,  5223.6939198022};
    private static final double E30[] = {  //距離周期項
            1.00013988799, 0.00000000000,     0.0000000000,  0.01670699626, 3.09846350771,  6283.0758499914,  0.00013956023, 3.05524609620, 12566.1516999828,  0.00003083720, 5.19846674381, 77713.7714681205,
            0.00001628461, 1.17387749012,  5753.3848848968,  0.00001575568, 2.84685245825,  7860.4193924392,  0.00000924799, 5.45292234084, 11506.7697697936,  0.00000542444, 4.56409149777,  3930.2096962196};
    private static final double E31[] = {  0.00103018608, 1.10748969588,  6283.0758499914,  0.00001721238, 1.06442301418, 12566.1516999828, 0.00000702215, 3.14159265359,     0.0000000000};
    private static final double E32[] = {  0.00004359385, 5.78455133738,  6283.0758499914 };
    private static final double E33[] = {  0.00000144595, 4.27319435148,  6283.0758499914 };
    //月球運動參數(shù)
    private static final double M10[] = {
            22639.5858800,  2.3555545723,  8328.6914247251, 1.5231275E-04, 2.5041111E-07,-1.1863391E-09, 4586.4383203,  8.0413790709,  7214.0628654588,-2.1850087E-04,-1.8646419E-07, 8.7760973E-10, 2369.9139357, 10.3969336431, 15542.7542901840,-6.6188121E-05, 6.3946925E-08,-3.0872935E-10,  769.0257187,  4.7111091445, 16657.3828494503, 3.0462550E-04, 5.0082223E-07,-2.3726782E-09,
            -666.4175399, -0.0431256817,   628.3019552485,-2.6638815E-06, 6.1639211E-10,-5.4439728E-11, -411.5957339,  3.2558104895, 16866.9323152810,-1.2804259E-04,-9.8998954E-09, 4.0433461E-11,  211.6555524,  5.6858244986, -1114.6285592663,-3.7081362E-04,-4.3687530E-07, 2.0639488E-09,  205.4359530,  8.0845047526,  6585.7609102104,-2.1583699E-04,-1.8708058E-07, 9.3204945E-10,
            191.9561973, 12.7524882154, 23871.4457149091, 8.6124629E-05, 3.1435804E-07,-1.4950684E-09,  164.7286185, 10.4400593249, 14914.4523349355,-6.3524240E-05, 6.3330532E-08,-2.5428962E-10, -147.3213842, -2.3986802540, -7700.3894694766,-1.5497663E-04,-2.4979472E-07, 1.1318993E-09, -124.9881185,  5.1984668216,  7771.3771450920,-3.3094061E-05, 3.1973462E-08,-1.5436468E-10,
            -109.3803637,  2.3124288905,  8956.9933799736, 1.4964887E-04, 2.5102751E-07,-1.2407788E-09,   55.1770578,  7.1411231536, -1324.1780250970, 6.1854469E-05, 7.3846820E-08,-3.4916281E-10,  -45.0996092,  5.6113650618, 25195.6237400061, 2.4270161E-05, 2.4051122E-07,-1.1459056E-09,   39.5333010, -0.9002559173, -8538.2408905558, 2.8035534E-04, 2.6031101E-07,-1.2267725E-09,
            38.4298346, 18.4383127140, 22756.8171556428,-2.8468899E-04,-1.2251727E-07, 5.6888037E-10,   36.1238141,  7.0666637168, 24986.0742741754, 4.5693825E-04, 7.5123334E-07,-3.5590172E-09,   30.7725751, 16.0827581417, 14428.1257309177,-4.3700174E-04,-3.7292838E-07, 1.7552195E-09,  -28.3971008,  7.9982533891,  7842.3648207073,-2.2116475E-04,-1.8584780E-07, 8.2317000E-10,
            -24.3582283, 10.3538079614, 16171.0562454324,-6.8852003E-05, 6.4563317E-08,-3.6316908E-10,  -18.5847068,  2.8429122493,  -557.3142796331,-1.8540681E-04,-2.1843765E-07, 1.0319744E-09,   17.9544674,  5.1553411398,  8399.6791003405,-3.5757942E-05, 3.2589854E-08,-2.0880440E-10,   14.5302779, 12.7956138971, 23243.1437596606, 8.8788511E-05, 3.1374165E-07,-1.4406287E-09,
            14.3796974, 15.1080427876, 32200.1371396342, 2.3843738E-04, 5.6476915E-07,-2.6814075E-09,   14.2514576,-24.0810366320,    -2.3011998397, 1.5231275E-04, 2.5041111E-07,-1.1863391E-09,   13.8990596, 20.7938672862, 31085.5085803679,-1.3237624E-04, 1.2789385E-07,-6.1745870E-10,   13.1940636,  3.3302699264, -9443.3199839914,-5.2312637E-04,-6.8728642E-07, 3.2502879E-09,
            -9.6790568, -4.7542348263,-16029.0808942018,-3.0728938E-04,-5.0020584E-07, 2.3182384E-09,   -9.3658635, 11.2971895604, 24080.9951807398,-3.4654346E-04,-1.9636409E-07, 9.1804319E-10,    8.6055318,  5.7289501804, -1742.9305145148,-3.6814974E-04,-4.3749170E-07, 2.1183885E-09,   -8.4530982,  7.5540213938, 16100.0685698171, 1.1921869E-04, 2.8238458E-07,-1.3407038E-09,
            8.0501724, 10.4831850066, 14286.1503796870,-6.0860358E-05, 6.2714140E-08,-1.9984990E-10,   -7.6301553,  4.6679834628, 17285.6848046987, 3.0196162E-04, 5.0143862E-07,-2.4271179E-09,   -7.4474952, -0.0862513635,  1256.6039104970,-5.3277630E-06, 1.2327842E-09,-1.0887946E-10,    7.3712011,  8.1276304344,  5957.4589549619,-2.1317311E-04,-1.8769697E-07, 9.8648918E-10,
            7.0629900,  0.9591375719,    33.7570471374,-3.0829302E-05,-3.6967043E-08, 1.7385419E-10,   -6.3831491,  9.4966777258,  7004.5133996281, 2.1416722E-04, 3.2425793E-07,-1.5355019E-09,   -5.7416071, 13.6527441326, 32409.6866054649,-1.9423071E-04, 5.4047029E-08,-2.6829589E-10,    4.3740095, 18.4814383957, 22128.5152003943,-2.8202511E-04,-1.2313366E-07, 6.2332010E-10,
            -3.9976134,  7.9669196340, 33524.3151647312, 1.7658291E-04, 4.9092233E-07,-2.3322447E-09,   -3.2096876, 13.2398458924, 14985.4400105508,-2.5159493E-04,-1.5449073E-07, 7.2324505E-10,   -2.9145404, 12.7093625336, 24499.7476701576, 8.3460748E-05, 3.1497443E-07,-1.5495082E-09,    2.7318890, 16.1258838235, 13799.8237756692,-4.3433786E-04,-3.7354477E-07, 1.8096592E-09,
            -2.5679459, -2.4418059357, -7072.0875142282,-1.5764051E-04,-2.4917833E-07, 1.0774596E-09,   -2.5211990,  7.9551277074,  8470.6667759558,-2.2382863E-04,-1.8523141E-07, 7.6873027E-10,    2.4888871,  5.6426988169,  -486.3266040178,-3.7347750E-04,-4.3625891E-07, 2.0095091E-09,    2.1460741,  7.1842488353, -1952.4799803455, 6.4518350E-05, 7.3230428E-08,-2.9472308E-10,
            1.9777270, 23.1494218585, 39414.2000050930, 1.9936508E-05, 3.7830496E-07,-1.8037978E-09,    1.9336825,  9.4222182890, 33314.7656989005, 6.0925100E-04, 1.0016445E-06,-4.7453563E-09,    1.8707647, 20.8369929680, 30457.2066251194,-1.2971236E-04, 1.2727746E-07,-5.6301898E-10,   -1.7529659,  0.4873576771, -8886.0057043583,-3.3771956E-04,-4.6884877E-07, 2.2183135E-09,
            -1.4371624,  7.0979974718,  -695.8760698485, 5.9190587E-05, 7.4463212E-08,-4.0360254E-10,   -1.3725701,  1.4552986550,  -209.5494658307, 4.3266809E-04, 5.1072212E-07,-2.4131116E-09,    1.2618162,  7.5108957121, 16728.3705250656, 1.1655481E-04, 2.8300097E-07,-1.3951435E-09};
    private static final double M11[] = {
            1.6768000, -0.0431256817,   628.3019552485,-2.6638815E-06, 6.1639211E-10,-5.4439728E-11,    0.5164200, 11.2260974062,  6585.7609102104,-2.1583699E-04,-1.8708058E-07, 9.3204945E-10,    0.4138300, 13.5816519784, 14914.4523349355,-6.3524240E-05, 6.3330532E-08,-2.5428962E-10,    0.3711500,  5.5402729076,  7700.3894694766, 1.5497663E-04, 2.4979472E-07,-1.1318993E-09,
            0.2756000,  2.3124288905,  8956.9933799736, 1.4964887E-04, 2.5102751E-07,-1.2407788E-09,    0.2459863,-25.6198212459,    -2.3011998397, 1.5231275E-04, 2.5041111E-07,-1.1863391E-09,    0.0711800,  7.9982533891,  7842.3648207073,-2.2116475E-04,-1.8584780E-07, 8.2317000E-10,    0.0612800, 10.3538079614, 16171.0562454324,-6.8852003E-05, 6.4563317E-08,-3.6316908E-10};
    private static final double M12[] = {  0.0048700, -0.0431256817,   628.3019552485,-2.6638815E-06, 6.1639211E-10,-5.4439728E-11,  0.0022800,-27.1705318325,    -2.3011998397, 1.5231275E-04, 2.5041111E-07,-1.1863391E-09,  0.0015000, 11.2260974062,  6585.7609102104,-2.1583699E-04,-1.8708058E-07, 9.3204945E-10};
    private static final double M20[] = {
            18461.2400600,  1.6279052448,  8433.4661576405,-6.4021295E-05,-4.9499477E-09, 2.0216731E-11, 1010.1671484,  3.9834598170, 16762.1575823656, 8.8291456E-05, 2.4546117E-07,-1.1661223E-09,  999.6936555,  0.7276493275,  -104.7747329154, 2.1633405E-04, 2.5536106E-07,-1.2065558E-09,  623.6524746,  8.7690283983,  7109.2881325435,-2.1668263E-06, 6.8896872E-08,-3.2894608E-10,
            199.4837596,  9.6692843156, 15647.5290230993,-2.8252217E-04,-1.9141414E-07, 8.9782646E-10,  166.5741153,  6.4134738261, -1219.4032921817,-1.5447958E-04,-1.8151424E-07, 8.5739300E-10,  117.2606951, 12.0248388879, 23976.2204478244,-1.3020942E-04, 5.8996977E-08,-2.8851262E-10,   61.9119504,  6.3390143893, 25090.8490070907, 2.4060421E-04, 4.9587228E-07,-2.3524614E-09,
            33.3572027, 11.1245829706, 15437.9795572686, 1.5014592E-04, 3.1930799E-07,-1.5152852E-09,   31.7596709,  3.0832038997,  8223.9166918098, 3.6864680E-04, 5.0577218E-07,-2.3928949E-09,   29.5766003,  8.8121540801,  6480.9861772950, 4.9705523E-07, 6.8280480E-08,-2.7450635E-10,   15.5662654,  4.0579192538, -9548.0947169068,-3.0679233E-04,-4.3192536E-07, 2.0437321E-09,
            15.1215543, 14.3803934601, 32304.9118725496, 2.2103334E-05, 3.0940809E-07,-1.4748517E-09,  -12.0941511,  8.7259027166,  7737.5900877920,-4.8307078E-06, 6.9513264E-08,-3.8338581E-10,    8.8681426,  9.7124099974, 15019.2270678508,-2.7985829E-04,-1.9203053E-07, 9.5226618E-10,    8.0450400,  0.6687636586,  8399.7091105030,-3.3191993E-05, 3.2017096E-08,-1.5363746E-10,
            7.9585542, 12.0679645696, 23347.9184925760,-1.2754553E-04, 5.8380585E-08,-2.3407289E-10,    7.4345550,  6.4565995078, -1847.7052474301,-1.5181570E-04,-1.8213063E-07, 9.1183272E-10,   -6.7314363, -4.0265854988,-16133.8556271171,-9.0955337E-05,-2.4484477E-07, 1.1116826E-09,    6.5795750, 16.8104074692, 14323.3509980023,-2.2066770E-04,-1.1756732E-07, 5.4866364E-10,
            -6.4600721,  1.5847795630,  9061.7681128890,-6.6685176E-05,-4.3335556E-09,-3.4222998E-11,   -6.2964773,  4.8837157343, 25300.3984729215,-1.9206388E-04,-1.4849843E-08, 6.0650192E-11,   -5.6323538, -0.7707750092,   733.0766881638,-2.1899793E-04,-2.5474467E-07, 1.1521161E-09,   -5.3683961,  6.8263720663, 16204.8433027325,-9.7115356E-05, 2.7023515E-08,-1.3414795E-10,
            -5.3112784,  3.9403341353, 17390.4595376141, 8.5627574E-05, 2.4607756E-07,-1.2205621E-09,   -5.0759179,  0.6845236457,   523.5272223331, 2.1367016E-04, 2.5597745E-07,-1.2609955E-09,   -4.8396143, -1.6710309265, -7805.1642023920, 6.1357413E-05, 5.5663398E-09,-7.4656459E-11,   -4.8057401,  3.5705615768,  -662.0890125485, 3.0927234E-05, 3.6923410E-08,-1.7458141E-10,
            3.9840545,  8.6945689615, 33419.5404318159, 3.9291696E-04, 7.4628340E-07,-3.5388005E-09,    3.6744619, 19.1659620415, 22652.0424227274,-6.8354947E-05, 1.3284380E-07,-6.3767543E-10,    2.9984815, 20.0662179587, 31190.2833132833,-3.4871029E-04,-1.2746721E-07, 5.8909710E-10,    2.7986413, -2.5281611620,-16971.7070481963, 3.4437664E-04, 2.6526096E-07,-1.2469893E-09,
            2.4138774, 17.7106633865, 22861.5918885581,-5.0102304E-04,-3.7787833E-07, 1.7754362E-09,    2.1863132,  5.5132179088, -9757.6441827375, 1.2587576E-04, 7.8796768E-08,-3.6937954E-10,    2.1461692, 13.4801375428, 23766.6709819937, 3.0245868E-04, 5.6971910E-07,-2.7016242E-09,    1.7659832, 11.1677086523, 14809.6776020201, 1.5280981E-04, 3.1869159E-07,-1.4608454E-09,
            -1.6244212,  7.3137297434,  7318.8375983742,-4.3483492E-04,-4.4182525E-07, 2.0841655E-09,    1.5813036,  5.4387584720, 16552.6081165349, 5.2095955E-04, 7.5618329E-07,-3.5792340E-09,    1.5197528, 16.7359480324, 40633.6032972747, 1.7441609E-04, 5.5981921E-07,-2.6611908E-09,    1.5156341,  1.7023646816,-17876.7861416319,-4.5910508E-04,-6.8233647E-07, 3.2300712E-09,
            1.5102092,  5.4977296450,  8399.6847301375,-3.3094061E-05, 3.1973462E-08,-1.5436468E-10,   -1.3178223,  9.6261586339, 16275.8309783478,-2.8518605E-04,-1.9079775E-07, 8.4338673E-10,   -1.2642739, 11.9817132061, 24604.5224030729,-1.3287330E-04, 5.9613369E-08,-3.4295235E-10,    1.1918723, 22.4217725310, 39518.9747380084,-1.9639754E-04, 1.2294390E-07,-5.9724197E-10,
            1.1346110, 14.4235191419, 31676.6099173011, 2.4767216E-05, 3.0879170E-07,-1.4204120E-09,    1.0857810,  8.8552797618,  5852.6842220465, 3.1609367E-06, 6.7664088E-08,-2.2006663E-10,   -1.0193852,  7.2392703065, 33629.0898976466,-3.9751134E-05, 2.3556127E-07,-1.1256889E-09,   -0.8227141, 11.0814572888, 16066.2815125171, 1.4748204E-04, 3.1992438E-07,-1.5697249E-09,
            0.8042238,  3.5274358950,   -33.7870573000, 2.8263353E-05, 3.7539802E-08,-2.2902113E-10,    0.8025939,  6.7832463846, 16833.1452579809,-9.9779237E-05, 2.7639907E-08,-1.8858767E-10,   -0.7931866, -6.3821400710,-24462.5470518423,-2.4326809E-04,-4.9525589E-07, 2.2980217E-09,   -0.7910153,  6.3703481443,  -591.1013369332,-1.5714346E-04,-1.8089785E-07, 8.0295327E-10,
            -0.6674056,  9.1819266386, 24533.5347274576, 5.5197395E-05, 2.7743463E-07,-1.3204870E-09,    0.6502226,  4.1010449356,-10176.3966721553,-3.0412845E-04,-4.3254175E-07, 2.0981718E-09,   -0.6388131,  6.2958887075, 25719.1509623392, 2.3794032E-04, 4.9648867E-07,-2.4069012E-09};
    private static final double M21[] = {
            0.0743000, 11.9537467337,  6480.9861772950, 4.9705523E-07, 6.8280480E-08,-2.7450635E-10,    0.0304300,  8.7259027166,  7737.5900877920,-4.8307078E-06, 6.9513264E-08,-3.8338581E-10,    0.0222900, 12.8540026510, 15019.2270678508,-2.7985829E-04,-1.9203053E-07, 9.5226618E-10,    0.0199900, 15.2095572232, 23347.9184925760,-1.2754553E-04, 5.8380585E-08,-2.3407289E-10,
            0.0186900,  9.5981921614, -1847.7052474301,-1.5181570E-04,-1.8213063E-07, 9.1183272E-10,    0.0169600,  7.1681781524, 16133.8556271171, 9.0955337E-05, 2.4484477E-07,-1.1116826E-09,    0.0162300,  1.5847795630,  9061.7681128890,-6.6685176E-05,-4.3335556E-09,-3.4222998E-11,    0.0141900, -0.7707750092,   733.0766881638,-2.1899793E-04,-2.5474467E-07, 1.1521161E-09};
    private static final double M30[] = {
            385000.5290396,  1.5707963268,     0.0000000000, 0.0000000E+00, 0.0000000E+00, 0.0000000E+00,-20905.3551378, 3.9263508990,  8328.6914247251, 1.5231275E-04, 2.5041111E-07,-1.1863391E-09,-3699.1109330,  9.6121753977,  7214.0628654588,-2.1850087E-04,-1.8646419E-07, 8.7760973E-10,-2955.9675626, 11.9677299699, 15542.7542901840,-6.6188121E-05, 6.3946925E-08,-3.0872935E-10,
            -569.9251264,  6.2819054713, 16657.3828494503, 3.0462550E-04, 5.0082223E-07,-2.3726782E-09,  246.1584797,  7.2566208254, -1114.6285592663,-3.7081362E-04,-4.3687530E-07, 2.0639488E-09, -204.5861179, 12.0108556517, 14914.4523349355,-6.3524240E-05, 6.3330532E-08,-2.5428962E-10, -170.7330791, 14.3232845422, 23871.4457149091, 8.6124629E-05, 3.1435804E-07,-1.4950684E-09,
            -152.1378118,  9.6553010794,  6585.7609102104,-2.1583699E-04,-1.8708058E-07, 9.3204945E-10, -129.6202242, -0.8278839272, -7700.3894694766,-1.5497663E-04,-2.4979472E-07, 1.1318993E-09,  108.7427014,  6.7692631483,  7771.3771450920,-3.3094061E-05, 3.1973462E-08,-1.5436468E-10,  104.7552944,  3.8832252173,  8956.9933799736, 1.4964887E-04, 2.5102751E-07,-1.2407788E-09,
            79.6605685,  0.6705404095, -8538.2408905558, 2.8035534E-04, 2.6031101E-07,-1.2267725E-09,   48.8883284,  1.5276706450,   628.3019552485,-2.6638815E-06, 6.1639211E-10,-5.4439728E-11,  -34.7825237, 20.0091090408, 22756.8171556428,-2.8468899E-04,-1.2251727E-07, 5.6888037E-10,   30.8238599, 11.9246042882, 16171.0562454324,-6.8852003E-05, 6.4563317E-08,-3.6316908E-10,
            24.2084985,  9.5690497159,  7842.3648207073,-2.2116475E-04,-1.8584780E-07, 8.2317000E-10,  -23.2104305,  8.6374600436, 24986.0742741754, 4.5693825E-04, 7.5123334E-07,-3.5590172E-09,  -21.6363439, 17.6535544685, 14428.1257309177,-4.3700174E-04,-3.7292838E-07, 1.7552195E-09,  -16.6747239,  6.7261374666,  8399.6791003405,-3.5757942E-05, 3.2589854E-08,-2.0880440E-10,
            14.4026890,  4.9010662531, -9443.3199839914,-5.2312637E-04,-6.8728642E-07, 3.2502879E-09,  -12.8314035, 14.3664102239, 23243.1437596606, 8.8788511E-05, 3.1374165E-07,-1.4406287E-09,  -11.6499478, 22.3646636130, 31085.5085803679,-1.3237624E-04, 1.2789385E-07,-6.1745870E-10,  -10.4447578, 16.6788391144, 32200.1371396342, 2.3843738E-04, 5.6476915E-07,-2.6814075E-09,
            10.3211071,  8.7119194804, -1324.1780250970, 6.1854469E-05, 7.3846820E-08,-3.4916281E-10,   10.0562033,  7.2997465071, -1742.9305145148,-3.6814974E-04,-4.3749170E-07, 2.1183885E-09,   -9.8844667, 12.0539813334, 14286.1503796870,-6.0860358E-05, 6.2714140E-08,-1.9984990E-10,    8.7515625,  6.3563649081, -9652.8694498221,-9.0458282E-05,-1.7656429E-07, 8.3717626E-10,
            -8.3791067,  4.4137085761,  -557.3142796331,-1.8540681E-04,-2.1843765E-07, 1.0319744E-09,   -7.0026961, -3.1834384995,-16029.0808942018,-3.0728938E-04,-5.0020584E-07, 2.3182384E-09,    6.3220032,  9.1248177206, 16100.0685698171, 1.1921869E-04, 2.8238458E-07,-1.3407038E-09,    5.7508579,  6.2387797896, 17285.6848046987, 3.0196162E-04, 5.0143862E-07,-2.4271179E-09,
            -4.9501349,  9.6984267611,  5957.4589549619,-2.1317311E-04,-1.8769697E-07, 9.8648918E-10,   -4.4211770,  3.0260949818,  -209.5494658307, 4.3266809E-04, 5.1072212E-07,-2.4131116E-09,    4.1311145, 11.0674740526,  7004.5133996281, 2.1416722E-04, 3.2425793E-07,-1.5355019E-09,   -3.9579827, 20.0522347225, 22128.5152003943,-2.8202511E-04,-1.2313366E-07, 6.2332010E-10,
            3.2582371, 14.8106422192, 14985.4400105508,-2.5159493E-04,-1.5449073E-07, 7.2324505E-10,   -3.1483020,  4.8266068163, 16866.9323152810,-1.2804259E-04,-9.8998954E-09, 4.0433461E-11,    2.6164092, 14.2801588604, 24499.7476701576, 8.3460748E-05, 3.1497443E-07,-1.5495082E-09,    2.3536310,  9.5259240342,  8470.6667759558,-2.2382863E-04,-1.8523141E-07, 7.6873027E-10,
            -2.1171283, -0.8710096090, -7072.0875142282,-1.5764051E-04,-2.4917833E-07, 1.0774596E-09,   -1.8970368, 17.6966801503, 13799.8237756692,-4.3433786E-04,-3.7354477E-07, 1.8096592E-09,   -1.7385258,  2.0581540038, -8886.0057043583,-3.3771956E-04,-4.6884877E-07, 2.2183135E-09,   -1.5713944, 22.4077892948, 30457.2066251194,-1.2971236E-04, 1.2727746E-07,-5.6301898E-10,
            -1.4225541, 24.7202181853, 39414.2000050930, 1.9936508E-05, 3.7830496E-07,-1.8037978E-09,   -1.4189284, 17.1661967915, 23314.1314352759,-9.9282182E-05, 9.5920387E-08,-4.6309403E-10,    1.1655364,  3.8400995356,  9585.2953352221, 1.4698499E-04, 2.5164390E-07,-1.2952185E-09,   -1.1169371, 10.9930146158, 33314.7656989005, 6.0925100E-04, 1.0016445E-06,-4.7453563E-09,
            1.0656723,  1.4845449633,  1256.6039104970,-5.3277630E-06, 1.2327842E-09,-1.0887946E-10,    1.0586190, 11.9220903668,  8364.7398411275,-2.1850087E-04,-1.8646419E-07, 8.7760973E-10,   -0.9333176,  9.0816920389, 16728.3705250656, 1.1655481E-04, 2.8300097E-07,-1.3951435E-09,    0.8624328, 12.4550876470,  6656.7485858257,-4.0390768E-04,-4.0490184E-07, 1.9095841E-09,
            0.8512404,  4.3705828944,    70.9876756153,-1.8807069E-04,-2.1782126E-07, 9.7753467E-10,   -0.8488018, 16.7219647962, 31571.8351843857, 2.4110126E-04, 5.6415276E-07,-2.6269678E-09,   -0.7956264,  3.5134526588, -9095.5551701890, 9.4948529E-05, 4.1873358E-08,-1.9479814E-10};
    private static final double M31[] = {
            0.5139500, 12.0108556517, 14914.4523349355,-6.3524240E-05, 6.3330532E-08,-2.5428962E-10,    0.3824500,  9.6553010794,  6585.7609102104,-2.1583699E-04,-1.8708058E-07, 9.3204945E-10,    0.3265400,  3.9694765808,  7700.3894694766, 1.5497663E-04, 2.4979472E-07,-1.1318993E-09,    0.2639600,  0.7416325637,  8956.9933799736, 1.4964887E-04, 2.5102751E-07,-1.2407788E-09,
            0.1230200, -1.6139220085,   628.3019552485,-2.6638815E-06, 6.1639211E-10,-5.4439728E-11,    0.0775400,  8.7830116346, 16171.0562454324,-6.8852003E-05, 6.4563317E-08,-3.6316908E-10,    0.0606800,  6.4274570623,  7842.3648207073,-2.2116475E-04,-1.8584780E-07, 8.2317000E-10,    0.0497000, 12.0539813334, 14286.1503796870,-6.0860358E-05, 6.2714140E-08,-1.9984990E-10};
    private static final double M1n[] = { 3.81034392032, 8.39968473021E+03,-3.31919929753E-05, //月球平黃經(jīng)系數(shù)
            3.20170955005E-08,-1.53637455544E-10};

    // ==================日位置計算===================
    private double EnnT = 0; // 調(diào)用Enn前先設(shè)置EnnT時間變量

    // 計算E10,E11,E20等,即:某一組周期項或泊松項算出,計算前先設(shè)置EnnT時間
    public double Enn(double[] F) {
        double v = 0;
        for (int i = 0; i < F.length; i += 3) {
            v += F[i] * Math.cos(F[i + 1] + EnnT * F[i + 2]);
        }
        return v;
    }

    // 返回地球位置,日心Date黃道分點坐標
    public double[] earCal(double jd) {
        EnnT = jd / 365250;
        double llr[] = new double[3];
        double t1 = EnnT, t2 = t1 * t1, t3 = t2 * t1, t4 = t3 * t1, t5 = t4
                * t1;
        llr[0] = Enn(E10) + Enn(E11) * t1 + Enn(E12) * t2 + Enn(E13) * t3
                + Enn(E14) * t4 + Enn(E15) * t5;
        llr[1] = Enn(E20) + Enn(E21) * t1;
        llr[2] = Enn(E30) + Enn(E31) * t1 + Enn(E32) * t2 + Enn(E33) * t3;
        llr[0] = rad2mrad(llr[0]);
        return llr;
    }

    // 傳回jd時刻太陽的地心視黃經(jīng)及黃緯
    public double[] sunCal2(double jd) {
        double[] sun = earCal(jd);
        sun[0] += Math.PI;
        sun[1] = -sun[1]; // 計算太陽真位置
        ZD d = nutation(jd);
        sun[0] = rad2mrad(sun[0] + d.Lon); // 補章動
        addGxc(jd, sun); // 補周年黃經(jīng)光行差
        return sun; // 返回太陽視位置
    }

    // ==================月位置計算===================
    private double MnnT = 0; // 調(diào)用Mnn前先設(shè)置MnnT時間變量

    // 計算M10,M11,M20等,計算前先設(shè)置MnnT時間
    public double Mnn(double[] F) {
        double v = 0, t1 = MnnT, t2 = t1 * t1, t3 = t2 * t1, t4 = t3 * t1;
        for (int i = 0; i < F.length; i += 6) {
            v += F[i]
                    * Math.sin(F[i + 1] + t1 * F[i + 2] + t2 * F[i + 3] + t3
                    * F[i + 4] + t4 * F[i + 5]);
        }
        return v;
    }


    // 返回月球位置,返回地心Date黃道坐標
    public double[] moonCal(double jd) {
        MnnT = jd / 36525;
        double t1 = MnnT, t2 = t1 * t1, t3 = t2 * t1, t4 = t3 * t1;
        double[] llr = new double[3];
        llr[0] = (Mnn(M10) + Mnn(M11) * t1 + Mnn(M12) * t2) / rad;
        llr[1] = (Mnn(M20) + Mnn(M21) * t1) / rad;
        llr[2] = (Mnn(M30) + Mnn(M31) * t1) * 0.999999949827;
        llr[0] = llr[0] + M1n[0] + M1n[1] * t1 + M1n[2] * t2 + M1n[3] * t3
                + M1n[4] * t4;
        llr[0] = rad2mrad(llr[0]); // 地心Date黃道原點坐標(不含歲差)
        addPrece(jd, llr); // 補歲差
        return llr;
    }

    // 傳回月球的地心視黃經(jīng)及視黃緯
    public double[] moonCal2(double jd) {
        double[] moon = moonCal(jd);
        ZD d = nutation(jd);
        moon[0] = rad2mrad(moon[0] + d.Lon); // 補章動
        return moon;
    }

    // 傳回月球的地心視赤經(jīng)及視赤緯
    public double[] moonCal3(double jd) {
        double[] moon = moonCal(jd);
        HCconv(moon, hcjj1(jd));
        nutationRaDec(jd, moon); // 補赤經(jīng)及赤緯章動
        // 如果黃赤轉(zhuǎn)換前補了黃經(jīng)章動及交章動,就不能再補赤經(jīng)赤緯章動
        return moon;
    }

    // ==================地心坐標中的日月位置計算===================
    public double jiaoCai(int lx, double t, double jiao) {
        // lx=1時計算t時刻日月角距與jiao的差, lx=0計算t時刻太陽黃經(jīng)與jiao的差
        double[] sun = earCal(t); // 計算太陽真位置(先算出日心坐標中地球的位置)
        sun[0] += Math.PI;
        sun[1] = -sun[1]; // 轉(zhuǎn)為地心坐標
        addGxc(t, sun); // 補周年光行差
        if (lx == 0) {
            ZD d = nutation(t);
            sun[0] += d.Lon; // 補黃經(jīng)章動
            return rad2mrad(jiao - sun[0]);
        }
        double[] moon = moonCal(t); // 日月角差與章動無關(guān)
        return rad2mrad(jiao - (moon[0] - sun[0]));
    }

    // ==================已知位置反求時間===================
    public double jiaoCal(double t1, double jiao, int lx) {
        // t1是J2000起算儒略日數(shù)
        // 已知角度(jiao)求時間(t)
        // lx=0是太陽黃經(jīng)達某角度的時刻計算(用于節(jié)氣計算)
        // lx=1是日月角距達某角度的時刻計算(用于定朔望等)
        // 傳入的t1是指定角度對應(yīng)真時刻t的前一些天
        // 對于節(jié)氣計算,應(yīng)滿足t在t1到t1+360天之間,對于Y年第n個節(jié)氣(n=0是春分),t1可取值Y*365.2422+n*15.2
        // 對于朔望計算,應(yīng)滿足t在t1到t1+25天之間,在此范圍之外,求右邊的根
        double t2 = t1, t = 0, v;
        if (lx == 0) {
            t2 += 360; // 在t1到t2范圍內(nèi)求解(范氣360天范圍),結(jié)果置于t
        }else {
            t2 += 25;
        }
        jiao *= Math.PI / 180; // 待搜索目標角
        // 利用截弦法計算
        double v1 = jiaoCai(lx, t1, jiao); // v1,v2為t1,t2時對應(yīng)的黃經(jīng)
        double v2 = jiaoCai(lx, t2, jiao);
        if (v1 < v2) {
            v2 -= 2 * Math.PI; // 減2pi作用是將周期性角度轉(zhuǎn)為連續(xù)角度
        }
        double k = 1, k2; // k是截弦的斜率
        for (int i = 0; i < 10; i++) { // 快速截弦求根,通常截弦三四次就已達所需精度
            k2 = (v2 - v1) / (t2 - t1); // 算出斜率
            if (Math.abs(k2) > 1e-15) {
                k = k2; // 差商可能為零,應(yīng)排除
            }
            t = t1 - v1 / k;
            v = jiaoCai(lx, t, jiao);// 直線逼近法求根(直線方程的根)
            if (v > 1) {
                v -= 2 * Math.PI; // 一次逼近后,v1就已接近0,如果很大,則應(yīng)減1周
            }
            if (Math.abs(v) < 1e-8) {
                break; // 已達精度
            }
            t1 = t2;
            v1 = v2;
            t2 = t;
            v2 = v; // 下一次截弦
        }
        return t;
    }

    //==================節(jié)氣計算===================
    public static final String jqB[] = { //節(jié)氣表
            "春分","清明","谷雨","立夏","小滿","芒種","夏至","小暑","大暑","立秋","處暑","白露",
            "秋分","寒露","霜降","立冬","小雪","大雪","冬至","小寒","大寒","立春","雨水","驚蟄"};

    public String JQtest(int y) { // 節(jié)氣使計算范例,y是年分,這是個測試函數(shù)
        double jd = 365.2422 * (y - 2000), q;
        String s1, s2;
        String result = "";
        for (int i = 0; i < 24; i++) {
            q = jiaoCal(jd + i * 15.2, i * 15, 0);
            q = q + J2000 + (double)8 / 24; // 計算第i個節(jié)氣(i=0是春風),結(jié)果轉(zhuǎn)為北京時
            setFromJD(q, true);
            s1 = toStr(); // 將儒略日轉(zhuǎn)成世界時
            setFromJD(q, false);
            s2 = toStr(); // 將儒略日轉(zhuǎn)成日期格式(輸出日期形式的力學(xué)時)
            System.out.println(jqB[i] + " : " + s1 + " " + s2); // 顯示
            result = result + jqB[i] + " : " + s1 + " " + s2 + "\n";
        }
        return result;
    }

    // =================定朔弦望計算========================
    public void dingSuo(int y, double arc) { // 這是個測試函數(shù)
        double jd = 365.2422 * (y - 2000), q;
        String s1, s2;
        System.out.println("月份:世界時  原子時");
        for (int i = 0; i < 12; i++) {
            q = jiaoCal(jd + 29.5 * i, arc, 1) + J2000 + 8 / 24; // 計算第i個節(jié)氣(i=0是春風),結(jié)果轉(zhuǎn)為北京時
            setFromJD(q, true);
            s1 = toStr(); // 將儒略日轉(zhuǎn)成世界時
            setFromJD(q, false);
            s2 = toStr(); // 將儒略日轉(zhuǎn)成日期格式(輸出日期形式的力學(xué)時)
            System.out.println((i + 1) + "月 : " + s1 + " " + s2); // 顯示
        }
    }

    //=================農(nóng)歷計算========================
    /*****
     * 1.冬至所在的UTC日期保存在A[0],根據(jù)"規(guī)定1"得知在A[0]之前(含A[0])的那個UTC朔日定為年首日期
     * 冬至之后的中氣分保存在A[1],A[2],A[3]...A[13],其中A[12]又回到了冬至,共計算13次中氣
     * 2.連續(xù)計算冬至后14個朔日,即起算時間時A[0]+1 14個朔日編號為0,1...12,保存在C[0],C[1]...C[13]
     * 這14個朔日表示編號為0月,1月,...12月0月的各月終止日期,但要注意實際終止日是新月初一,不屬本月
     * 這14個朔日同樣表示編號為1月,2月...的開始日期
     * 設(shè)某月編號為n,那么開始日期為C[n-1],結(jié)束日期為C[n],如果每月都含中氣,該月所含的中氣為A[n]
     * 注:為了全總計算出13個月的大小月情況,須算出14個朔日。 3.閏年判斷:含有13個月的年份是閏年 當?shù)?3月(月編號12月)終止日期大于冬至日,
     * 即C[12]〉A(chǔ)[12], 那么該月是新年,本年沒月12月,本年共12個月
     * 當?shù)?3月(月編號12月)終止日期小等于冬至日,即C[12]≤A[12],那么該月是本年的有效月份,本年共13個月 4.閏年中處理閏月:
     * 13個月中至少1個月份無中氣,首個無中氣的月置閏,在n=1...12月中找到閏月,即C[n]≤A[n]
     * 從農(nóng)歷年首的定義知道,0月一定含有中氣冬至,所以不可能是閏月。 首月有時很貪心,除冬至外還可能再吃掉本年或前年的另一個中氣
     * 定出閏月后,該月及以后的月編號減1 5.以上所述的月編號不是日常生活中說的"正月","二月"等月名稱:
     * 如果"建子",0月為首月,如果"建寅",2月的月名"正月",3月是"二月",其余類推
     *****/
    private static final String yueMing[] = { "正", "二", "三", "四", "五", "六",
            "七", "八", "九", "十", "十一", "十二" };

    public String paiYue(int y) { // 農(nóng)歷排月序計算,可定出農(nóng)歷
        double zq[] = new double[20];
        double jq[] = new double[20];
        double hs[] = new double[20];

        // var zq=new Array(),jq=new Array(), hs=new Array(); //中氣表,節(jié)氣表,日月合朔表

        // 從冬至開始,連續(xù)計算14個中氣時刻
        int i;
        double t1 = 365.2422 * (y - 2000) - 50; // 農(nóng)歷年首始于前一年的冬至,為了節(jié)氣中氣一起算,取前年大雪之前
        for (i = 0; i < 14; i++) { // 計算節(jié)氣(從冬至開始),注意:返回的是力學(xué)時
            zq[i] = jiaoCal(t1 + i * 30.4, i * 30 - 90, 0); // 中氣計算,冬至的太陽黃經(jīng)是270度(或-90度)
            jq[i] = jiaoCal(t1 + i * 30.4, i * 30 - 105, 0); // 順便計算節(jié)氣,它不是農(nóng)歷定朔計算所必需的
        }
        // 在冬至過后,連續(xù)計算14個日月合朔時刻
        double dongZhiJia1 = zq[0] + 1 - Dint_dec(zq[0], 8, false); // 冬至過后的第一天0點的儒略日數(shù)
        hs[0] = jiaoCal(dongZhiJia1, 0, 1); // 首月結(jié)束的日月合朔時刻
        for (i = 1; i < 14; i++) {
            hs[i] = jiaoCal(hs[i - 1] + 25, 0, 1);
        }
        // 算出中氣及合朔時刻的日數(shù)(不含小數(shù)的日數(shù)計數(shù),以便計算日期之間的差值)
        double A[] = new double[20];
        double B[] = new double[20];
        double C[] = new double[20];
        // var A=new Array(), B=new Array(), C=new Array();
        for (i = 0; i < 14; i++) { // 取當?shù)豒TC日數(shù)的整數(shù)部分
            A[i] = Dint_dec(zq[i], 8, true);
            B[i] = Dint_dec(jq[i], 8, true);
            C[i] = Dint_dec(hs[i], 8, true);
        }
        // 閏月及大小月分析
        int tot = 12, nun = -1;
        int yn[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0 }; // 月編號
        if (C[12] <= A[12]) { // 閏月分析
            yn[12] = 12;
            tot = 13; // 編號為12的月是本年的有效月份,本年總月數(shù)13個
            for (i = 1; i < 13; i++) {
                if (C[i] <= A[i]) {
                    break;
                }
            }
            for (nun = i - 1; i < 13; i++) {
                yn[i - 1]--; // 注意yn中不含農(nóng)歷首月(所以取i-1),在公歷中農(nóng)歷首月總是去年的所以不多做計算
            }
        }
        String syn[] = new String[20];
        for (i = 0; i < tot; i++) { // 轉(zhuǎn)為建寅月名,并做大小月分析
            syn[i] = yueMing[(yn[i] + 10) % 12]; // 轉(zhuǎn)建寅月名
            if (i == nun) {
                syn[i] += "閏";
            }else {
                syn[i] += "月"; // 標記是否閏月
            }
            if (C[i + 1] - C[i] > 29) {
                syn[i] += "大";
            }else {
                syn[i] += "小"; // 標記大小月
            }
        }
        // 顯示
        String out = "節(jié)氣    手表時            中氣    手表時            農(nóng)歷月   朔的手表時\n";
        for (i = 0; i < tot; i++) {
            int zm = (i * 2 + 18) % 24;
            int jm = (i * 2 + 17) % 24; // 中氣名節(jié)氣名
            setFromJD(jq[i] + J2000 + (double)8 / 24, true);
            out += jqB[jm] + ":" + toStr() + " "; // 顯示節(jié)氣
            setFromJD(zq[i] + J2000 + (double)8 / 24, true);
            out += jqB[zm] + ":" + toStr() + " "; // 顯示中氣
            setFromJD(hs[i] + J2000 + (double)8 / 24, true);
            out += syn[i] + ":" + toStr() + "\n"; // 顯示日月合朔
        }
        System.out.println(out);
        return out;
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市潭苞,隨后出現(xiàn)的幾起案子吐限,更是在濱河造成了極大的恐慌唇聘,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛇耀,死亡現(xiàn)場離奇詭異结闸,居然都是意外死亡唇兑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門桦锄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扎附,“玉大人,你說我怎么就攤上這事察纯∨撩蓿” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵饼记,是天一觀的道長香伴。 經(jīng)常有香客問我,道長具则,這世上最難降的妖魔是什么即纲? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮博肋,結(jié)果婚禮上低斋,老公的妹妹穿的比我還像新娘。我一直安慰自己匪凡,他們只是感情好膊畴,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著病游,像睡著了一般唇跨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上衬衬,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天买猖,我揣著相機與錄音,去河邊找鬼滋尉。 笑死玉控,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的狮惜。 我是一名探鬼主播高诺,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼碾篡!你這毒婦竟也來了懒叛?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤耽梅,失蹤者是張志新(化名)和其女友劉穎薛窥,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體眼姐,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡诅迷,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了众旗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片罢杉。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖贡歧,靈堂內(nèi)的尸體忽然破棺而出滩租,到底是詐尸還是另有隱情赋秀,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布律想,位于F島的核電站猎莲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏技即。R本人自食惡果不足惜著洼,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望而叼。 院中可真熱鬧身笤,春花似錦、人聲如沸葵陵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脱篙。三九已至莹弊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涡尘,已是汗流浹背忍弛。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留考抄,地道東北人细疚。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像川梅,于是被迫代替她去往敵國和親疯兼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容