согласованность между атрибутами (ra, dec) и (hlon, hlat)

Я только начинаю изучать астрономию.

Я использую пифем для понимания различных систем координат, таких как геоцентрическая эклиптика, геоцентрическая эклиптика, гелиоцентрическая эклиптика.

В фефеме тело планеты, такое как Марс, имеет атрибуты (ra, dec) в геоцентрической эклиптике (hlon, hlat) в гелиоцентрической эклиптике. Я пытаюсь проверить соответствие между ними.

Мой метод (скрипты прилагаются ниже) выглядит следующим образом:

  1. определить функцию earthtilt, чтобы получить наклон земной оси
  2. определить функции radec2cart и cart2radec для выполнения преобразования координат между сферическими координатами и декартовыми координатами.
  3. определите функцию R_x, чтобы получить матрицу вращения.
  4. получить геоцентрические экваториальные координаты солнца / марса, используя атрибуты (ra, dec).
  5. используйте R_x и наклон земли, чтобы повернуть геоцентрические эклиптические координаты в геоцентрические эклиптические координаты
  6. (гелиоцентрические эклиптические декартовы координаты марса) = (геоцентрические эклиптические координаты марса) - (геоцентрические эклиптические координаты солнца)
  7. заменить гелиоцентрические декартовы эклиптические координаты Марса на гелиоцентрические сферические эклиптические координаты Марса.
  8. сравните выше гелиоцентрические сферические эклиптические координаты Марса с атрибутами Марса hlon и hlat.
  9. Я получил: разница между долготой эклиптики составляет около 16,9 ". Разница между широтой эклиптики составляет около 9,2 дюйма. Такое отклонение слишком велико.
  10. Мои вычисления / концепция неверны или ...?

    ===================
    import ephem
    import numpy as np
    import math

    def R_x(theta):
      return np.array([[1,0,0],[0,math.cos(theta),math.sin(theta)],[0,-math.sin(theta),math.cos(theta)]])

    def radec2cart(rho,ra,dec):
      return np.array([rho*math.cos(dec)*math.cos(ra),rho*math.cos(dec)*math.sin(ra),rho*math.sin(dec)])

    def cart2radec(X):
      r=math.sqrt(X[0]*X[0]+X[1]*X[1])
      ra=ephem.hours(math.atan2(X[1],X[0])).norm
      dec=ephem.degrees(math.atan2(X[2],r))
      rho=math.sqrt(X[0]*X[0]+X[1]*X[1]+X[2]*X[2])
      return (rho,ra,dec)

    def earthtilt(date):
      pos=ephem.Ecliptic('90','0',epoch=date)
      return pos.to_radec()[1]

    def verifyhlonhlat(star,date):
      star.compute(date)
      sun=ephem.Sun(date)
      starx=radec2cart(star.earth_distance,star.g_ra,star.g_dec)
      eps=earthtilt(date)
      starx=R_x(eps).dot(starx)
      sunx=radec2cart(sun.earth_distance,sun.g_ra,sun.g_dec)
      sunx=R_x(eps).dot(sunx)
      starx=starx-sunx
      distance,hlon,hlat=cart2radec(starx)
      hlon=ephem.degrees(hlon)
      print([distance-star.sun_distance,ephem.degrees(hlon-star.hlon),ephem.degrees(hlat-star.hlat)])

    verifyhlonhlat(ephem.Mars(),ephem.Date('2016/6/7'))
    ===========
    >>> verifyhlonhlat(ephem.Mars(),ephem.Date('2016/6/7'))
    [1.3654961393161358e-05, -0:00:16.9, 0:00:09.2]
    

person hjyanghj    schedule 07.06.2016    source источник


Ответы (1)


Ошибка: 6. (гелиоцентрические эклиптические декартовы координаты Марса) = (геоцентрические эклиптические координаты Марса) - (геоцентрические эклиптические координаты солнца)

Причина в следующем: когда мы видим планету / звезду, мы смотрим на то, где БЫЛА планета / звезда, а не на то, где ЕСТЬ планета / звезда. Разница во времени - это световой путь от планеты / звезды до Земли.

person hjyanghj    schedule 13.06.2016