나는 모든 행성, 태양 및 달에 대한 기본 데이터를 제공하는 파이썬 스크립트를 작성 중이다.PyEphem : 객체가 수평선 위에 있는지 테스트하는 방법은 무엇입니까?
planets = {
'mercury': ephem.Mercury(),
'venus': ephem.Venus(),
'mars': ephem.Mars(),
'jupiter': ephem.Jupiter(),
'saturn': ephem.Saturn(),
'uranus': ephem.Uranus(),
'neptune': ephem.Neptune()
}
def findVisiblePlanets(obs):
visiblePlanets = dict()
notVisiblePlanets = dict()
for obj in planets:
planets[obj].compute(obs)
if planets[obj].alt > 0:
visiblePlanets[obj] = planets[obj]
else:
notVisiblePlanets[obj] = planets[obj]
return (visiblePlanets, notVisiblePlanets)
이 괜찮 작동, 나는 findVisiblePlanets로부터받은 튜플 지정된 'OBS의 실제 하늘에 대응하고 대응 : 나의 첫 번째 기능은 아직 상승하지 않는 수평선 위에있는 것들, 그리고 그 사이의 행성을 분할 '.
그러나 다른 기능에서는 각 행성의 고도를 테스트해야합니다. 0보다 크면 스크립트는 'xxx 설정'을 표시하고 0보다 작은 경우 'xxx 상승'을 표시합니다. 코드는 다음과 같습니다.
if bodies[obj].alt > 0:
print(' Sets at', setTime.strftime('%H:%M:%S'), deltaSet)
else:
print(' Rises at', riseTime.strftime('%H:%M:%S'), deltaRise)
그래서 이번에는 작동하지 않는 것을 제외하고는 똑같은 조건을 사용하고 있습니다. 나는 스크립트가 이름, 크기, 거리 등을 표시하기 때문에 몸체 [obj] 뒤에 정확한 객체가있을 것이라고 확신합니다. 그러나 어떤 이유로 고도 (.alt)는 항상 0보다 작으므로 스크립트는 상승 시간 만 표시합니다 .
print (본문 [obj] .alt)를 시도했는데 음수 인 '-0 : 00 : 07.8'(예)이 표시됩니다. 나는 int (bodies [obj] .alt)를 사용하여 비교를 시도했지만 이것이 0이됩니다. 고도가 음수인지 어떻게 테스트 할 수 있습니까? 내가 여기서 뭔가 분명한 것을 놓치고 있니?
도움 주셔서 감사합니다.