Я только начинаю изучать астрономию.
Я использую пифем для понимания различных систем координат, таких как геоцентрическая эклиптика, геоцентрическая эклиптика, гелиоцентрическая эклиптика.
В фефеме тело планеты, такое как Марс, имеет атрибуты (ra, dec) в геоцентрической эклиптике (hlon, hlat) в гелиоцентрической эклиптике. Я пытаюсь проверить соответствие между ними.
Мой метод (скрипты прилагаются ниже) выглядит следующим образом:
- определить функцию earthtilt, чтобы получить наклон земной оси
- определить функции radec2cart и cart2radec для выполнения преобразования координат между сферическими координатами и декартовыми координатами.
- определите функцию R_x, чтобы получить матрицу вращения.
- получить геоцентрические экваториальные координаты солнца / марса, используя атрибуты (ra, dec).
- используйте R_x и наклон земли, чтобы повернуть геоцентрические эклиптические координаты в геоцентрические эклиптические координаты
- (гелиоцентрические эклиптические декартовы координаты марса) = (геоцентрические эклиптические координаты марса) - (геоцентрические эклиптические координаты солнца)
- заменить гелиоцентрические декартовы эклиптические координаты Марса на гелиоцентрические сферические эклиптические координаты Марса.
- сравните выше гелиоцентрические сферические эклиптические координаты Марса с атрибутами Марса hlon и hlat.
- Я получил: разница между долготой эклиптики составляет около 16,9 ". Разница между широтой эклиптики составляет около 9,2 дюйма. Такое отклонение слишком велико.
- Мои вычисления / концепция неверны или ...?
===================
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]