|
|
|
/***************************************************************************
|
|
|
|
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
|
|
|
|
*/
|
|
|
|
TQString 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 TQPtrList<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 TQPtrList<MoonBData> BData;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|