以文本方式查看主题

-  中华农历论坛  (http://bbs.nongli.net/index.asp)
--  历法知识  (http://bbs.nongli.net/list.asp?boardid=2)
----  [求助]就许建伟先生的《天文算法》一书中的疑点请教各位大侠  (http://bbs.nongli.net/dispbbs.asp?boardid=2&id=65406)

--  作者:看不懂算法
--  发布时间:2014/11/2 17:01:00
--  [求助]就许建伟先生的《天文算法》一书中的疑点请教各位大侠
    许建伟先生以及其同好们翻译的《天文算法》一书很好,解决了大部分业余爱好者的难题。

    看了这本书,就想自己学着编写程序(自学的编写程序,不是专业出身),因为许建伟先生提供的是javascript版本的源文件,而我看不懂js语言,于是就想自己编代码来实现农历的计算功能。

    在参考《天文算法》一书的过程中,问题来了。里面的知识很多,我【无法确定哪些章节】是【农历的天文计算】需要掌握的知识点。

    我只想学习【农历的每年开始日期计算,农历的每月的开始日期计算,每个节气的时间计算(精确到秒%)】

    若有大侠肯把那些章节指出来,不胜感激,小生在此三拜了。

    下面,我就贴出自己编写的部分章节的VBA代码(可以在Excel中运行)

  \'VBA制作万年历的程序思路
\'1、先算出儒略日JD,在【第七章】
‘A = INT(Y/100)  B = 2 - A + INT(A/4)
‘JD = INT(365.25(Y+4716))+INT(30.6001(M+1))+D+B-1524.5 (7.1)
Function rlr(nian, yue, ri, shi, fen, miao) \'用年月日时分秒计算儒略日JD
a = Int(nian / 100)
b = 2 - a + Int(a / 4)
If yue = 1 Or yue = 2 Then
nian = nian - 1
yue = yue + 12
End If
fen = fen + miao / 60
shi = shi + fen / 60
ri = ri + shi / 24
rlr = Int(365.25 * (nian + 4716)) + Int(30.6001 * (yue + 1)) + ri + b - 1524.5
End Function



\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'\'以下不是必须的代码
\'闰年的判断
Function rn(nian) \'闰年平年的判断K
If nian Mod 400 = 0 Then
rn = 1
Else
If nian Mod 100 = 0 Then
rn = 2
Else
If nian Mod 4 = 0 Then
rn = 1
Else
rn = 2
End If
End If
End If
End Function
\'星期几的判断
Function xqj(rlr) \'星期几的判断
xqj = (rlr + 1.5) Mod 7
End Function
\'年内序数日的判断
Function nnxsr(nian, yue, ri) \'年内序数日的计算,一年内的第几日
k = rn(nian)
nnxsr = Int(275 * yue / 9) - k * Int((yue + 9) / 12) + ri - 30
End Function


--  作者:看不懂算法
--  发布时间:2014/11/2 17:06:00
--  
‘2、再求出力学时TD和世界时UT的差异ΔT,\'UT = TD –ΔT
Function shicha1(rlr) \'计算力学时和世界时的秒差ΔT,ΔT = -15 + (JD-2382148)2/41048480
a = rlr - 2382148
b = a * a
c = 41048480
shicha1 = -15 + b / c
End Function

Function shicha2(nian) \'计算力学时和世界时的秒差的另一种方法ΔT
a = nian - 1810
b = a * a
shicha2 = -15 + 0.00325 * b
End Function

Function shicha3(rlr) \'ΔT = 102.3 + 123.5T+32.5T2
a = sjs(rlr)
a2 = a * a
shicha3 = 102.3 + 123.5 * a + 32.5 * a2
End Function

‘世界时=力学时减去时差
Function ut(td, shicha1) \'UT = TD –ΔT
ut = ta - shicha1
End Function

\'计算儒略世纪数T
Function sjs(rlr) \'计算儒略世纪数T
sjs = (rlr - 2451545#) / 36525
End Function


--  作者:看不懂算法
--  发布时间:2014/11/2 17:06:00
--  
\'3、恒星时与格林尼治时间的关系 \'本文所述的时间指世界时UT,世界时(0h UT)表示世界时0点,(3h UT)表示世界时3点。如果没有特另申明,均指格林尼治子午圈时间。 \'格林尼治子午圈的恒星时可按如下计算: \'θo = 280.46061837 + 360.98564736629*(JD-2451545.0) + 0.000387933*T^2 - T^3/38710000 Function hxs(rlr) \'计算任意时刻的格林尼治平恒星时θo sjs1 = sjs(rlr) sjs2 = sjs1 * sjs1 sjs3 = sjs2 * sjs1 hxs1 = 280.46061837 + 360.98564736629 * (rlr - 2451545#) + 0.000387933 * sjs2 - sjs3 / 38710000 hxs = jdzh(hxs1) \'此时的数据是很大的度数,把±360之外的度数转换为360之内 hxs = hxs / 15 \'每15度是一个小时,360/24=15 h = Int(hxs) If h < 10 Then h = "0" & h m = Int((hxs - h) * 60) If m < 10 Then m = "0" & m s = (hxs - h - (m / 60)) * 3600 If s < 1 Then s = "0" & s hxs = h & "h" & m & "m" & s End Function
--  作者:看不懂算法
--  发布时间:2014/11/2 17:08:00
--  

这格式怎么这么乱呢?谁教教我怎么编排格式?
复制进去都是排好的格式,发表了就乱了。
--  作者:浪-淘-沙
--  发布时间:2014/11/3 21:56:00
--  
以下是引用看不懂算法在2014-11-2 17:08:00的发言:
这格式怎么这么乱呢?谁教教我怎么编排格式? 复制进去都是排好的格式,发表了就乱了。

需要把回车符自己加进去。估计与论坛的版本有关。

像我这样,每换一个段落,插入一个回车符。
回车符就是/b br,都要用尖括号刮起来。
--  作者:浪-淘-沙
--  发布时间:2014/11/3 21:58:00
--  
如果你计算的结果与《寿星天文历》的数据差很多,你要查看一下程序的代码,是哪里有错漏?
--  作者:zhanglei1953
--  发布时间:2014/11/6 10:23:00
--  
我已在论坛里发了EXCEL表计算节气时刻的程序,可以参考一下。
http://bbs.nongli.net/dispbbs_2_64668.html