| 1 | #include "slalib.h" | 
|---|
| 2 | #include "slamac.h" | 
|---|
| 3 | void slaHfk5z ( double rh, double dh, double epoch, | 
|---|
| 4 | double *r5, double *d5, double *dr5, double *dd5 ) | 
|---|
| 5 | /* | 
|---|
| 6 | **  - - - - - - - - - | 
|---|
| 7 | **   s l a H f k 5 z | 
|---|
| 8 | **  - - - - - - - - - | 
|---|
| 9 | ** | 
|---|
| 10 | **  Transform a Hipparcos star position into FK5 J2000, assuming | 
|---|
| 11 | **  zero Hipparcos proper motion. | 
|---|
| 12 | ** | 
|---|
| 13 | **  (double precision) | 
|---|
| 14 | ** | 
|---|
| 15 | **  Given: | 
|---|
| 16 | **     rh      double    Hipparcos RA (radians) | 
|---|
| 17 | **     dh      double    Hipparcos Dec (radians) | 
|---|
| 18 | **     epoch   double    Julian epoch (TDB) | 
|---|
| 19 | ** | 
|---|
| 20 | **  Returned (all FK5, equinox J2000, epoch EPOCH): | 
|---|
| 21 | **     r5      double    RA (radians) | 
|---|
| 22 | **     d5      double    Dec (radians) | 
|---|
| 23 | ** | 
|---|
| 24 | **  Called:  slaDcs2c, slaDav2m, slaDmxv, slaDav2m, slaDmxm, | 
|---|
| 25 | **           slaDimxv, slaDvxv, slaDc62s, slaDranrm | 
|---|
| 26 | ** | 
|---|
| 27 | **  Notes: | 
|---|
| 28 | ** | 
|---|
| 29 | **  1)  The proper motion in RA is dRA/dt rather than cos(Dec)*dRA/dt. | 
|---|
| 30 | ** | 
|---|
| 31 | **  2)  The FK5 to Hipparcos transformation consists of a pure | 
|---|
| 32 | **      rotation and spin;  zonal errors in the FK5 catalogue are | 
|---|
| 33 | **      not taken into account. | 
|---|
| 34 | ** | 
|---|
| 35 | **  3)  The published orientation and spin components are interpreted | 
|---|
| 36 | **      as "axial vectors".  An axial vector points at the pole of the | 
|---|
| 37 | **      rotation and its length is the amount of rotation in radians. | 
|---|
| 38 | ** | 
|---|
| 39 | **  4)  It was the intention that Hipparcos should be a close | 
|---|
| 40 | **      approximation to an inertial frame, so that distant objects | 
|---|
| 41 | **      have zero proper motion;  such objects have (in general) | 
|---|
| 42 | **      non-zero proper motion in FK5, and this routine returns those | 
|---|
| 43 | **      fictitious proper motions. | 
|---|
| 44 | ** | 
|---|
| 45 | **  5)  The position returned by this routine is in the FK5 J2000 | 
|---|
| 46 | **      reference frame but at the specified epoch. | 
|---|
| 47 | ** | 
|---|
| 48 | **  6)  See also slaFk52h, slaH2fk5, slaFk5zhz. | 
|---|
| 49 | ** | 
|---|
| 50 | **  Reference: | 
|---|
| 51 | ** | 
|---|
| 52 | **     M.Feissel & F.Mignard, Astron. Astrophys. 331, L33-L36 (1998). | 
|---|
| 53 | ** | 
|---|
| 54 | **  Last revision:   30 December 1999 | 
|---|
| 55 | ** | 
|---|
| 56 | **  Copyright P.T.Wallace.  All rights reserved. | 
|---|
| 57 | */ | 
|---|
| 58 |  | 
|---|
| 59 | #define AS2R 0.484813681109535994e-5    /* arcseconds to radians */ | 
|---|
| 60 |  | 
|---|
| 61 | { | 
|---|
| 62 | /* FK5 to Hipparcos orientation and spin (radians, radians/year) */ | 
|---|
| 63 | static double ortn[3] = { -19.9e-3 * AS2R, | 
|---|
| 64 | -9.1e-3 * AS2R, | 
|---|
| 65 | 22.9e-3 * AS2R }, | 
|---|
| 66 | s5[3] = { -0.30e-3 * AS2R, | 
|---|
| 67 | 0.60e-3 * AS2R, | 
|---|
| 68 | 0.70e-3 * AS2R }; | 
|---|
| 69 |  | 
|---|
| 70 | double ph[3], r5h[3][3], sh[3], t, vst[3], rst[3][3], r5ht[3][3], | 
|---|
| 71 | pv5e[6], vv[3], w, r, v; | 
|---|
| 72 | int i; | 
|---|
| 73 |  | 
|---|
| 74 |  | 
|---|
| 75 | /* Hipparcos barycentric position vector (normalized). */ | 
|---|
| 76 | slaDcs2c ( rh, dh, ph ); | 
|---|
| 77 |  | 
|---|
| 78 | /* FK5 to Hipparcos orientation matrix. */ | 
|---|
| 79 | slaDav2m ( ortn, r5h ); | 
|---|
| 80 |  | 
|---|
| 81 | /* Rotate the spin vector into the Hipparcos frame. */ | 
|---|
| 82 | slaDmxv ( r5h, s5, sh ); | 
|---|
| 83 |  | 
|---|
| 84 | /* Time interval from J2000 to epoch. */ | 
|---|
| 85 | t = epoch - 2000.0; | 
|---|
| 86 |  | 
|---|
| 87 | /* Axial vector:  accumulated Hipparcos wrt FK5 spin over that interval. */ | 
|---|
| 88 | for ( i = 0; i < 3; i++ ) { | 
|---|
| 89 | vst [ i ] = s5 [ i ] * t; | 
|---|
| 90 | } | 
|---|
| 91 |  | 
|---|
| 92 | /* Express the accumulated spin as a rotation matrix. */ | 
|---|
| 93 | slaDav2m ( vst, rst ); | 
|---|
| 94 |  | 
|---|
| 95 | /* Rotation matrix:  accumulated spin, then FK5 to Hipparcos. */ | 
|---|
| 96 | slaDmxm ( r5h, rst, r5ht ); | 
|---|
| 97 |  | 
|---|
| 98 | /* De-orient & de-spin the vector into FK5 J2000 at epoch. */ | 
|---|
| 99 | slaDimxv ( r5ht, ph, pv5e ); | 
|---|
| 100 | slaDvxv ( sh, ph, vv ); | 
|---|
| 101 | slaDimxv ( r5ht, vv, pv5e + 3 ); | 
|---|
| 102 |  | 
|---|
| 103 | /* FK5 position/velocity 6-vector to spherical. */ | 
|---|
| 104 | slaDc62s( pv5e, &w, d5, &r, dr5, dd5, &v ); | 
|---|
| 105 | *r5 = slaDranrm ( w ); | 
|---|
| 106 | } | 
|---|