[prev in list] [next in list] [prev in thread] [next in thread]
List: kstars-devel
Subject: [Kstars-devel] KDE/kdeedu/kstars/kstars
From: Médéric Boquien <mboquien () free ! fr>
Date: 2009-08-06 22:42:37
Message-ID: 1249598557.269879.875.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1008121 by mboquien:
Refactor the classes handling the moons of the planets. They had a lot of code \
duplication and adding moons to other planets would have been cumbersome. Here is \
what it does:
* it removes JupiterMoonsComponent and the SaturnMoonsComponent classes and replaces \
them with a PlanetMoonsComponent class,
* it factors the sharable code of JupiterMoons and SaturnMoons into a new base class \
PlanetMoons. Only the code specific to the calculation of the location of the \
satellites is left into the subclasses.
Thanks to Alexey Khudyakov for reviewing the patch!
CCMAIL: kstars-devel@kde.org
M +2 -2 CMakeLists.txt
D skycomponents/jupitermoonscomponent.cpp
D skycomponents/jupitermoonscomponent.h
A skycomponents/planetmoonscomponent.cpp [License: GPL (v2+)]
A skycomponents/planetmoonscomponent.h [License: GPL (v2+)]
D skycomponents/saturnmoonscomponent.cpp
D skycomponents/saturnmoonscomponent.h
M +3 -4 skycomponents/solarsystemcomposite.cpp
M +3 -2 skycomponents/solarsystemcomposite.h
M +10 -33 skyobjects/jupitermoons.cpp
M +4 -58 skyobjects/jupitermoons.h
M +1 -1 skyobjects/ksplanetbase.h
A skyobjects/planetmoons.cpp [License: GPL (v2+)]
A skyobjects/planetmoons.h [License: GPL (v2+)]
M +10 -30 skyobjects/saturnmoons.cpp
M +6 -57 skyobjects/saturnmoons.h
--- trunk/KDE/kdeedu/kstars/kstars/CMakeLists.txt #1008120:1008121
@@ -188,8 +188,7 @@
skycomponents/solarsystemlistcomponent.cpp
skycomponents/asteroidscomponent.cpp
skycomponents/cometscomponent.cpp
- skycomponents/jupitermoonscomponent.cpp
- skycomponents/saturnmoonscomponent.cpp
+ skycomponents/planetmoonscomponent.cpp
skycomponents/solarsystemcomposite.cpp
skycomponents/satellitecomposite.cpp
skycomponents/satellitecomponent.cpp
@@ -253,6 +252,7 @@
skyobjects/deepskyobject.cpp
skyobjects/jupitermoons.cpp
skyobjects/saturnmoons.cpp
+ skyobjects/planetmoons.cpp
skyobjects/ksasteroid.cpp
skyobjects/kscomet.cpp
skyobjects/ksmoon.cpp
--- trunk/KDE/kdeedu/kstars/kstars/skycomponents/solarsystemcomposite.cpp \
#1008120:1008121 @@ -33,8 +33,7 @@
#include "skyobjects/kssun.h"
#include "skyobjects/ksmoon.h"
#include "skyobjects/kspluto.h"
-#include "jupitermoonscomponent.h"
-#include "saturnmoonscomponent.h"
+#include "planetmoonscomponent.h"
// FIXME: is KStarsData needed here
SolarSystemComposite::SolarSystemComposite(SkyComponent *parent, KStarsData * )
@@ -52,11 +51,11 @@
addComponent( new SolarSystemSingleComponent( this, new KSPlanet( \
KSPlanetBase::MARS ), Options::showMars, 4 ) );
SolarSystemSingleComponent *jup = new SolarSystemSingleComponent( this, new \
KSPlanet( KSPlanetBase::JUPITER ), Options::showJupiter, 4 ); addComponent( jup );
- m_JupiterMoons = new JupiterMoonsComponent( this, jup, &Options::showJupiter);
+ m_JupiterMoons = new PlanetMoonsComponent( this, jup, KSPlanetBase::JUPITER, \
&Options::showJupiter); addComponent( m_JupiterMoons );
SolarSystemSingleComponent *sat = new SolarSystemSingleComponent( this, new \
KSPlanet( KSPlanetBase::SATURN ), Options::showSaturn, 4 ); addComponent( sat );
- m_SaturnMoons = new SaturnMoonsComponent( this, sat, &Options::showSaturn);
+ m_SaturnMoons = new PlanetMoonsComponent( this, sat, KSPlanetBase::SATURN, \
&Options::showSaturn); addComponent( m_SaturnMoons );
addComponent( new SolarSystemSingleComponent( this, new KSPlanet( \
KSPlanetBase::URANUS ), Options::showUranus, 4 ) );
addComponent( new SolarSystemSingleComponent( this, new KSPlanet( \
KSPlanetBase::NEPTUNE ), Options::showNeptune, 4 ) );
--- trunk/KDE/kdeedu/kstars/kstars/skycomponents/solarsystemcomposite.h \
#1008120:1008121 @@ -19,6 +19,7 @@
#define SOLARSYSTEMCOMPOSITE_H
#include "skycomposite.h"
+#include "planetmoonscomponent.h"
class KSPlanet;
class KSSun;
@@ -70,8 +71,8 @@
KSPlanet *m_Earth;
KSSun *m_Sun;
KSMoon *m_Moon;
- JupiterMoonsComponent *m_JupiterMoons;
- SaturnMoonsComponent *m_SaturnMoons;
+ PlanetMoonsComponent *m_JupiterMoons;
+ PlanetMoonsComponent *m_SaturnMoons;
AsteroidsComponent *m_AsteroidsComponent;
CometsComponent *m_CometsComponent;
SkyLabeler* m_skyLabeler;
--- trunk/KDE/kdeedu/kstars/kstars/skyobjects/jupitermoons.cpp #1008120:1008121
@@ -17,8 +17,6 @@
#include "jupitermoons.h"
-#include <kdebug.h>
-
#include "ksnumbers.h"
#include "ksplanet.h"
#include "kssun.h"
@@ -32,36 +30,15 @@
Moon.append( new TrailObject( SkyObject::MOON, 0.0, 0.0, 4.6, i18nc( "Jupiter's \
moon Ganymede", "Ganymede" ) ) );
Moon.append( new TrailObject( SkyObject::MOON, 0.0, 0.0, 5.7, i18nc( "Jupiter's \
moon Callisto", "Callisto" ) ) );
- for ( uint i=0; i<4; ++i ) {
- XJ[i] = 0.0;
- YJ[i] = 0.0;
- ZJ[i] = 0.0;
- }
+ XP = QVector<double>(4, 0.0);
+ YP = QVector<double>(4, 0.0);
+ ZP = QVector<double>(4, 0.0);
+ InFront = QVector<bool>(4, false);
}
JupiterMoons::~JupiterMoons(){
- qDeleteAll( Moon );
}
-QString JupiterMoons::name( int id ) const {
- return Moon[id]->translatedName();
-}
-
-TrailObject* JupiterMoons::moonNamed( const QString &name ) const {
- for ( uint i=0; i<4; ++i ) {
- if ( Moon[i]->name() == name ) {
- return Moon[i];
- break;
- }
- }
- return 0;
-}
-
-void JupiterMoons::EquatorialToHorizontal( const dms *LST, const dms *lat ) {
- for ( uint i=0; i<4; ++i )
- moon(i)->EquatorialToHorizontal( LST, lat );
-}
-
void JupiterMoons::findPosition( const KSNumbers *num, const KSPlanet *Jupiter, \
const KSSun *Sun ) { double Xj, Yj, Zj, Rj;
double sinJB, cosJB, sinJL, cosJL;
@@ -498,14 +475,14 @@
pa = Jupiter->pa()*dms::PI/180.0;
for ( int i=0; i<4; ++i ) {
- XJ[i] = A6[i] * cos( D ) - C6[i] * sin( D );
- YJ[i] = A6[i] * sin( D ) + C6[i] * cos( D );
- ZJ[i] = B6[i];
+ XP[i] = A6[i] * cos( D ) - C6[i] * sin( D );
+ YP[i] = A6[i] * sin( D ) + C6[i] * cos( D );
+ ZP[i] = B6[i];
- Moon[i]->setRA( Jupiter->ra()->Hours() - 0.011*( XJ[i] * cos( pa ) - YJ[i] * \
sin( pa ) )/15.0 );
- Moon[i]->setDec( Jupiter->dec()->Degrees() - 0.011*( XJ[i] * sin( pa ) + \
YJ[i] * cos( pa ) ) ); + Moon[i]->setRA( Jupiter->ra()->Hours() - 0.011*( \
XP[i] * cos( pa ) - YP[i] * sin( pa ) )/15.0 ); + Moon[i]->setDec( \
Jupiter->dec()->Degrees() - 0.011*( XP[i] * sin( pa ) + YP[i] * cos( pa ) ) );
- if ( ZJ[i] < 0.0 ) InFront[i] = true;
+ if ( ZP[i] < 0.0 ) InFront[i] = true;
else InFront[i] = false;
//Update Trails
--- trunk/KDE/kdeedu/kstars/kstars/skyobjects/jupitermoons.h #1008120:1008121
@@ -20,6 +20,7 @@
#include <QString>
#include <QVector>
+#include "planetmoons.h"
class KSNumbers;
class KSPlanet;
@@ -37,7 +38,7 @@
*@author Jason Harris
*@version 1.0
*/
-class JupiterMoons {
+class JupiterMoons: public PlanetMoons {
public:
/**
*Constructor. Assign the name of each moon,
@@ -48,7 +49,7 @@
/**
*Destructor. Delete moon objects.
*/
- ~JupiterMoons();
+ virtual ~JupiterMoons();
/**
*@short Find the positions of each Moon, relative to Jupiter.
@@ -70,62 +71,7 @@
*@param jup pointer to the jupiter object
*@param sunptr pointer to the Sun object
*/
- void findPosition( const KSNumbers *num, const KSPlanet *jup, const KSSun \
*sunptr );
-
- /**
- *@return pointer to a moon given the ID number.
- *@param id which moon? 0=Io, 1=Europa, 2=Ganymede, 3=Callisto
- */
- inline TrailObject* moon( int id ) { return Moon[id]; }
-
- /**
- *@return pointer to a moon, given its name:
- *@param name the name of the moon (Io, Europa, Ganymede, Callisto)
- */
- TrailObject* moonNamed( const QString &name ) const;
-
- /**
- *@return true if the Moon is nearer to Earth than Jupiter.
- *@param id which moon? 0=Io, 1=Europa, 2=Ganymede, 3=Callisto
- */
- inline bool inFront( int id ) const { return InFront[id]; }
-
- /**
- *@return the name of a moon.
- *@param id which moon? 0=Io, 1=Europa, 2=Ganymede, 3=Callisto
- */
- QString name( int id ) const;
-
- /**
- *Convert the RA,Dec coordinates of each moon to Az,Alt
- *@param LSTh pointer to the current local sidereal time
- *@param lat pointer to the geographic latitude
- */
- void EquatorialToHorizontal( const dms *LSTh, const dms *lat );
-
- /**
- *@return the X-coordinate in the Jupiter-centered coord. system.
- *@param i which moon? 0=Io, 1=Europa, 2=Ganymede, 3=Callisto.
- */
- double x( int i ) const { return XJ[i]; }
-
- /**
- *@return the Y-coordinate in the Jupiter-centered coord. system.
- *@param i which moon? 0=Io, 1=Europa, 2=Ganymede, 3=Callisto.
- */
- double y( int i ) const { return YJ[i]; }
-
- /**
- *@return the Z-coordinate in the Jupiter-centered coord. system.
- *@param i which moon? 0=Io, 1=Europa, 2=Ganymede, 3=Callisto.
- */
- double z( int i ) const { return ZJ[i]; }
-
-private:
- QVector<TrailObject*> Moon;
- bool InFront[4];
- //the rectangular position, relative to Jupiter. X-axis is equator of Jupiter; \
usints are Jup. Radius
- double XJ[4], YJ[4], ZJ[4];
+ virtual void findPosition( const KSNumbers *num, const KSPlanet *jup, const \
KSSun *sunptr ); };
#endif
--- trunk/KDE/kdeedu/kstars/kstars/skyobjects/ksplanetbase.h #1008120:1008121
@@ -82,7 +82,7 @@
void init(const QString &s, const QString &image_file, const QColor &c, double \
pSize );
- enum { MERCURY=0, VENUS=1, MARS=2, JUPITER=3, SATURN=4, URANUS=5, NEPTUNE=6, \
PLUTO=7, SUN=8, MOON=9, UNKNOWN_PLANET }; + enum Planets { MERCURY=0, VENUS=1, \
MARS=2, JUPITER=3, SATURN=4, URANUS=5, NEPTUNE=6, PLUTO=7, SUN=8, MOON=9, \
UNKNOWN_PLANET };
static KSPlanetBase* createPlanet( int n );
--- trunk/KDE/kdeedu/kstars/kstars/skyobjects/saturnmoons.cpp #1008120:1008121
@@ -36,35 +36,15 @@
Moon.append( new TrailObject( SkyObject::MOON, 0.0, 0.0, 14.9, i18nc( "Saturn's \
moon Hyperion", "Hyperion" ) ) );
Moon.append( new TrailObject( SkyObject::MOON, 0.0, 0.0, 11, i18nc( "Saturn's \
moon Iapetus", "Iapetus" ) ) );
- for ( uint i=0; i<8; ++i ) {
- XS[i] = 0.0;
- YS[i] = 0.0;
- ZS[i] = 0.0;
- }
+ XP = QVector<double>(8, 0.0);
+ YP = QVector<double>(8, 0.0);
+ ZP = QVector<double>(8, 0.0);
+ InFront = QVector<bool>(8, false);
}
SaturnMoons::~SaturnMoons(){
- qDeleteAll( Moon );
}
-QString SaturnMoons::name( int id ) const {
- return Moon[id]->translatedName();
-}
-
-TrailObject* SaturnMoons::moonNamed( const QString &name ) const {
- for ( uint i=0; i<8; ++i ) {
- if ( Moon[i]->name() == name ) {
- return Moon[i];
- break;
- }
- }
- return 0;
-}
-
-void SaturnMoons::EquatorialToHorizontal( const dms *LST, const dms *lat ) {
- for ( uint i=0; i<8; ++i )
- moon(i)->EquatorialToHorizontal( LST, lat );
-}
void SaturnMoons::HelperSubroutine(double e, double lambdadash, double p, double a,
double omega, double i, double c1, double s1,
double& r, double& lambda, double& gamma, double& \
w) @@ -441,14 +421,14 @@
double pa = Saturn->pa()*dms::PI/180.0;
for ( int i=0; i<8; ++i ) {
- XS[i] = A4[i+1] * cos( D ) - C4[i+1] * sin( D );
- YS[i] = A4[i+1] * sin( D ) + C4[i+1] * cos( D );
- ZS[i] = B4[i+1];
+ XP[i] = A4[i+1] * cos( D ) - C4[i+1] * sin( D );
+ YP[i] = A4[i+1] * sin( D ) + C4[i+1] * cos( D );
+ ZP[i] = B4[i+1];
- Moon[i]->setRA( Saturn->ra()->Hours() - 0.011*( XS[i] * cos( pa ) - YS[i] * \
sin( pa ) )/15.0 );
- Moon[i]->setDec( Saturn->dec()->Degrees() - 0.011*( XS[i] * sin( pa ) + \
YS[i] * cos( pa ) ) ); + Moon[i]->setRA( Saturn->ra()->Hours() - 0.011*( XP[i] \
* cos( pa ) - YP[i] * sin( pa ) )/15.0 ); + Moon[i]->setDec( \
Saturn->dec()->Degrees() - 0.011*( XP[i] * sin( pa ) + YP[i] * cos( pa ) ) );
- if ( ZS[i] < 0.0 ) InFront[i] = true;
+ if ( ZP[i] < 0.0 ) InFront[i] = true;
else InFront[i] = false;
//Update Trails
--- trunk/KDE/kdeedu/kstars/kstars/skyobjects/saturnmoons.h #1008120:1008121
@@ -20,6 +20,7 @@
#include <QString>
#include <QVector>
+#include "planetmoons.h"
class KSNumbers;
class KSPlanet;
@@ -28,7 +29,7 @@
class dms;
/**
- *@class SAturnMoons
+ *@class SaturnMoons
*Implements the Eight largest moons of Saturn.
*using Algorithms based on "Astronomical Algorithms"by Jean Meeus
*
@@ -37,7 +38,7 @@
*@author Vipul Kumar Singh
*@version 1.0
*/
-class SaturnMoons {
+class SaturnMoons : public PlanetMoons {
public:
/**
*Constructor. Assign the name of each moon,
@@ -48,7 +49,7 @@
/**
*Destructor. Delete moon objects.
*/
- ~SaturnMoons();
+ virtual ~SaturnMoons();
/**
*@short Find the positions of each Moon, relative to Saturn.
@@ -70,57 +71,10 @@
*@param sat pointer to the Saturn object
*@param sunptr pointer to the Sun object
*/
- void findPosition( const KSNumbers *num, const KSPlanet *sat, const KSSun \
*sunptr ); + virtual void findPosition( const KSNumbers *num, const KSPlanet *sat, \
const KSSun *sunptr );
- /**
- *@return pointer to a moon given the ID number.
- *@param id which moon? \
0=Mimas,1=Enceladus,2=Tethys,3=Dione,4=Rhea,5=Titan,6=Hyperion,7=Lapetus
- */
- inline TrailObject* moon( int id ) { return Moon[id]; }
+ private:
- /**
- *@return pointer to a moon, given its name:
- *@param name the name of the moon \
(Mimas,Enceladus,Tethys,Dione,Rhea,Titan,Hyperion,Lapetus )
- */
- TrailObject* moonNamed( const QString &name ) const;
-
- /**
- *@return true if the Moon is nearer to Earth than Saturn.
- *@param id which moon? \
0=Mimas,1=Enceladus,2=Tethys,3=Dione,4=Rhea,5=Titan,6=Hyperion,7=Lapetus
- */
- inline bool inFront( int id ) const { return InFront[id]; }
-
- /**
- *@return the name of a moon.
- *@param id which moon? \
0=Mimas,1=Enceladus,2=Tethys,3=Dione,4=Rhea,5=Titan,6=Hyperion,7=Lapetus
- */
- QString name( int id ) const;
-
- /**
- *Convert the RA,Dec coordinates of each moon to Az,Alt
- *@param LSTh pointer to the current local sidereal time
- *@param lat pointer to the geographic latitude
- */
- void EquatorialToHorizontal( const dms *LSTh, const dms *lat );
-
- /**
- *@return the X-coordinate in the Saturn-centered coord. system.
- *@param i which moon? \
0=Mimas,1=Enceladus,2=Tethys,3=Dione,4=Rhea,5=Titan,6=Hyperion,7=Lapetus
- */
- double x( int i ) const { return XS[i]; }
-
- /**
- *@return the Y-coordinate in the Saturn-centered coord. system.
- *@param i which moon? \
0=Mimas,1=Enceladus,2=Tethys,3=Dione,4=Rhea,5=Titan,6=Hyperion,7=Lapetus
- */
- double y( int i ) const { return YS[i]; }
-
- /**
- *@return the Z-coordinate in the Saturn-centered coord. system.
- *@param i which moon? \
0=Mimas,1=Enceladus,2=Tethys,3=Dione,4=Rhea,5=Titan,6=Hyperion,7=Lapetus
- */
- double z( int i ) const { return ZS[i]; }
-
/** the subroutine helps in saturn moon calculations
*/
void HelperSubroutine( double e, double lambdadash, double p, double a, double \
omega, double i, double c1, double s1, double& r, double& lambda, double& gamma, \
double& w ); @@ -136,11 +90,6 @@
Value -= 360;
return Value;
}
-private:
- QVector<TrailObject*> Moon;
- bool InFront[8];
- //the rectangular position, relative to Saturn. X-axis is equator of Saturn; \
usints are Sat. Radius
- double XS[8], YS[8], ZS[8];
};
#endif
_______________________________________________
Kstars-devel mailing list
Kstars-devel@kde.org
https://mail.kde.org/mailman/listinfo/kstars-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic