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

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

来源:网络收集 时间:2026-08-28
导读: double[] moon = moonCal(t); // 日月角差与章动无关 return rad2mrad(jiao - (moon[0] - sun[0])); } // ==================已知位置反求时间=================== public double jiaoCal(double t1, double jiao,

double[] moon = moonCal(t); // 日月角差与章动无关 return rad2mrad(jiao - (moon[0] - sun[0])); }

// ==================已知位置反求时间=================== public double jiaoCal(double t1, double jiao, int lx) { // t1是J2000起算儒略日数 // 已知角度(jiao)求时间(t)

// lx=0是太阳黄经达某角度的时刻计算(用于节气计算)

// lx=1是日月角距达某角度的时刻计算(用于定朔望等) // 传入的t1是指定角度对应真时刻t的前一些天

// 对于节气计算,应满足t在t1到t1+360天之间,对于Y年第n个节气(n=0是春分),t1可取值Y*365.2422+n*15.2

// 对于朔望计算,应满足t在t1到t1+25天之间,在此范围之外,求右边的根 double t2 = t1, t = 0, v; if (lx == 0)

t2 += 360; // 在t1到t2范围内求解(范气360天范围),结果置于t else t2 += 25;

jiao *= Math.PI / 180; // 待搜索目标角 // 利用截弦法计算

double v1 = jiaoCai(lx, t1, jiao); // v1,v2为t1,t2时对应的黄经 double v2 = jiaoCai(lx, t2, jiao); if (v1 < v2)

v2 -= 2 * Math.PI; // 减2pi作用是将周期性角度转为连续角度 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; // 差商可能为零,应排除 t = t1 - v1 / k;

v = jiaoCai(lx, t, jiao);// 直线逼近法求根(直线方程的根) if (v > 1)

v -= 2 * Math.PI; // 一次逼近后,v1就已接近0,如果很大,则应减1周 if (Math.abs(v) < 1e-8) break; // 已达精度 t1 = t2; v1 = v2; t2 = t;

v2 = v; // 下一次截弦 } return t; }

//==================节气计算=================== public static final String jqB[] = { //节气表

\春分\清明\谷雨\立夏\小满\芒种\夏至\小暑\大暑\立秋\处暑\白露\ \秋分\寒露\霜降\立冬\小雪\大雪\冬至\小寒\大寒\立春\雨水\惊蛰\ public void JQtest(int y) { // 节气使计算范例,y是年分,这是个测试函数 double jd = 365.2422 * (y - 2000), q; String s1, s2;

for (int i = 0; i < 24; i++) { q = jiaoCal(jd + i * 15.2, i * 15, 0);

q = q + J2000 + (double)8 / 24; // 计算第i个节气(i=0是春风),结果转为北京时 setFromJD(q, true);

s1 = toStr(); // 将儒略日转成世界时 setFromJD(q, false);

s2 = toStr(); // 将儒略日转成日期格式(输出日期形式的力学时) System.out.println(jqB[i] + \显示 } }

// =================定朔弦望计算======================== public void dingSuo(int y, double arc) { // 这是个测试函数 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个节气(i=0是春风),结果转为北京时

setFromJD(q, true);

s1 = toStr(); // 将儒略日转成世界时 setFromJD(q, false);

s2 = toStr(); // 将儒略日转成日期格式(输出日期形式的力学时) System.out.println((i + 1) + \月 : \显示 } }

//=================农历计算======================== /*****

…… 此处隐藏:92字,全部文档内容请下载后查看。喜欢就下载吧 ……
万年历 - java算法实现(9).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)