pythonskyfield

Skyfield: why are these coordinates negative?


I've an example of how to get a geocentric position of Mars (x,y,z cords) relative to the Earth, using class skyfield.positionlib.Geocentric(position_au, velocity_au_per_d=None, t=None, center=None, target=None) (without accounting for light-travel time or the effect of relativity on the light itself).

There it is:

t = ts.utc(2022, 9, 16)  

e = earth.at(t) 
m = mars.at(t)  

p = e.position.au - m.position.au 
if e.velocity is None or m.velocity is None:     
   v = None 
else:     
   v = e.velocity.au_per_d - m.velocity.au_per_d  

astrometric = e.observe(mars).xyz 
geocentric = Geocentric(p, v, e.t).xyz  

print(astrometric) 
print(geocentric) 

Output:

[0.24429594 0.77369215 0.31846684] au

[-0.24426364 -0.77375285 -0.31849556] au

Is it good? And why second coords are < 0?

P.S. Sun coords are more confusing! Why?

[-0.99764586 0.11540818 0.05003455] au

[ 0.99764586 -0.11540813 -0.05003453] au


Solution

  • The way that vector math works, a positive vector +v goes toward that position, whereas a negative vector -v goes backwards away from that position to the origin. So if you say a - b with two vectors, you are asking to be taken mathematically from the place where b is and to the place where a is.

    So your math for v = is backwards. You are asking for the vector going Mars → Earth, or, in other words, for the mars-centric position of Earth, whereas you really want the opposite.