source: trunk/MagicSoft/slalib/plante.c@ 2908

Last change on this file since 2908 was 731, checked in by tbretz, 24 years ago
*** empty log message ***
  • Property svn:executable set to *
File size: 4.9 KB
Line 
1#include "slalib.h"
2#include "slamac.h"
3void 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}
Note: See TracBrowser for help on using the repository browser.