Note

This is an old version of the documentation. See http://docs.astropy.org/en/stable for the latest version.

This document describes the mathematics behind the transformation from
`ICRS` to `Galactocentric`
coordinates. For examples of how to use this transformation in code, see
the *Examples* section of the
`Galactocentric` class documentation.

We assume that we start with a 3D position in the ICRS reference frame: a Right Ascension, Declination, and heliocentric distance, . We can trivially convert this to a Cartesian position using the standard transformation from Cartesian to spherical coordinates:

The first transformations will rotate the axis so that the new axis points towards the Galactic Center (GC), specified by the ICRS position :

The transformation thus far has aligned the axis with the vector pointing from the Sun to the GC, but the and axes point in an arbitrary direction. We adopt the orientation of the Galactic plane as the normal to the north pole of Galactic coordinates defined by the IAU (Blaauw et. al. 1960). This extra “roll” angle, , was measured by transforming a grid of points along to this interim frame and minimizing the square of their positions. We find:

The full rotation matrix thus far is:

With the rotated position vector , we can now subtract the distance to the GC, , which is purely along the axis:

where .

The final transformation is to account for the height of the Sun above the Galactic midplane by rotating about the final axis by the angle :

where is the measured height of the Sun above the midplane.

The full transformation is then: