教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 实用模板 >

万年历 - java算法实现(2)

来源:网络收集 时间:2026-08-28
导读: // 算出:jd转到当地UTC后,UTC日数的整数部分或小数部分 // 基于J2000力学时jd的起算点是12:00:00时,所以跳日时刻发生在12:00:00,这与日历计算发生矛盾 // 把jd改正为00:00:00起算,这样儒略日的跳日动作就与日期的跳

// 算出:jd转到当地UTC后,UTC日数的整数部分或小数部分

// 基于J2000力学时jd的起算点是12:00:00时,所以跳日时刻发生在12:00:00,这与日历计算发生矛盾

// 把jd改正为00:00:00起算,这样儒略日的跳日动作就与日期的跳日同步 // 改正方法为jd=jd+0.5-deltatT+shiqu/24 // 把儒略日的起点移动-0.5(即前移12小时)

// 式中shiqu是时区,北京的起算点是-8小时,shiqu取8 public double Dint_dec(double jd, int shiqu, boolean dec) { double u = jd + 0.5 - this.deltatT2(jd) + shiqu / 24; if (dec)

return Math.floor(u); // 返回整数部分 else

return u - Math.floor(u); // 返回小数部分 }

// 计算两个日期的相差的天数,输入字串格式日期,如:\ 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; // 备份原来的数据

this.setFromStr(d1.substring(0, 8) + \ double jd1 = this.toJD(false);

this.setFromStr(d2.substring(0, 8) + \ 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); }

// 返回黄赤交角(常规精度),短期精度很高 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; }

// 黄赤转换(黄赤坐标旋转)

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 }; // 太平黄经

private static final double GXC_k = 20.49552 / rad; // 光行差常数

// 恒星周年光行差计算(黄道坐标中)

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, …… 此处隐藏:1633字,全部文档内容请下载后查看。喜欢就下载吧 ……

万年历 - java算法实现(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/518894.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)