You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdeedu/kstars/kstars/kspluto.cpp

74 lines
2.8 KiB

/***************************************************************************
kspluto.cpp - Trinity Desktop Planetarium
-------------------
begin : Mon Sep 24 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. *
* *
***************************************************************************/
#include <math.h>
#include <tqfile.h>
#include <kdebug.h>
#include "kspluto.h"
#include "ksutils.h"
#include "ksnumbers.h"
#ifdef B0
// There are systems that #define B0 as a special termios flag (for baud rate)
#undef B0
#endif
KSPluto::KSPluto(KStarsData *kd, TQString fn, double pSize )
: KSAsteroid( kd, I18N_NOOP( "Pluto" ), fn, J2000,
39.48168677, 0.24880766, dms(17.14175), dms(113.76329),
dms(110.30347), dms(14.86205), 1.0 ) {
//Initialize the base orbital element values for J2000:
a0 = 39.48168677; //semi-major axis (AU)
e0 = 0.24880766; //eccentricity
i0.setD( 17.14175 ); //inclination (degrees)
w0.setD( 113.76329 ); //argument of perihelion (degrees)
N0.setD( 110.30347 ); //long. of ascending node (degrees)
M0.setD( 14.86205 ); //mean anomaly (degrees)
//rate-of-change values for the orbital elements
a1 = -0.00076912; // da/dt (AU/cnetury)
e1 = 0.00006465; // de/dt (1/century)
i1 = 11.07/3600.; // di/dt (degrees/century)
w1 = -94.92/3600.; // dw/dt (degrees/century)
N1 = -37.33/3600.; // dN/dt (degrees/century)
M1 = 522880.15/3600.; // dM/dt (degrees/century)
setPhysicalSize( pSize );
setType( 2 ); //It's really a planet, not an asteroid
}
KSPluto::~KSPluto() {
}
//Determine values for the orbital elements for the requested JD, then
//call KSAsteroid::findGeocentricPosition()
bool KSPluto::findGeocentricPosition( const KSNumbers *num, const KSPlanetBase *Earth ) {
//First, set the orbital element values according to the current epoch
double t = num->julianCenturies();
set_a( a0 + a1*t );
set_e( e0 + e1*t );
set_i( i0.Degrees() + i1*t );
set_N( N0.Degrees() + N1*t );
set_M( M0.Degrees() + M1*t );
set_P( 365.2568984 * pow((a0+a1*t), 1.5) ); //set period from Kepler's 3rd law
setJD( num->julianDay() );
return KSAsteroid::findGeocentricPosition( num, Earth );
}