1 /*
2  *  This library is free software; you can redistribute it and/or
3  *  modify it under the terms of the GNU Lesser General Public
4  *  License as published by the Free Software Foundation; either
5  *  version 2 of the License, or (at your option) any later version.
6  *
7  *  This library is distributed in the hope that it will be useful,
8  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
9  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
10  *  Lesser General Public License for more details.
11  *
12  *  You should have received a copy of the GNU General Public License
13  *  along with this program; if not, write to the Free Software
14  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
15  *
16  *  Copyright (C) 2000 - 2005 Liam Girdwood
17  */
18 
19 #ifndef _LN_LUNAR_H
20 #define _LN_LUNAR_H
21 
22 #include <libnova/ln_types.h>
23 
24 #define LN_LUNAR_STANDART_HORIZON		0.125
25 
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29 
30 /*! \defgroup lunar Lunar
31 *
32 * Functions relating to the Moon.
33 *
34 * All angles are expressed in degrees.
35 */
36 
37 /*! \fn double ln_get_lunar_sdiam (double JD)
38 * \brief Calculate the semidiameter of the Moon in arc seconds.
39 * \ingroup lunar
40 */
41 double LIBNOVA_EXPORT ln_get_lunar_sdiam (double JD);
42 
43 /*! \fn double ln_get_lunar_rst (double JD, struct ln_lnlat_posn * observer, struct ln_rst_time * rst);
44 * \brief Calculate the time of rise, set and transit for the Moon.
45 * \ingroup lunar
46 */
47 
48 int LIBNOVA_EXPORT ln_get_lunar_rst (double JD, struct ln_lnlat_posn * observer, struct ln_rst_time * rst);
49 
50 /*! \fn void ln_get_lunar_geo_posn (double JD, struct ln_rect_posn * moon, double precision);
51 * \brief Calculate the rectangular geocentric lunar cordinates.
52 * \ingroup lunar
53 */
54 /* ELP 2000-82B theory */
55 void LIBNOVA_EXPORT ln_get_lunar_geo_posn (double JD, struct ln_rect_posn * moon, double precision);
56 
57 /*! \fn void ln_get_lunar_equ_coords_prec (double JD, struct ln_equ_posn * position, double precision);
58 * \brief Calculate lunar equatorial coordinates.
59 * \ingroup lunar
60 */
61 void LIBNOVA_EXPORT ln_get_lunar_equ_coords_prec (double JD, struct ln_equ_posn * position, double precision);
62 
63 /*! \fn void ln_get_lunar_equ_coords (double JD, struct ln_equ_posn * position);
64 * \brief Calculate lunar equatorial coordinates.
65 * \ingroup lunar
66 */
67 void LIBNOVA_EXPORT ln_get_lunar_equ_coords (double JD, struct ln_equ_posn * position);
68 
69 /*! \fn void ln_get_lunar_ecl_coords (double JD, struct ln_lnlat_posn * position, double precision);
70 * \brief Calculate lunar ecliptical coordinates.
71 * \ingroup lunar
72 */
73 void LIBNOVA_EXPORT ln_get_lunar_ecl_coords (double JD, struct ln_lnlat_posn * position, double precision);
74 
75 /*! \fn double ln_get_lunar_phase (double JD);
76 * \brief Calculate the phase angle of the Moon.
77 * \ingroup lunar
78 */
79 double LIBNOVA_EXPORT ln_get_lunar_phase (double JD);
80 
81 /*! \fn double ln_get_lunar_disk (double JD);
82 * \brief Calculate the illuminated fraction of the Moons disk
83 * \ingroup lunar
84 */
85 double LIBNOVA_EXPORT ln_get_lunar_disk (double JD);
86 
87 /*! \fn double ln_get_lunar_earth_dist (double JD);
88 * \brief Calculate the distance between the Earth and the Moon.
89 * \ingroup lunar
90 */
91 double LIBNOVA_EXPORT ln_get_lunar_earth_dist (double JD);
92 
93 /*! \fn double ln_get_lunar_bright_limb (double JD);
94 * \brief Calculate the position angle of the Moon's bright limb.
95 * \ingroup lunar
96 */
97 double LIBNOVA_EXPORT ln_get_lunar_bright_limb (double JD);
98 
99 /*! \fn double ln_get_lunar_long_asc_node (double JD);
100 * \brief Calculate the longitude of the Moon's mean ascending node.
101 * \ingroup lunar
102 */
103 double LIBNOVA_EXPORT ln_get_lunar_long_asc_node (double JD);
104 
105 /*! \fn double ln_get_lunar_long_perigee (double JD);
106 * \brief Calculate the longitude of the Moon's mean perigee.
107 * \ingroup lunar
108 */
109 double LIBNOVA_EXPORT ln_get_lunar_long_perigee (double JD);
110 
111 #ifdef __cplusplus
112 };
113 #endif
114 
115 #endif
116