Я конвертирую GCRS
объектов в галактоцентрические координаты и обнаруживаю, что расстояния между двумя точками не сохраняются при этом преобразовании.
import astropy.units
import astropy.coordinates
import astropy.time
from numpy.linalg import norm
t = astropy.time.Time('1999-01-01T00:00:00.123456789')
def earth2galaxy(lat):
'''
Convert an Earth coordinate to a galactocentric coordinate.
'''
# get GCRS coordinates
earth = astropy.coordinates.EarthLocation(lat=lat*astropy.units.deg,
lon=0,
height=0)
pos, _ = earth.get_gcrs_posvel(obstime=t)
cartrep = astropy.coordinates.CartesianRepresentation(pos.xyz,
unit=astropy.units.m)
gcrs = astropy.coordinates.GCRS(cartrep)
# convert GCRS to galactocentric
gc = gcrs.transform_to(astropy.coordinates.Galactocentric)
return earth, gcrs, gc
earthA, gcrsA, gcA = earth2galaxy(0)
earthB, gcrsB, gcB = earth2galaxy(0.01)
print(norm(earthA-earthB))
print(norm(gcrsA.cartesian.xyz-gcrsB.cartesian.xyz))
print(norm(gcA.cartesian.xyz-gcB.cartesian.xyz))
Этот код дает
1105.74275693
1105.74275232
971.796949054
Я считаю, что это не проблема для больших расстояний (например, смещения широты в десятках градусов).
Раньше я обходил это, используя точки A
и B
, преобразуя точки A
и C = A + c*AB
, где c
— большое число. Затем я восстановил преобразованный B'
, отменив масштабирование B' = A' + A'C' / c
. Однако мне кажется, что я должен обратиться к фактическому корню проблемы, а не к этому обходному пути.