我一直在用PyEphem来研究行星相对于地球上某个位置的运动。然而,我有时注意到,我从PyEphem得到的结果对于赤纬是不连续的,而赤经则是连续的。RA和Dec坐标每30分钟采集一次。在
我认为恒星体会以连续的方式运动,然而当赤纬为负时,它看起来是不连续的。在
你知道为什么会这样吗?我可以张贴我的脚本,如果这也有帮助。在
代码:
from ephem import *
import datetime
import re
def cSTI(number):
degrees = int(number[0])
minutes = int(number[1])
seconds = float(number[2])
full = degrees + (minutes/60) + (seconds/60/60)
return round(full,2)
planets = [Sun(),Mercury(),Venus(),Moon(),Mars(),Jupiter(),Saturn(),Uranus(),Neptune(),Pluto()]
masses = [1.989*10**30,.330*10**24,4.87*10**24,0.073*10**24,0.642*10**24,1898*10**24,568*10**24,86.8*10**24,102*10**24,0.0146*10**24]
earthMass = 5.97*10**24
gravitational_constant = 6.67408 * 10**-11
theYear = '2018'
theMonth = '9'
theDay = '8'
revere = Observer()
revere.lon = '-42.4084'
revere.lat = '71.0120'
currentDate = datetime.datetime(2018,11,30,12,0,0)
lowerDateLimit = datetime.datetime(2018,9,1,12,0,0)
revere.date = currentDate
print('DATE SUN(RA) SUN(DEC) SUN(AZI) SUN(GFORCE) MERCURY(RA) MERCURY(DEC) MERCURY(AZI) MERCURY(GFORCE) VENUS(RA) VENUS(DEC) VENUS(AZI) VENUS(GFORCE) MOON(RA) MOON(DEC) MOON(AZI) MOON(GFORCE) MARS(RA) MARS(DEC) MARS(AZI) MARS(GFORCE) JUPITER(RA) JUPITER(DEC) JUPITER(AZI) JUPITER(GFORCE) SATURN(RA) SATURN(DEC) SATURN(AZI) SATURN(GFORCE) URANUS(RA) URANUS(DEC) URANUS(AZI) URANUS(GFORCE) NEPTUNE(RA) NEPTUNE(DEC) NEPTUNE(AZI) NEPTUNE(GFORCE) PLUTO(RA) PLUTO(DEC) PLUTO(AZI) PLUTO(GFORCE) ')
while (currentDate> lowerDateLimit):
print('%s ' % (revere.date),end = ' ')
planetIndex = 0;
for planet in planets:
planet.compute(revere)
rightascension = str(planet.ra)
declination = str(planet.dec)
azimuth = str(planet.az)
rightascension = re.split('[:]',rightascension)
declination = re.split('[:]',declination)
azimuth = re.split('[:]',azimuth )
rightascension = cSTI(rightascension);
declination = cSTI(declination);
azimuth = cSTI(azimuth);
GFORCE = gravitational_constant * ((masses[planetIndex]*earthMass)/(planet.earth_distance**2))
print('%s %s %s %s ' % (rightascension,declination,azimuth,GFORCE),end = ' ')
planetIndex+=1
print()
currentDate += datetime.timedelta(minutes=-30)
revere.date = currentDate
我相信问题出在您从}的手动转换。在
ephem.Angle()
(它是ra
,azi
等的对象)到{编辑
特别是,这个问题是因为在
cSTI()
函数中,当值为负时,应该减去(而不是相加)不同的值。在更正后的实施将如下所示:
请注意,这是对代码的一些最小修改,以使其正常工作。我建议您从PEP8开始编写一些关于如何编写更好的代码的文档。 另外,您应该避免使用神奇的数字,比如在代码中使用通配符
60
。在如果我要手动执行此操作,我也会避免使用不必要的正则表达式,并且实际上会从
^{pr2}$ephem.Angle()
对象开始,例如:这可以直接调用到代码中的}。在
planet.ra
或{但我不会用手工的。见下文。在
但好消息是,您不需要自己手动计算,您可以将其转换为
float
,以弧度表示,如official documentation所示。在下面的代码是您的精巧版本,它将表格数据生成为列表列表(可以使用Python标准库中的
csv
轻松转换为CSV)。 已经进行了一些修改:ephem
对象是动态创建的scipy.constants
(从最新的CODATA获取)请注意,这里没有执行转换,因为这会使我们丢失信息。在
代码如下:
要转换为CSV(使用
ra
、dec
、az
和gforce
的浮点值),可以这样做:此外,下面是一些绘图代码,表明负值的问题已经消失:
产生:
相关问题 更多 >
编程相关推荐