=begin
原脚本:寿星天文历
原作者: 许剑伟(福建莆田第十中学)
原作者关于版权问题的声明:
本程序是开源的,你可以使用其中的任意部分代码,但不得随意修改“天文算法(eph.js)”及“农历算法(lunar.js)中古历部分的数据及算法”。一旦修改可能影响万年历的准确性,如果你对天文学不太了解而仅凭对历法的热情,请不要对此做任何修改,以免弄巧成拙。
如果在你自己开发的软件中使用了本程序的核心算法及数据,你可以在你的软件中申明“数据或算法来源于寿星天文历”,也可以不申明,但不可以申明为它其它来源。如有异义,可与我共内探讨。
特别感谢中华农历网浪淘沙等人帮助我调试软件,作为天文历法,有幸结识这么多同好,一生难忘。
作者:许剑伟,2008年11月于家里。[email protected],13850262218
翻译:汪汪
说明:因为喜欢农历,又喜欢rmxp,所以特地把寿星天文历的部分内容翻译为rmxp脚本,目前功能比较简陋。只能计算二十四节气和朔月,以及农历月的大小关系。
未来有可能会继续翻译其他功能。
=end
#==============================================================================
# ■ Calendar
#------------------------------------------------------------------------------
# 处理历法的类。
# jqtest(y) 节气 ding_suo(y, arc=0) 月朔 pai_yue(y) 排月
#==============================================================================
class Calendar
#--------------------------------------------------------------------------
# ● 计算years年1月1日和yeare年1月1日之间的天数,
# 包括years年1月1日,但是不包括yeare年1月1日
#--------------------------------------------------------------------------
def calc_years_days(years,yeare)
days = 0
for i in years...yeare
next if i == 0
if is_leap_year(i)
days += 366
else
days += 365
end
end
return days
end
#--------------------------------------------------------------------------
# ● 判断是否是闰年
#--------------------------------------------------------------------------
def is_leap_year(year,ts=0)
year += 1 if year < 0
if year >= 1582
return true if year % 400 ==0
return false if year % 100 == 0
return true if year % 4 == 0
return false
elsif year < 1582
return true if year % 4 == 0
return false
elsif year >= 3200
return true if year % 172800 == 0
return false if year % 3200 == 0
return true if year % 400 ==0
return false if year % 100 == 0
return true if year % 4 == 0
return false
end
end
#--------------------------------------------------------------------------
# ● 某年某月的天数
#--------------------------------------------------------------------------
def days_of_month(year,month)
year = -1 if year == 0
if is_leap_year(year)
monthday= [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
else
monthday= [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
end
days = monthday[month-1]
days -=10 if (year==1582 and month == 10)
return days
end
def calc_years(ys,ye)
if ys>ye
i=ye;ye=ys;ys=i
end
if ye*ys>=0
years=ye-ys
else
years=ye-ys
end
return years
end
#--------------------------------------------------------------------------
# ● 判断两个日期的大小关系
#--------------------------------------------------------------------------
def ae_days(ys,ms,ds,ye,me,de)
if ys<ye or (ys==ye and ms<me) or (ys==ye and ms==me and ds<=de)
return true
else
return false
end
end
#--------------------------------------------------------------------------
# ● 计算一年中过去的天数,包括指定的这一天
#--------------------------------------------------------------------------
def calc_year_passed_days(year,month,day)
day = 5 if year==1582 and month==10 and day >= 5 and day <15
day -=10 if year==1582 and month==10 and day >= 15
passed_days = 0
for i in 1...month
passed_days += days_of_month(year,i)
end
passed_days += day
return passed_days
end
#--------------------------------------------------------------------------
# ● 计算一年中还剩下的天数,不包括指定的这一天
#--------------------------------------------------------------------------
def calc_year_rest_days(year,month,day)
day = 5 if year==1582 and month==10 and day >= 5 and day <15
day -=10 if year==1582 and month==10 and day >= 15
left_days = days_of_month(year,month) - day
for i in month + 1..12
left_days += days_of_month(year,i)
end
return left_days
end
#--------------------------------------------------------------------------
# ● 计算日期相差天数
#--------------------------------------------------------------------------
def calc_days(ys,ms,ds,ye,me,de)
ys=-1 if ys==0
ye=-1 if ye==0
if !ae_days(ys,ms,ds,ye,me,de)
i=ye;ye=ys;ys=i
i=me;me=ms;ms=i
i=de;de=ds;ds=i
end
days = calc_year_rest_days(ys, ms, ds)
if ys != ye #/*不是同一年的日期*/
if calc_years(ys,ye) >= 2 #*间隔超过一年,要计算间隔的整年时间*/
days += calc_years_days(ys+1,ye)
end
days += calc_year_passed_days(ye, me, de)
else
days = days - calc_year_rest_days(ye, me, de)
end
return days
end
#--------------------------------------------------------------------------
# ● 计算日期在本年内的编号,1月1日为 1
#--------------------------------------------------------------------------
def day_year_id(year,month,day)
id=1 + calc_days(year,1,1,year,month,day).truncate
return id
end
#--------------------------------------------------------------------------
# ● 判断是否是何种历法
#--------------------------------------------------------------------------
def is_lf(year,month,day)
return 1 if year > 1582 or
(year ==1582 and month >10) or
(year ==1582 and month ==10 and day >= 15)
return -1 if year < 1582 or
(year ==1582 and month <10) or
(year ==1582 and month ==10 and day < 5)
return 0
end
#--------------------------------------------------------------------------
# ● 由日期计算儒略日
#--------------------------------------------------------------------------
def day_jd(year, month, day)
year +=1 if year < 0
day = 15 if is_lf(year, month, day) == 0
if month <= 2
month += 12
year -= 1
end
a = (year/100).truncate
b = 2 - a + (a/4).truncate
b= 0 if is_lf(year, month, day) == -1
k=(365.25*(year+4716)).truncate+(30.6001*(month+1)).truncate
jd = k + day + b - 1524.5
return jd
end
#--------------------------------------------------------------------------
# ● 由日期计算儒略日
#--------------------------------------------------------------------------
def daytime_jd(year, month, day,h,m,s)
year +=1 if year < 0
day = 15 if is_lf(year, month, day) == 0
if month <= 2
month += 12
year -= 1
end
a = (year/100).truncate
b = 2 - a + (a/4).truncate
b= 0 if is_lf(year, month, day) == -1
k=(365.25*(year+4716)).truncate+(30.6001*(month+1)).truncate
jd = k + day + b - 1524.5
t = time_day(h,m,s)
jd += t
return jd
end
#--------------------------------------------------------------------------
# ● 由儒略日计算日期
#--------------------------------------------------------------------------
def jd_day(jd)
jd += 0.5
z= jd.truncate
f= jd-jd.truncate
if z < 2299161
a = z
elsif z >= 2299161
x= ((z-1867216.25)/36524.25).truncate
a=z+1+x-(x / 4 ).truncate
end
b = a+1524
c = ((b-122.1)/365.25).truncate
d = (365.25*c).truncate
e = ((b-d)/30.6001).truncate
day = b - d - (30.6001*e).truncate# + f
month = e - 1 if e < 14
month = e - 13 if e==14 or e==15
year = c - 4716 if month>2
year = c - 4715 if month ==1 or month==2
t=day_time(f)
return year,month,day,t[0],t[1],t[2]
end
#--------------------------------------------------------------------------
# ● 计算某一天是星期几
#--------------------------------------------------------------------------
def is_week(year,month,day)
jd = day_jd(year,month,day)
jd+=1.5
w=(jd%7).truncate
return w
end
#--------------------------------------------------------------------------
# ● 时分秒变成天(小数)
#--------------------------------------------------------------------------
def time_day(h,m,s)
day =(h*60*60+m*60+s)/(24*60*60.0)
return day
end
#--------------------------------------------------------------------------
# ● 读取天(小数)的时分秒
#--------------------------------------------------------------------------
def day_time(d)
f=d-d.truncate
f=f*24.000001
h=f.truncate
f-=h
f*=60.000001
m=f.truncate
f-=m
f*=60.000001
s=f.truncate
return h,m,s
end
#--------------------------------------------------------------------------
# ● 数字(小数)变成小时
#--------------------------------------------------------------------------
def num_time(num)
f=num-num.truncate
f=(f*1000000).truncate
s = f % 100
m = (f/100).truncate % 100
h = (f/10000).truncate
return h,m,s
end
#--------------------------------------------------------------------------
# ● 数字变成年月日
#--------------------------------------------------------------------------
def num_day(num)
i = num.truncate
day = i % 100
month = (i/100).truncate % 100
year = (i/10000).truncate
return year,month,day
end
#--------------------------------------------------------------------------
# ● 数字变成年月日时分秒
#--------------------------------------------------------------------------
def num_daytime(num)
t = num_time(num)
h = t[0]
m = t[1]
s = t[2]
d = num_day(num)
year =d[0]
month=d[1]
day =d[2]
return year,month,day, h,m,s
end
#--------------------------------------------------------------------------
# ● 数字变成儒略日
#--------------------------------------------------------------------------
def num_daytime(num)
t = num_time(num)
h = t[0]
m = t[1]
s = t[2]
d = num_day(num)
year =d[0]
month=d[1]
day =d[2]
jd = daytime_jd(year,month,day, h,m,s)
return jd
end
#--------------------------------------------------------------------------
# ● 计算世界时与原子时之差,传入年,得到秒
#--------------------------------------------------------------------------
def deltatt(y)
i = 0
while i <100
break if (y < @dts[i + 5] or i == 95)
i += 5
end
t1 = (y - @dts[i]) / (@dts[i + 5] - @dts[i]) * 10;
t2 = t1 * t1;
t3 = t2 * t1;
t =@dts[i + 1] + @dts[i + 2] * t1 + @dts[i + 3] * t2 + @dts[i + 4] * t3
return t
end
#--------------------------------------------------------------------------
# ● 传入J2000开始的儒略日 ,得到天(小数)
#--------------------------------------------------------------------------
def deltatt2(jd)
year = jd_day(jd+@j2000)[0]
t = deltatt(year) / 86400.0
return t
end
#--------------------------------------------------------------------------
# ● 返回黄赤交角(常规精度),短期精度很高
#--------------------------------------------------------------------------
def hcjj1(t)
t1 = t / 36525
t2 = t1 * t1
t3 = t2 * t1
i=(@hcjjB[0] + @hcjjB[1]*t1+ @hcjjB[2] * t2 + @hcjjB[3] * t3) / @rad
return i
end
#--------------------------------------------------------------------------
# ● 黄赤转换(黄赤坐标旋转)
#--------------------------------------------------------------------------
# 黄道赤道坐标变换,赤到黄E取负
def hcconv(jw,e)
hj = rad2mrad(jw[0])
hw = jw[1]
sine = Math.sin(e)
cose = Math.cos(e)
sinw = cose * Math.sin(hw) + sine * Math.cos(hw) * Math.sin(hj)
j = Math.atan2(Math.sin(hj) * cose - Math.tan(hw) * sine, Math.cos(hj));
jw[0] = rad2mrad(j)
jw[1] = Math.asin(sinw)
return jw
end
#--------------------------------------------------------------------------
# ● 补岁差
#--------------------------------------------------------------------------
def add_prece(jd, zb)
t = 1
v = 0
t1 = jd / 365250
for i in 1...8
t *= t1
v += @preceB[i] * t
end
zb[0] = rad2mrad(zb[0] + (v + 2.9965 * t1) / @rad)
return zb
end
#--------------------------------------------------------------------------
# ● 对超过0-2PI的角度转为0-2PI
#--------------------------------------------------------------------------
def rad2mrad(v)
v = v % (2 * Math::PI)
return v + 2 * Math::PI if v < 0
return v
end
#--------------------------------------------------------------------------
# ● 儒略日转变为j2000儒略日
#--------------------------------------------------------------------------
def jd2000(jd)
jd -= @j2000
return jd
end
#--------------------------------------------------------------------------
# ● 恒星周年光行差计算(黄道坐标中)
#--------------------------------------------------------------------------
def add_gxc( t, zb)
t1 = t / 36525.0
t2 = t1 * t1
t3 = t2 * t1
t4 = t3 * t1
l = @gxc_l[0] + @gxc_l[1] * t1 + @gxc_l[2] * t2 +
@gxc_l[3] * t3 + @gxc_l[4] * t4
p = @gxc_p[0] + @gxc_p[1] * t1 + @gxc_p[2] * t2
e = @gxc_e[0] + @gxc_e[1] * t1 + @gxc_e[2] * t2
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])
return zb
end
#--------------------------------------------------------------------------
# ● 计算黄经章动及交角章动
#--------------------------------------------------------------------------
def nutation(t)
d=[]
d[0]=0
d[1]= 0
t= t/36525.0
t1 = t
t2 = t1 * t1
t3 = t2 * t1
t4 = t3 * t1 # t5=t4*t1
i = 0
while i < @nutB.length
c = @nutB[i] + @nutB[i + 1] * t1 + @nutB[i + 2] * t2 + @nutB[i + 3]*
t3 + @nutB[i + 4] * t4
# 黄经章动
d[0] += (@nutB[i + 5] + @nutB[i + 6] * t / 10) * Math.sin(c)
# 交角章动
d[1]+= (@nutB[i + 7] + @nutB[i + 8] * t / 10) * Math.cos(c)
i += 9
end
# 黄经章动
d[0] /= @rad * 10000
# 交角章动
d[1]/= @rad * 10000
return d
end
#--------------------------------------------------------------------------
# ● 本函数计算赤经章动及赤纬章动
#--------------------------------------------------------------------------
def nutation_radec(t, zb)
ra = zb[0], dec = zb[1]
e = hcjj1(t),
sine = Math.sin(e)
# 计算黄赤交角
cose = Math.cos(e)
# 计算黄经章动及交角章动
d = nutation(t)
cosra = Math.cos(ra)
sinra = Math.sin(ra)
tandec = Math.tan(dec)
zb[0] += (cose + sine * sinra * tandec) * d[0]- cosra * tandec * d[1]
# 赤经章动 赤纬章动
zb[1] += sine * cosra * d[0]+ sinra * d[1]
zb[0] = rad2mrad(zb[0])
return zb
end
#--------------------------------------------------------------------------
# ● 日位置计算
#--------------------------------------------------------------------------
# 计算E10,E11,E20等,即:某一组周期项或泊松项算出,计算前先设置EnnT时间
def enn(f)
v = 0
i=0
while i < f.length
v += f[i] * Math.cos(f[i + 1] + @ennt * f[i + 2])
i += 3
end
return v
end
# 返回地球位置,日心Date黄道分点坐标
def ear_cal(jd)
@ennt = jd / 365250.0
r = []
t1 = @ennt
t2 = t1 * t1
t3 = t2 * t1
t4 = t3 * t1
t5 = t4 * t1
r[0] = enn(@e10) + enn(@e11) * t1 + enn(@e12) * t2 + enn(@e13) * t3
+ enn(@e14) * t4 + enn(@e15) * t5
r[1] = enn(@e20) + enn(@e21) * t1
r[2] = enn(@e30) + enn(@e31) * t1 + enn(@e32) * t2 + enn(@e33) * t3
r[0] = rad2mrad(r[0])
return r
end
# 传回jd时刻太阳的地心视黄经及黄纬
def sun_cal2(jd)
sun = ear_cal(jd)
sun[0] += Math::PI
sun[1] = -sun[1] # 计算太阳真位置
d = nutation(jd)
sun[0] = rad2mrad(sun[0] + d[0]) # 补章动
sun = add_gxc(jd, sun) # 补周年黄经光行差
return sun # 返回太阳视位置
end
#--------------------------------------------------------------------------
# ● 月位置计算
#--------------------------------------------------------------------------
# 计算M10,M11,@m30等,计算前先设置MnnT时间
def mnn(f)
v = 0
t1 = @mnnt
t2 = t1 * t1
t3 = t2 * t1
t4 = t3 * t1
i = 0
while i < f.length
v += f[i] * Math.sin(f[i + 1] + t1 * f[i + 2] + t2 * f[i + 3] + t3*
f[i + 4] + t4 * f[i + 5])
i += 6
end
return v
end
# 返回月球位置,返回地心Date黄道坐标
def moon_cal(jd)
@mnnt = jd / 36525.0
t1 = @mnnt
t2 = t1 * t1
t3 = t2 * t1
t4 = t3 * t1
r = []
r[0] = (mnn(@m10) + mnn(@m11) * t1 + mnn(@m12) * t2) / @rad
r[1] = (mnn(@m20) + mnn(@m21) * t1) / @rad
r[2] = (mnn(@m30) + mnn(@m31) * t1) * 0.999999949827
r[0] = r[0] + @m1n[0] + @m1n[1] * t1 + @m1n[2] * t2 +
@m1n[3] * t3+ @m1n[4] * t4
r[0] = rad2mrad(r[0]) # 地心Date黄道原点坐标(不含岁差)
r = add_prece(jd, r) # 补岁差
return r
end
# 传回月球的地心视黄经及视黄纬
def moon_cal2(jd)
moon = moon_cal(jd)
d = nutation(jd)
moon[0] = rad2mrad(moon[0] + d[0]) # 补章动
return moon
end
# 传回月球的地心视赤经及视赤纬
def moon_cal3( jd)
moon = moon_cal(jd)
moon = hcconv(moon, hcjj1(jd))
moon = nutation_radec(jd, moon) # 补赤经及赤纬章动
# 如果黄赤转换前补了黄经章动及交章动,就不能再补赤经赤纬章动
return moon
end
#--------------------------------------------------------------------------
# ● 地心坐标中的日月位置计算
#--------------------------------------------------------------------------
# x=1时计算t时刻日月角距与jiao的差, x=0计算t时刻太阳黄经与jiao的差
def jiao_cai(x, t, jiao)
sun = ear_cal(t) # 计算太阳真位置(先算出日心坐标中地球的位置)
sun[0] += Math::PI
sun[1] = -sun[1] # 转为地心坐标
sun =add_gxc(t, sun) # 补周年光行差
if x == 0
d = nutation(t)
sun[0] += d[0]# 补黄经章动
return rad2mrad(jiao - sun[0])
end
moon = moon_cal(t) # 日月角差与章动无关
return rad2mrad(jiao - (moon[0] - sun[0]))
end
#--------------------------------------------------------------------------
# ● 已知位置反求时间
#--------------------------------------------------------------------------
# t1是J2000起算儒略日数
# 已知角度(jiao)求时间(t)
# x=0是太阳黄经达某角度的时刻计算(用于节气计算)
# x=1是日月角距达某角度的时刻计算(用于定朔望等)
# 传入的t1是指定角度对应真时刻t的前一些天
# 对于节气计算,应满足t在t1到t1+360天之间,对于Y年第n个节气(n=0是春分),
# t1可取值Y*365.2422+n*15.2
# 对于朔望计算,应满足t在t1到t1+25天之间,在此范围之外,求右边的根
#--------------------------------------------------------------------------
def jiao_cal(t1, jiao, x)
t2 = t1
t = 0
if x == 0
t2 += 360 # 在t1到t2范围内求解(范气360天范围),结果置于t
else
t2 += 25
end
jiao *= Math::PI / 180.0 # 待搜索目标角
# 利用截弦法计算
# v1,v2为t1,t2时对应的黄经
v1 = jiao_cai(x, t1, jiao)
v2 = jiao_cai(x, t2, jiao)
# 减2pi作用是将周期性角度转为连续角度
v2 -= 2 * Math::PI if (v1 < v2)
# k是截弦的斜率
k = 1
# 快速截弦求根,通常截弦三四次就已达所需精度
for i in 0...10
# 算出斜率
k2 = (v2 - v1) / (t2 - t1)
k = k2 if (k2).abs > 1e-15
# 差商可能为零,应排除
t = t1 - v1 / k
# 直线逼近法求根(直线方程的根)
v = jiao_cai(x, t, jiao)
v -= 2 * Math::PI if v > 1
# 一次逼近后,v1就已接近0,如果很大,则应减1周
# 已达精度
break if (v).abs < 1e-8
t1 = t2
v1 = v2
t2 = t
v2 = v
# 下一次截弦
end
return t
end
#--------------------------------------------------------------------------
# ● 节气使计算范例,y是年分,这是个测试函数
#--------------------------------------------------------------------------
# 计算第i个节气(i=0是春分),结果转为北京时##
def jqtest(y)
jd = 365.2422 * (y - 2000)
s=[]
for i in 0...24
q = jiao_cal(jd + i * 15.2, i * 15, 0)
q -= deltatt2(q)
q += @j2000 + 8.0/24.0
s.push(q)
end
return s
end
#--------------------------------------------------------------------------
# ● 定朔弦望计算范例,y是年分,这是个测试函数
#--------------------------------------------------------------------------
def ding_suo(y, arc=0)
jd = 365.2422 * (y - 2000)
s=[]
for i in 0...12
q = jiao_cal(jd + 29.5 * i, arc, 1)
q -= deltatt2(q)
q += @j2000 + 8.0 / 24.0
s.push(q)
end
return s
end
#--------------------------------------------------------------------------
# ● 农历计算
#--------------------------------------------------------------------------
=begin
* 1.冬至所在的UTC日期保存在A[0],根据"规定1"得知在A[0]之前(含A[0])的那个UTC朔
日定为年首日期
* 冬至之后的中气分保存在A[1],A[2],A[3]...A[13],其中A[12]又回到了冬至,共计算
13次中气
* 2.连续计算冬至后14个朔日,即起算时间时A[0]+1 14个朔日编号为0,1...12,保存在
C[0],C[1]...C[13]
* 这14个朔日表示编号为0月,1月,...12月0月的各月终止日期,但要注意实际终止日是
新月初一,不属本月
* 这14个朔日同样表示编号为1月,2月...的开始日期
* 设某月编号为n,那么开始日期为C[n-1],结束日期为C[n],如果每月都含中气,该月所
含的中气为A[n]
* 注:为了全总计算出13个月的大小月情况,须算出14个朔日。 3.闰年判断:含有13个月
的年份是闰年 当第13月(月编号12月)终止日期大于冬至日,
* 即C[12]〉A[12], 那么该月是新年,本年没月12月,本年共12个月
* 当第13月(月编号12月)终止日期小等于冬至日,即C[12]≤A[12],那么该月是本年的有
效月份,本年共13个月 4.闰年中处理闰月:
* 13个月中至少1个月份无中气,首个无中气的月置闰,在n=1...12月中找到闰月,即
C[n]≤A[n]
* 从农历年首的定义知道,0月一定含有中气冬至,所以不可能是闰月。 首月有时很贪
心,除冬至外还可能再吃掉本年或前年的另一个中气
* 定出闰月后,该月及以后的月编号减1 5.以上所述的月编号不是日常生活中说的"正
月","二月"等月名称:
* 如果"建子",0月为首月,如果"建寅",2月的月名"正月",3月是"二月",其余类推
#--------------------------------------------------------------------------
=end
#--------------------------------------------------------------------------
# ● 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
def dint_dec(jd, shiqu, dec )
u = jd + 0.5 + shiqu / 24.0 - deltatt2(jd) #+ jds
if dec == true
return (u).truncate; # 返回整数部分
else
return u - (u).truncate # 返回小数部分
end
end
#--------------------------------------------------------------------------
# ● 农历排月序计算,可定出农历
#--------------------------------------------------------------------------
def pai_yue(y)
zq = []
jq = []
hs = []
# 从冬至开始,连续计算14个中气时刻
# 农历年首始于前一年的冬至,为了节气中气一起算,取前年大雪之前
t1 = 365.2422 * (y - 2000) - 50
for i in 0...14
# 计算节气(从冬至开始),注意:返回的是力学时
# 中气计算,冬至的太阳黄经是270度(或-90度)
zq[i] = jiao_cal(t1 + i * 30.4, i * 30 - 90, 0)
# 计算节气,它不是农历定朔计算所必需的
jq[i] = jiao_cal(t1 + i * 30.4, i * 30 - 105, 0)
end
# 在冬至过后,连续计算14个日月合朔时刻
# 冬至过后的第一天0点的儒略日数
dongZhiJia1 = zq[0] + 1 - dint_dec(zq[0], 8, false)
# 首月结束的日月合朔时刻
hs[0] = jiao_cal(dongZhiJia1, 0, 1)
# 算出中气及合朔时刻的日数(不含小数的日数计数,以便计算日期之间的差值
for i in 1...14
hs[i] = jiao_cal(hs[i - 1] + 25, 0, 1)
end
a= []
b= []
c= []
# 取当地UTC日数的整数部分
for i in 0...14
a[i] = dint_dec(zq[i], 8, true)
b[i] = dint_dec(jq[i], 8, true)
c[i] = dint_dec(hs[i], 8, true)
end
# 闰月及大小月分析
tot = 12
nun = -1
# 月编号
yn = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 0, 0 ]
if( c[12]<=a[12] )
#闰月分析
yn[12]=12
#编号为12的月是本年的有效月份,本年总月数13个
tot=13
for i in 1...13
break if( c[i]<=a[i] )
end
nun=i-1
k = i
for i in k...13
yn[i-1]-=1
#注意yn中不含农历首月(所以取i-1),公历中农历首月总是去年的所以不多做计算
end
end
for i in 0...tot
#转为建寅月名,并做大小月分析
#转建寅月名
yn[i]=@yueMing[(yn[i]+10)%12]
#标记是否闰月
if i==nun
yn[i]+="闰"
else
yn[i]+="月"
end
#标记大小月
if(c[i+1]-c[i]>29)
yn[i]+="大"
else
yn[i]+="小"
end
end
return yn
end
#--------------------------------------------------------------------------
# ● 参数
#--------------------------------------------------------------------------
def initialize
# ● 日历计算参数
# 每弧度的角度数
@rad = 180.0 * 3600 / Math::PI
# 每弧度的角秒数
@rad1= 180.0 / Math::PI
#2000年前儒略日数(2000-1-1 12:00:00格林威治平时)
@j2000 = 2451545
# 调用Enn计算日位置前先设置EnnT时间变量
@ennt = 0
# 调用Mnn计算月位置前先设置MnnT时间变量
@mnnt = 0
# ● 世界时与原子时之差计算表
@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]
# ● 黄赤交角及黄赤坐标变换相关数据
# 黄赤交角系数表
@hcjjB = [ 84381.448, -46.8150, -0.00059,0.001813 ]
# Date黄道上的岁差
@preceB = [ 0, 50287.92262, 111.24406,0.07699,
-0.23479, -0.00178, 0.00018, 0.00001 ]
# ●节气计算相关数据
# 节气表
@jqB = [
"春分","清明",
"谷雨","立夏",
"小满","芒种",
"夏至","小暑",
"大暑","立秋",
"处暑","白露",
"秋分","寒露",
"霜降","立冬",
"小雪","大雪",
"冬至","小寒",
"大寒","立春",
"雨水","惊蛰"]
# 月名表
@yueMing = [ "正", "二", "三", "四", "五", "六",
"七", "八", "九", "十", "十一", "十二" ]
# ● 光行差相关参数
# 离心率
@gxc_e = [ 0.016708634, -0.000042037,-0.0000001267 ]
# 近点
@gxc_p = [ 102.93735 /@rad1, 1.71946 /@rad1, 0.00046 /@rad1 ]
# 太平黄经
@gxc_l = [ 280.4664567 /@rad1,36000.76982779 /@rad1,
0.0003032028 /@rad1, 1 / 49931000 /@rad1,-1 / 153000000 /@rad1 ]
# 光行差常数
@gxc_k = 20.49552 / @rad
# ● 章动表
@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 ]
# ●月球及地球运动参数表
#黄经周期项
@e10 = [ 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 ]
#黄经泊松1项
@e11 = [
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 ]
#黄经泊松2项
@e12 = [ 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 ]
@e13 = [ 0.00000289226, 5.84384198723, 6283.0758499914,
0.00000034955, 0.00000000000, 0.0000000000, 0.00000016819,
5.48766912348, 12566.1516999828 ]
@e14 = [ 0.00000114084, 3.14159265359, 0.0000000000,
0.00000007717, 4.13446589358, 6283.0758499914, 0.00000000765,
3.83803776214, 12566.1516999828 ]
@e15 = [ 0.00000000878, 3.14159265359, 0.0000000000 ]
#黄纬周期项
@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 ]
@e21 = [ 0.00000009030, 3.89729061890, 5507.5532386674,
0.00000006177, 1.73038850355, 5223.6939198022 ]
#距离周期项
@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 ]
@e31 = [ 0.00103018608, 1.10748969588, 6283.0758499914,
0.00001721238, 1.06442301418, 12566.1516999828, 0.00000702215,
3.14159265359, 0.0000000000 ]
@e32 = [0.00004359385, 5.78455133738, 6283.0758499914 ]
@e33 = [0.00000144595, 4.27319435148, 6283.0758499914 ]
#月球运动参数
@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 ]
@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 ]
@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 ]
@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 ]
@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 ]
@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 ]
@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 ]
#月球平黄经系数
@m1n = [ 3.81034392032, 8.39968473021e+03,-3.31919929753e-05,
3.20170955005e-08,-1.53637455544e-10 ]
end
end