Расчет фазового угла между Солнцем / МКС и наблюдателем на Земле

Чтобы помочь мне вычислить визуальную величину Международной космической станции, мне нужно уметь вычислять фазовый угол.

Может ли кто-нибудь помочь мне рассчитать это?

В любой момент времени я сгенерировал объект Obs и объект ISS, используя PyEphem. Для наблюдателя у меня есть Alt/Az к ISS и Alt/Az к Солнцу ... И, конечно, у меня есть ISS.range (в км) от наблюдателя. Мне кажется, что я смогу вычислить фазовый угол с помощью "простой" геометрии. К сожалению, эта простая геометрия немного выходит за рамки того, что я могу уверенно разработать (думаю, это было слишком долго с тех пор, как я делал это в последний раз).

ОТВЕТ: Я понял это (с помощью старого доброго Интернета). Это частичный фрагмент кода (обновлен с поправкой на ephem.earth_radius на Km Леандро Гедесом)

 # SSA Triangle.  We have side a and b and angle C.  Need to solve to find side c 
 a = sun.earth_distance * au - ephem.earth_radius/1000 #distance sun from observer (Km)
 b = iss.range / 1000 # distance to ISS from observer (Km)
 angle_c = ephem.separation( (iss.az, iss.alt), ( sun.az, sun.alt) ) 
 c = math.sqrt( math.pow(a,2) + math.pow(b,2) - 2*a*b*math.cos( angle_c) )
 # now we find the "missing" angles (of which angle A is the one we need)
 angle_a = math.acos((math.pow(b,2) + math.pow( c,2) - math.pow(a,2)) / (2 * b * c)) 
 angle_b = math.pi - angle_a - angle_c #note: this is basically ZERO - not a big surprise really - and I don't need this anyway.
 phase_angle = angle_a # This is the angle we need.  BINGO!!

person Liam Kennedy    schedule 03.11.2013    source источник
comment
Обратите внимание, что если вы работаете с км, вам также следует преобразовать радиус Земли, если он указан в метрах. a = sun.earth_distance * au - ephem.earth_radius *10**(-3)   -  person Leandro Guedes    schedule 18.04.2017
comment
Спасибо за этот улов. ephem.earth_radius действительно находится в метрах. Так же хорошо, что я не программировал посадочный модуль или что-то в этом роде ... мы бы взорвались БУМ!   -  person Liam Kennedy    schedule 19.04.2017
comment
Лиам! как вы рассчитываете angle_a? откуда приходит 2 * b * c?   -  person whitenoisedb    schedule 15.07.2017
comment
@whitenoisedb Показан весь код, использованный для вычисления всего. Базовые значения взяты из библиотеки Python PyEphem. Значения для a, b, c и всего остального, что используется в расчетах, в порядке. пожалуйста, посмотрите еще раз (подсказка ... ищите a =, b = и c =.   -  person Liam Kennedy    schedule 16.07.2017


Ответы (2)


ОТВЕТ: Я понял это (с помощью старого доброго Интернета). Это частичный фрагмент кода (обновлен с поправкой на ephem.earth_radius на Km Леандро Гедесом)

 # SSA Triangle.  We have side a and b and angle C.  Need to solve to find side c 
 a = sun.earth_distance * au - ephem.earth_radius/1000 #distance sun from observer (Km)
 b = iss.range / 1000 # distance to ISS from observer (Km)
 angle_c = ephem.separation( (iss.az, iss.alt), ( sun.az, sun.alt) ) 
 c = math.sqrt( math.pow(a,2) + math.pow(b,2) - 2*a*b*math.cos( angle_c) )
 # now we find the "missing" angles (of which angle A is the one we need)
 angle_a = math.acos((math.pow(b,2) + math.pow( c,2) - math.pow(a,2)) / (2 * b * c)) 
 angle_b = math.pi - angle_a - angle_c #note: this is basically ZERO - not a big surprise really - and I don't need this anyway.
 phase_angle = angle_a # This is the angle we need.  BINGO!!

(Формально отправив свой ответ КАК ФАКТИЧЕСКИЙ ответ - да - мне потребовалось время, чтобы понять, что я должен был делать все это время).

person Liam Kennedy    schedule 23.04.2019

Поскольку angle_b практически равен нулю (максимум 0,00016 градусов в перигелии и МКС прямо над головой), вы можете просто сделать angle_a = math.pi - angle_c.

Это примерно такая же точность, поскольку вы уже сделали несколько незначительных ошибок с расстоянием a.

person Jeroen    schedule 09.01.2020