2017-02-06 4 views
0

나는 모든 행성, 태양 및 달에 대한 기본 데이터를 제공하는 파이썬 스크립트를 작성 중이다.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이됩니다. 고도가 음수인지 어떻게 테스트 할 수 있습니까? 내가 여기서 뭔가 분명한 것을 놓치고 있니?

도움 주셔서 감사합니다.

답변

1

나는 비슷한 문제를 한번 생각했다. 내가 그것을 어떻게 이해하는지 피펫은 물체에 대해 nextrising() 또는 nextsetting()을 호출 할 때 관찰자의 시간을 전달합니다. 그것은 어떻게 든 시각적으로 어떤 시점에 물체가 처음으로 hor의 위/아래에 있는지를 보여줍니다. 당신이 그 다음 bodie를 부르면. 그것은 항상 지평선의 아래의 약간의 것일 것이다.

어떻게 든 관찰자 시간을 저장하고 설정/상승 시간을 계산 한 후에 다시 설정해야합니다.