diff options
author | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
---|---|---|
committer | toma <toma@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2009-11-25 17:56:58 +0000 |
commit | ce599e4f9f94b4eb00c1b5edb85bce5431ab3df2 (patch) | |
tree | d3bb9f5d25a2dc09ca81adecf39621d871534297 /kstars/kstars/ksplanet.h | |
download | tdeedu-ce599e4f9f94b4eb00c1b5edb85bce5431ab3df2.tar.gz tdeedu-ce599e4f9f94b4eb00c1b5edb85bce5431ab3df2.zip |
Copy the KDE 3.5 branch to branches/trinity for new KDE 3.5 features.
BUG:215923
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/kdeedu@1054174 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kstars/kstars/ksplanet.h')
-rw-r--r-- | kstars/kstars/ksplanet.h | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/kstars/kstars/ksplanet.h b/kstars/kstars/ksplanet.h new file mode 100644 index 00000000..7f3603da --- /dev/null +++ b/kstars/kstars/ksplanet.h @@ -0,0 +1,160 @@ +/*************************************************************************** + ksplanet.h - K Desktop Planetarium + ------------------- + begin : Sun Jul 22 2001 + copyright : (C) 2001 by Jason Harris + email : jharris@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. * + * * + ***************************************************************************/ + +#include <qstring.h> +#include <qptrvector.h> +#include <qdict.h> + +#include "ksplanetbase.h" +#include "dms.h" + +#ifndef KSPLANET_H +#define KSPLANET_H + +/**@class KSPlanet + *A subclass of KSPlanetBase for seven of the major planets in the solar system + *(Earth and Pluto have their own specialized classes derived from KSPlanetBase). + *@note The Sun is subclassed from KSPlanet. + * + *KSPlanet contains internal classes to manage the computations of a planet's position. + *The position is computed as a series of sinusoidal sums, similar to a Fourier + *transform. See "Astronomical Algorithms" by Jean Meeus or the file README.planetmath + *for details. + *@short Provides necessary information about objects in the solar system. + *@author Jason Harris + *@version 1.0 + */ + +class KStarsData; + +class KSPlanet : public KSPlanetBase { +public: + +/**Constructor. + *@param kd Some kind of data + *@param s Name of planet + *@param image_file filename of the planet's image + *@param pSize physical diameter of the planet, in km + * + *@todo figure out what @p kd does. + */ + KSPlanet( KStarsData *kd, QString s="unnamed", QString image_file="", double pSize=0 ); + +/**Destructor (empty) + */ + virtual ~KSPlanet() {} + +/**@short Preload the data used by findPosition. + */ + virtual bool loadData(); + +/**Calculate the ecliptic longitude and latitude of the planet for + *the given date (expressed in Julian Millenia since J2000). A reference + *to the ecliptic coordinates is returned as the second object. + *@param jm Julian Millenia (=jd/1000) + *@param ret The ecliptic coordinates are returned by reference through this argument. + */ + virtual void calcEcliptic(double jm, EclipticPosition &ret) const; + +protected: + + bool data_loaded; + +/**Calculate the geocentric RA, Dec coordinates of the Planet. + *@note reimplemented from KSPlanetBase + *@param num pointer to object with time-dependent values for the desired date + *@param Earth pointer to the planet Earth (needed to calculate geocentric coords) + *@return true if position was successfully calculated. + */ + virtual bool findGeocentricPosition( const KSNumbers *num, const KSPlanetBase *Earth=NULL ); + +/**@class OrbitData + *This class contains doubles A,B,C which represent a single term in a planet's + *positional expansion sums (each sum-term is A*COS(B+C*T)). + *@author Mark Hollomon + *@version 1.0 + */ + class OrbitData { + public: + /**Constructor + *@p a the A value + *@p b the B value + *@p c the C value + */ + OrbitData(double a, double b, double c) : + A(a), B(b), C(c) {} + + double A, B, C; + }; + + typedef QPtrVector<OrbitData> OBArray[6]; + +/**OrbitDataColl contains three groups of six QPtrVectors. Each QPtrVector is a + *list of OrbitData objects, representing a single sum used in computing + *the planet's position. A set of six of these vectors comprises the large + *"meta-sum" which yields the planet's Longitude, Latitude, or Distance value. + *@author Mark Hollomon + *@version 1.0 + */ + class OrbitDataColl { + public: + /**Constructor*/ + OrbitDataColl(); + + OBArray Lon; + OBArray Lat; + OBArray Dst; + }; + + +/**OrbitDataManager places the OrbitDataColl objects for all planets in a QDict + *indexed by the planets' names. It also loads the positional data of each planet + *from disk. + *@author Mark Hollomon + *@version 1.0 + */ + class OrbitDataManager { + public: + /**Constructor*/ + OrbitDataManager(); + + /**Load orbital data for a planet from disk. + *The data is stored on disk in a series of files named + *"name.[LBR][0...5].vsop", where "L"=Longitude data, "B"=Latitude data, + *and R=Radius data. + *@p n the name of the planet whose data is to be loaded from disk. + *@return pointer to the OrbitDataColl containing the planet's orbital data. + */ + OrbitDataColl *loadData(QString n); + + private: + /**Read a single orbital data file from disk into an OrbitData vector. + *The data files are named "name.[LBR][0...5].vsop", where + *"L"=Longitude data, "B"=Latitude data, and R=Radius data. + *@p fname the filename to be read. + *@p vector pointer to the OrbitData vector to be filled with these data. + */ + bool readOrbitData(QString fname, QPtrVector<KSPlanet::OrbitData> *vector); + + QDict<OrbitDataColl> dict; + }; + + static OrbitDataManager odm; + +}; + +#endif |