| 1 | #include "slalib.h"
|
|---|
| 2 | #include "slamac.h"
|
|---|
| 3 | void slaPlante ( double date, double elong, double phi, int jform,
|
|---|
| 4 | double epoch, double orbinc, double anode, double perih,
|
|---|
| 5 | double aorq, double e, double aorl, double dm,
|
|---|
| 6 | double* ra, double* dec, double* r, int* jstat )
|
|---|
| 7 | /*
|
|---|
| 8 | ** - - - - - - - - - -
|
|---|
| 9 | ** s l a P l a n t e
|
|---|
| 10 | ** - - - - - - - - - -
|
|---|
| 11 | **
|
|---|
| 12 | ** Topocentric apparent RA,Dec of a Solar-System object whose
|
|---|
| 13 | ** heliocentric orbital elements are known.
|
|---|
| 14 | **
|
|---|
| 15 | ** Given:
|
|---|
| 16 | ** date double MJD of observation (JD - 2400000.5)
|
|---|
| 17 | ** elong double observer's east longitude (radians)
|
|---|
| 18 | ** phi double observer's geodetic latitude (radians)
|
|---|
| 19 | ** jform int choice of element set (1-3; Note 2)
|
|---|
| 20 | ** epoch double epoch of elements (TT MJD)
|
|---|
| 21 | ** orbinc double inclination (radians)
|
|---|
| 22 | ** anode double longitude of the ascending node (radians)
|
|---|
| 23 | ** perih double longitude or argument of perihelion (radians)
|
|---|
| 24 | ** aorq double mean distance or perihelion distance (AU)
|
|---|
| 25 | ** e double eccentricity
|
|---|
| 26 | ** aorl double mean anomaly or longitude (radians, jform=1,2 only)
|
|---|
| 27 | ** dm double daily motion (radians, jform=1 only )
|
|---|
| 28 | **
|
|---|
| 29 | ** Returned:
|
|---|
| 30 | ** ra,dec double RA, Dec (topocentric apparent, radians)
|
|---|
| 31 | ** r double distance from observer (AU)
|
|---|
| 32 | ** jstat int status: 0 = OK
|
|---|
| 33 | ** -1 = illegal jform
|
|---|
| 34 | ** -2 = illegal e
|
|---|
| 35 | ** -3 = illegal aorq
|
|---|
| 36 | ** -4 = illegal dm
|
|---|
| 37 | ** -5 = numerical error
|
|---|
| 38 | **
|
|---|
| 39 | ** Notes:
|
|---|
| 40 | **
|
|---|
| 41 | ** 1 date is the instant for which the prediction is required.
|
|---|
| 42 | ** It is in the TT timescale (formerly Ephemeris Time, ET)
|
|---|
| 43 | ** and is a Modified Julian Date (JD-2400000.5).
|
|---|
| 44 | **
|
|---|
| 45 | ** 2 The longitude and latitude allow correction for geocentric
|
|---|
| 46 | ** parallax. This is usually a small effect, but can become
|
|---|
| 47 | ** important for Earth-crossing asteroids. Geocentric positions
|
|---|
| 48 | ** can be generated by appropriate use of the routines slaEvp and
|
|---|
| 49 | ** slaPlanel.
|
|---|
| 50 | **
|
|---|
| 51 | ** 3 The elements are with respect to the J2000 ecliptic and equinox.
|
|---|
| 52 | **
|
|---|
| 53 | ** 4 Three different element-format options are available:
|
|---|
| 54 | **
|
|---|
| 55 | ** Option jform=1, suitable for the major planets:
|
|---|
| 56 | **
|
|---|
| 57 | ** epoch = epoch of elements (TT MJD)
|
|---|
| 58 | ** orbinc = inclination i (radians)
|
|---|
| 59 | ** anode = longitude of the ascending node, big omega (radians)
|
|---|
| 60 | ** perih = longitude of perihelion, curly pi (radians)
|
|---|
| 61 | ** aorq = mean distance, a (AU)
|
|---|
| 62 | ** e = eccentricity, e
|
|---|
| 63 | ** aorl = mean longitude L (radians)
|
|---|
| 64 | ** dm = daily motion (radians)
|
|---|
| 65 | **
|
|---|
| 66 | ** Option jform=2, suitable for minor planets:
|
|---|
| 67 | **
|
|---|
| 68 | ** epoch = epoch of elements (TT MJD)
|
|---|
| 69 | ** orbinc = inclination i (radians)
|
|---|
| 70 | ** anode = longitude of the ascending node, big omega (radians)
|
|---|
| 71 | ** perih = argument of perihelion, little omega (radians)
|
|---|
| 72 | ** aorq = mean distance, a (AU)
|
|---|
| 73 | ** e = eccentricity, e
|
|---|
| 74 | ** aorl = mean anomaly M (radians)
|
|---|
| 75 | **
|
|---|
| 76 | ** Option jform=3, suitable for comets:
|
|---|
| 77 | **
|
|---|
| 78 | ** epoch = epoch of perihelion (TT MJD)
|
|---|
| 79 | ** orbinc = inclination i (radians)
|
|---|
| 80 | ** anode = longitude of the ascending node, big omega (radians)
|
|---|
| 81 | ** perih = argument of perihelion, little omega (radians)
|
|---|
| 82 | ** aorq = perihelion distance, q (AU)
|
|---|
| 83 | ** e = eccentricity, e
|
|---|
| 84 | **
|
|---|
| 85 | ** 5 Unused elements (dm for jform=2, aorl and dm for jform=3) are
|
|---|
| 86 | ** not accessed.
|
|---|
| 87 | **
|
|---|
| 88 | ** Called: slaGmst, slaDt, slaEpj, slaPvobs, slaPrenut,
|
|---|
| 89 | ** slaPlanel, slaDmxv, slaDcc2s, slaDranrm
|
|---|
| 90 | **
|
|---|
| 91 | ** Last revision: 17 March 1999
|
|---|
| 92 | **
|
|---|
| 93 | ** Copyright P.T.Wallace. All rights reserved.
|
|---|
| 94 | */
|
|---|
| 95 |
|
|---|
| 96 | /* Light time for unit distance (sec) */
|
|---|
| 97 | #define TAU 499.004782
|
|---|
| 98 |
|
|---|
| 99 | {
|
|---|
| 100 | int i;
|
|---|
| 101 | double dvb[3], dpb[3], vsg[6], vsp[6], v[6],
|
|---|
| 102 | rmat[3][3], vgp[6], stl, vgo[6],
|
|---|
| 103 | dx, dy, dz, tl;
|
|---|
| 104 |
|
|---|
| 105 |
|
|---|
| 106 | /* Sun to geocentre (J2000). */
|
|---|
| 107 | slaEvp( date, 2000.0, dvb, dpb, &vsg[3], &vsg[0] );
|
|---|
| 108 |
|
|---|
| 109 | /* Sun to planet (J2000). */
|
|---|
| 110 | slaPlanel ( date, jform, epoch, orbinc, anode, perih, aorq,
|
|---|
| 111 | e, aorl, dm, vsp, jstat );
|
|---|
| 112 |
|
|---|
| 113 | /* Geocentre to planet (J2000). */
|
|---|
| 114 | for ( i = 0; i < 6; i++ ) {
|
|---|
| 115 | v[i] = vsp[i] - vsg[i];
|
|---|
| 116 | }
|
|---|
| 117 |
|
|---|
| 118 | /* Precession and nutation to date. */
|
|---|
| 119 | slaPrenut ( 2000.0, date, rmat );
|
|---|
| 120 | slaDmxv ( rmat, v, vgp );
|
|---|
| 121 | slaDmxv ( rmat, &v[3], &vgp[3] );
|
|---|
| 122 |
|
|---|
| 123 | /* Geocentre to observer (date). */
|
|---|
| 124 | stl = slaGmst ( date - slaDt ( slaEpj ( date ) ) / 86400.0 ) + elong;
|
|---|
| 125 | slaPvobs ( phi, 0.0, stl, vgo );
|
|---|
| 126 |
|
|---|
| 127 | /* Observer to planet (date). */
|
|---|
| 128 | for ( i = 0; i < 6; i++ ) {
|
|---|
| 129 | v[i] = vgp[i] - vgo[i];
|
|---|
| 130 | }
|
|---|
| 131 |
|
|---|
| 132 | /* Geometric distance (AU). */
|
|---|
| 133 | dx = v[0];
|
|---|
| 134 | dy = v[1];
|
|---|
| 135 | dz = v[2];
|
|---|
| 136 | *r = sqrt ( dx * dx + dy * dy + dz * dz );
|
|---|
| 137 |
|
|---|
| 138 | /* Light time (sec). */
|
|---|
| 139 | tl = *r * TAU;
|
|---|
| 140 |
|
|---|
| 141 | /* Correct position for planetary aberration. */
|
|---|
| 142 | for ( i = 0; i < 3; i++ ) {
|
|---|
| 143 | v[i] = v[i] - tl * v[i+3];
|
|---|
| 144 | }
|
|---|
| 145 |
|
|---|
| 146 | /* To RA,Dec. */
|
|---|
| 147 | slaDcc2s ( v, ra, dec );
|
|---|
| 148 | *ra = slaDranrm ( *ra );
|
|---|
| 149 | return;
|
|---|
| 150 | }
|
|---|