summaryrefslogtreecommitdiffstats
path: root/kstars/kstars/ksmoon.h
diff options
context:
space:
mode:
Diffstat (limited to 'kstars/kstars/ksmoon.h')
-rw-r--r--kstars/kstars/ksmoon.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/kstars/kstars/ksmoon.h b/kstars/kstars/ksmoon.h
new file mode 100644
index 00000000..80f65c3e
--- /dev/null
+++ b/kstars/kstars/ksmoon.h
@@ -0,0 +1,133 @@
+/***************************************************************************
+ ksmoon.h - K Desktop Planetarium
+ -------------------
+ begin : Sun Aug 26 2001
+ copyright : (C) 2001 by Jason Harris
+ email : kstars@30doradus.org
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef KSMOON_H
+#define KSMOON_H
+
+#include "ksplanetbase.h"
+#include "dms.h"
+
+/**@class KSMoon
+ *A subclass of SkyObject that provides information
+ *needed for the Moon. Specifically, KSMoon provides a moon-specific
+ *findPosition() function. Also, there is a method findPhase(), which returns
+ *the lunar phase as a floating-point number between 0.0 and 1.0.
+ *@short Provides necessary information about the Moon.
+ *@author Jason Harris
+ *@version 1.0
+ */
+
+class KStarsData;
+class KSSun;
+
+class KSMoon : public KSPlanetBase {
+public:
+ /**
+ *Default constructor. Set name="Moon".
+ */
+ KSMoon(KStarsData *kd);
+
+ /**Destructor (empty). */
+ ~KSMoon();
+
+ /**
+ *Determine the phase angle of the moon, and assign the appropriate
+ *moon image
+ *@param Sun The current Sun object.
+ */
+ void findPhase( const KSSun *Sun );
+
+ /**@return the moon's current phase angle, as a dms angle
+ */
+ dms phase( void ) const { return Phase; }
+
+ /**@return the illuminated fraction of the Moon as seen from Earth
+ */
+ double illum( void ) const { return 0.5*(1.0 - cos( phase().radians() ) ); }
+
+ /**@return a short string describing the moon's phase
+ */
+ QString phaseName( void ) const;
+
+ /** reimplemented from KSPlanetBase
+ */
+ virtual bool loadData();
+
+protected:
+ /**Reimplemented from KSPlanetBase, this function employs unique algorithms for
+ *estimating the lunar coordinates. Finding the position of the moon is
+ *much more difficult than the other planets. For one thing, the Moon is
+ *a lot closer, so we can detect smaller deviations in its orbit. Also,
+ *the Earth has a significant effect on the Moon's orbit, and their
+ *interaction is complex and nonlinear. As a result, the positions as
+ *calculated by findPosition() are only accurate to about 10 arcseconds
+ *(10 times less precise than the planets' positions!)
+ *@short moon-specific coordinate finder
+ *@param num KSNumbers pointer for the target date/time
+ *@note we don't use the Earth pointer here
+ */
+ virtual bool findGeocentricPosition( const KSNumbers *num, const KSPlanetBase* );
+
+private:
+ dms Phase;
+ static bool data_loaded;
+
+/**@class MoonLRData
+ *Encapsulates the Longitude and radius terms of the sums
+ *used to compute the moon's position.
+ *@short Moon Longitude and radius data object
+ *@author Mark Hollomon
+ *@version 1.0
+ */
+ class MoonLRData {
+ public:
+ int nd;
+ int nm;
+ int nm1;
+ int nf;
+ double Li;
+ double Ri;
+
+ MoonLRData( int pnd, int pnm, int pnm1, int pnf, double pLi, double pRi ):
+ nd(pnd), nm(pnm), nm1(pnm1), nf(pnf), Li(pLi), Ri(pRi) {}
+ };
+
+ static QPtrList<MoonLRData> LRData;
+
+/**@class MoonBData
+ *Encapsulates the Latitude terms of the sums
+ *used to compute the moon's position.
+ *@short Moon Latitude data object
+ *@author Mark Hollomon
+ *@version 1.0
+ */
+ class MoonBData {
+ public:
+ int nd;
+ int nm;
+ int nm1;
+ int nf;
+ double Bi;
+
+ MoonBData( int pnd, int pnm, int pnm1, int pnf, double pBi ):
+ nd(pnd), nm(pnm), nm1(pnm1), nf(pnf), Bi(pBi) {}
+ };
+
+ static QPtrList<MoonBData> BData;
+};
+
+#endif