根据前文https://blog.csdn.net/weixin_42763614/article/details/83388789,有了二十八宿距星位置,就可以通过计算日月五星的赤经找出其所在的星宿位置。这里以常见的太阳冬至所在宿度和木星位置为例。
太阳位置
# 太阳位置计算
import ephem
from star import *
def rxd_calc(lamda): # 计算入宿度
for i in range(28):
if esbx[i].ra <= lamda < esbx[(i+1)%28].ra:
break
elif esbx[i].ra > esbx[(i+1)%28].ra: # 边界循环处理
if esbx[i].ra <= lamda < 360:
break
if 0 <= lamda < esbx[(i+1)%28].ra:
lamda += 360
break
srx = '入' + esbx[i].name + '宿' # 所入宿
rxd = lamda - esbx[i].ra # 入宿度(赤道)
return srx, rxd # 古度表示:rxd / gdzh
def sun_position(year): # 太阳入宿度
date0 = str(year) + '/12/1' # ut+8 18时
date = ephem.next_solstice(date0) # 冬至时间
JD = ephem.julian_date(date)
t = (JD - 2451545) / 36525
date = ephem.Date(JD - 2415020)
s = ephem.Sun(date)
L = s.ra / ephem.degree
for star in esbx: # 获得二十八宿宿度
appPlace(star, t)[0]
print(star.name, star.ra)
# 计算入宿度
rxd, srx = rxd_calc(L)
print(date, srx, rxd)
return srx, rxd # 古度表示:rxd / gdzh
# 计算-500至-1年冬至太阳所在位置
year = -500
for i in range(500):
sun_place(year+i)
木星位置
古代曾有“岁星纪年”的说法,然而木星公转周期并非十二年,并且行星与地球同时饶太阳公转,在地球上看会表现为盈缩顺留的现象,为此古人又给出超辰的说法,但也无法解决其用于纪年的问题。而先秦史料中岁星位置与真实位置的不符合情况,也称为研究关注的对象。
# 黄经 255 285 315 345 15 45 75 105 135 165 195 225
xingci = ['星纪','玄枵','诹訾','降娄','大梁','实沈','鹑首','鹑火','鹑尾','寿星','大火','析木']
# 木星位置
def jupiter_position(year):
date0 = str(year) + '/5/1'
date = ephem.next_solstice(date0) # 夏至(年中)
j.compute(date)
jra = round(dms2deg(j.g_ra) * 15,4)
for i in range(12):
if 0 <= jra - (i*30-105)%360 < 30:
print(date, jra, xingci[i],end=' ')
break
elif (i*30-105)%360 > (i*30-75)%360: # 降娄(345-15)
if (i*30-105)%360 < jra + 360 < i*30+285:
print(date, jra, xingci[i],end=' ')
break
# -700至-1年的木星星次
j = ephem.Jupiter()
year = -700
for i in range(700):
jupiter_place(year+i) # 木星位置