![]() |
Stellarium
25.1
|
Class used to store rotational elements, i.e. More...
#include <RotationElements.hpp>
Data Structures | |
struct | PlanetCorrections |
0.21+: Axes of planets and moons require terms depending on T=(jde-J2000)/36525, described in Explanatory Supplement 2013, Tables 10.1 and 10.10-14, updated in WGCCRE reports 2009 and 2015. More... | |
Public Types | |
enum | ComputationMethod { Traditional , WGCCRE } |
enum | PlanetCorrection { EarthMoon =3 , Mars =4 , Jupiter =5 , Saturn =6 , Uranus =7 , Neptune =8 } |
typedef double(* | axisRotFuncType) (const double, const double) |
Finetuning correction functions. More... | |
typedef void(* | axisOriFuncType) (const double, const double, double *, double *) |
Static Public Member Functions | |
static void | updatePlanetCorrections (const double JDE, const PlanetCorrection planet) |
Update the planet corrections. More... | |
static double | corrWnil (const double d, const double T) |
These corr* functions can be used as corrW. | |
static double | corrWMoon (const double d, const double T) |
static double | corrWMercury (const double d, const double T) |
static double | corrWMars (const double d, const double T) |
static double | corrWJupiter (const double d, const double T) |
The default W delivers SystemII longitude. More... | |
static double | corrWNeptune (const double d, const double T) |
static double | corrWPhobos (const double d, const double T) |
static double | corrWDeimos (const double d, const double T) |
static double | corrWIo (const double d, const double T) |
static double | corrWEuropa (const double d, const double T) |
static double | corrWGanymede (const double d, const double T) |
static double | corrWCallisto (const double d, const double T) |
static double | corrWAmalthea (const double d, const double T) |
static double | corrWThebe (const double d, const double T) |
static double | corrWMimas (const double d, const double T) |
static double | corrWTethys (const double d, const double T) |
static double | corrWRhea (const double d, const double T) |
static double | corrWJanus (const double d, const double T) |
static double | corrWEpimetheus (const double d, const double T) |
static double | corrWCordelia (const double d, const double T) |
static double | corrWOphelia (const double d, const double T) |
static double | corrWBianca (const double d, const double T) |
static double | corrWCressida (const double d, const double T) |
static double | corrWDesdemona (const double d, const double T) |
static double | corrWJuliet (const double d, const double T) |
static double | corrWPortia (const double d, const double T) |
static double | corrWRosalind (const double d, const double T) |
static double | corrWBelinda (const double d, const double T) |
static double | corrWPuck (const double d, const double T) |
static double | corrWAriel (const double d, const double T) |
static double | corrWUmbriel (const double d, const double T) |
static double | corrWTitania (const double d, const double T) |
static double | corrWOberon (const double d, const double T) |
static double | corrWMiranda (const double d, const double T) |
static double | corrWTriton (const double d, const double T) |
static double | corrWNaiad (const double d, const double T) |
static double | corrWThalassa (const double d, const double T) |
static double | corrWDespina (const double d, const double T) |
static double | corrWGalatea (const double d, const double T) |
static double | corrWLarissa (const double d, const double T) |
static double | corrWProteus (const double d, const double T) |
static void | corrOriNil (const double, const double, double *, double *) |
These functions can be used as corrOri. | |
static void | corrOriMoon (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriMars (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriJupiter (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriNeptune (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriPhobos (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriDeimos (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriIo (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriEuropa (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriGanymede (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriCallisto (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriAmalthea (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriThebe (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriMimas (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriTethys (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriRhea (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriJanus (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriEpimetheus (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriAriel (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriUmbriel (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriTitania (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriOberon (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriMiranda (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriCordelia (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriOphelia (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriBianca (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriCressida (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriDesdemona (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriJuliet (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriPortia (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriRosalind (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriBelinda (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriPuck (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriTriton (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriNaiad (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriThalassa (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriDespina (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriGalatea (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriLarissa (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static void | corrOriProteus (const double d, const double T, double *J2000NPoleRA, double *J2000NPoleDE) |
static double | getMarsMagLs (const double Ls, const bool albedo) |
Retrieve magnitude variation depending on angle Ls [radians]. More... | |
Data Fields | |
double | period |
double | offset |
double | epoch |
double | obliquity |
double | ascendingNode |
ComputationMethod | method |
double | ra0 |
double | ra1 |
double | de0 |
double | de1 |
double | W0 |
double | W1 |
double | currentAxisRA |
double | currentAxisDE |
double | currentAxisW |
axisRotFuncType | corrW |
axisOriFuncType | corrOri |
Static Public Attributes | |
static constexpr double | J2000 = 2451545.0 |
static PlanetCorrections | planetCorrections |
static const QMap< QString, axisRotFuncType > | axisRotCorrFuncMap |
static const QMap< QString, axisOriFuncType > | axisOriCorrFuncMap |
static double | grsJD |
JD (epoch) for calculation of position of Great Red Spot. | |
static double | grsLongitude |
Longitude of Great Red Spot at grsJD (System II, degrees) | |
static double | grsDrift |
Annual drift of Great Red Spot position (degrees) | |
Class used to store rotational elements, i.e.
axis orientation for the planetary body. Data are read from ssystem_(major|minor).ini in SolarSystem.cpp::loadPlanets().
Notes of early 2021: The original planet axis model in Stellarium seems to be an outdated model untraceable in the literature. Stellarium used to have elements w.r.t. VSOP87 (ecliptical) frame for planets, and elements w.r.t. the host planet's equator for planet moons: ascendingNode obliquity offset period We cannot remove these old data as long as some Moon orbits for the outer planets depend on them. The problem is that without a reference we have no idea whether any of these elements and algorithms are correct.
IAU standards like the Report of the IAU Working Group on Cartographic Coordinates and Rotational elements 2009 (DOI:10.1007/s10569-010-9320-4) has axes given w.r.t. J2000 ICRF.
Between V0.15 and 0.20.*, if the planet elements in ssystem.ini had elements "rot_pole_ra" and "rot_pole_de" given, the poles were transformed to ecliptically-based directions (VSOP87) obliquity/ascendingNode. But these were only ra/de_J2000 poles. Some axes have precession, which need to be modelled/updated. The new way (0.21+): We still allow using the previous 4 elements in Planet::computeTransMatrix(.,.) and Planet::getSiderealTime(), but only if WGCCRE elements are not available.
ra=ra0+T*ra1 de=de0+T*de1 ( --> obliquity, ascendingNode) rot_rotation_offset [degrees] =W0 rot_periode [hours] = computed from rot_pole_W1[deg/day] if that exists. 360 [deg] / rot [hours] --> 360 * rot / 24 [deg/hours]
If rot_pole... values are given, then they are ICRF and transformed on the fly to VSOP87, stored in here.
Since 0.21 we use the WGCCRE elements and orientations directly, so that axes behave properly. In addition, the objects with more complicated element behaviour are updated with two special functions. New keys in ssystem_*.ini, their storage in RotationElements, and their equivalents in the IAU report: rot_pole_ra [degrees] re.ra0 [rad] constant term for alpha_0 rot_pole_de [degrees] re.ra1 [rad/ct] constant term for delta_0 rot_pole_ra1 [degrees/cy] re.de0 [rad] T factor for alpha_0 rot_pole_de1 [degrees/cy] re.de1 [rad/ct] T factor for delta_0 rot_pole_W0 [degrees] re.W0 [degrees] constant term fo W. rot_pole_W1 [degrees/day] re.W1 [degrees/day] d factor for W
struct RotationElements::PlanetCorrections |
0.21+: Axes of planets and moons require terms depending on T=(jde-J2000)/36525, described in Explanatory Supplement 2013, Tables 10.1 and 10.10-14, updated in WGCCRE reports 2009 and 2015.
Others require frequent updates, depending on jde-J2000. (Moon etc.) These should be updated as frequently as needed, optimally with the planet. Light time correction should be applied when needed. best place to call update is the SolarSystem::computePlanets()
typedef double(* RotationElements::axisRotFuncType) (const double, const double) |
Finetuning correction functions.
These functions are attached to the planets in Planet::setRotationElements() and called at the right places. This avoids ugly sequences of name query ifelses. arguments are d=JDE-J2000, T=d/36525, J2000NPoleRA, J2000NPoleDE
|
static |
The default W delivers SystemII longitude.
We have to shift by GRS position and texture position. The final value will no longer be W but the rotation value required to show the GRS.
|
static |
Retrieve magnitude variation depending on angle Ls [radians].
Source: A. Mallama: The magnitude and albedo of Mars. Icarus 192(2007) 404-416.
|
static |
Update the planet corrections.
planet=3(Moon), 4 (Mars), 5(Jupiter), 6(Saturn), 7(Uranus), 8(Neptune). The values are immediately converted to radians.