From 80b5daa929e9ef55d7b41e5df4f8c8659acdad09 Mon Sep 17 00:00:00 2001 From: Jon Beniston Date: Tue, 7 Apr 2026 18:21:28 +0100 Subject: [PATCH] Plot orbits of planets. --- plugins/feature/startracker/readme.md | 58 +++---- plugins/feature/startracker/spice.cpp | 146 +++++++++++++----- plugins/feature/startracker/spice.h | 5 +- .../feature/startracker/startrackergui.cpp | 56 +++++-- plugins/feature/startracker/startrackergui.h | 4 +- .../feature/startracker/startrackerreport.h | 11 +- .../startracker/startrackersettings.cpp | 1 + .../feature/startracker/startrackerworker.cpp | 26 +++- 8 files changed, 207 insertions(+), 100 deletions(-) diff --git a/plugins/feature/startracker/readme.md b/plugins/feature/startracker/readme.md index d975f6727..f5e10117a 100644 --- a/plugins/feature/startracker/readme.md +++ b/plugins/feature/startracker/readme.md @@ -266,7 +266,7 @@ To start a new animation, press ![clear animation](../../../doc/img/StarTracker_

Solar System Map

-The Solar System Map shows the positions of the bodies selected in the Settings Dialog (5). Positions can be plotted on either a linear or logarithmic scale. The positions are displayed top down on the equatorial plane. +The Solar System Map shows the positions of the bodies selected in the Settings Dialog (5). Positions can be plotted on either a linear or logarithmic scale. The positions are displayed top down on the ecliptic plane. The map will be centered at the body selected in the combo box. Select '-' to be able to pan the map with the mouse. ![Solar System Map](../../../doc/img/StarTracker_solarsystem.png) @@ -335,38 +335,30 @@ Then select the SDRangel telescope reticle and press Ocular view.

Attribution

-Solar radio flux measurement at 10.7cm/2800MHz is from National Research Council Canada and Natural Resources Canada: https://www.spaceweather.gc.ca/forecast-prevision/solar-solaire/solarflux/sx-4-en.php - -Solar radio flux measurements at 245, 410, 610, 1415, 2695, 4995, 8800 and 15400MHz from the Learmonth Observatory: http://www.sws.bom.gov.au/World_Data_Centre/1/10 - -150MHz (Landecker and Wielebinski) and 1420MHz (Stockert and Villa-Elisa) All Sky images from MPIfR's (Max-Planck-Institut Fur Radioastronomie) Survey Sampler: https://www3.mpifr-bonn.mpg.de/survey.html - -408MHz (Haslam) destriped (Platania) All Sky image and spectral index (Platania) from Strasbourg astronomical Data Center: http://cdsarc.u-strasbg.fr/viz-bin/cat/J/A+A/410/847 - -Milky Way image from NASA/JPL-Caltech: https://photojournal.jpl.nasa.gov/catalog/PIA10748 - -Icons are by Adnen Kadri, iconsphere and Erik Madsen, from the Noun Project Noun Project: https://thenounproject.com/ - -Icons are by Freepik from Flaticon https://www.flaticon.com/ - -Io & Ganymede Phase vs CML plots from Jupiter radio emission induced by Ganymede and consequences for the radio detection of exoplanets, Zarka et all, 2018: https://www.aanda.org/articles/aa/full_html/2018/10/aa33586-18/aa33586-18.html - -Sun image from Solar Dynamics Observatory, NASA -Mercury image from Messenger, NASA/Johns Hopkins University Applied Physics Laboratory/Carnegie Institution of Washington. -Venus image by NASA/JPL-Caltech -Blue Marble by crew of Apollo 17. -Moon image by NASA. -Mars image Viking Orbiter, NASA/JPL-Caltech -Phobos image by NASA/JPL-Caltech/University of Arizona -Deimos image by NASA/JPL-Caltech/University of Arizona -Jupiter enhanced image by Kevin M. Gill (CC-BY) based on images provided courtesy of NASA/JPL-Caltech/SwRI/MSSS -Io from Galileo by NASA/JPL/USGS -Ganymede from Juno by NASA/JPL-Caltech/SwRI/MSSS/Kevin M. Gill -Calisto NASA/JPL/DLR -Saturn from Cassini, NASA/ESA -Uranus from Voyager 2, NASA/JPL-Caltech -Neptune from Voyager 2, NASA/JPL-Caltech -Pluto image from New Horizons, NASA/JHUAPL/SwRI +* Solar radio flux measurement at 10.7cm/2800MHz is from National Research Council Canada and Natural Resources Canada: https://www.spaceweather.gc.ca/forecast-prevision/solar-solaire/solarflux/sx-4-en.php +* Solar radio flux measurements at 245, 410, 610, 1415, 2695, 4995, 8800 and 15400MHz from the Learmonth Observatory: http://www.sws.bom.gov.au/World_Data_Centre/1/10 +* 150MHz (Landecker and Wielebinski) and 1420MHz (Stockert and Villa-Elisa) All Sky images from MPIfR's (Max-Planck-Institut Fur Radioastronomie) Survey Sampler: https://www3.mpifr-bonn.mpg.de/survey.html +* 408MHz (Haslam) destriped (Platania) All Sky image and spectral index (Platania) from Strasbourg astronomical Data Center: http://cdsarc.u-strasbg.fr/viz-bin/cat/J/A+A/410/847 +* Milky Way image from NASA/JPL-Caltech: https://photojournal.jpl.nasa.gov/catalog/PIA10748 +* Icons are by Adnen Kadri, iconsphere and Erik Madsen, from the Noun Project Noun Project: https://thenounproject.com/ +* Icons are by Freepik from Flaticon https://www.flaticon.com/ +* Io & Ganymede Phase vs CML plots from Jupiter radio emission induced by Ganymede and consequences for the radio detection of exoplanets, Zarka et all, 2018: https://www.aanda.org/articles/aa/full_html/2018/10/aa33586-18/aa33586-18.html +* Sun image from Solar Dynamics Observatory, NASA +* Mercury image from Messenger, NASA/Johns Hopkins University Applied Physics Laboratory/Carnegie Institution of Washington. +* Venus image by NASA/JPL-Caltech +* Blue Marble by crew of Apollo 17. +* Moon image by NASA. +* Mars image Viking Orbiter, NASA/JPL-Caltech +* Phobos image by NASA/JPL-Caltech/University of Arizona +* Deimos image by NASA/JPL-Caltech/University of Arizona +* Jupiter enhanced image by Kevin M. Gill (CC-BY) based on images provided courtesy of NASA/JPL-Caltech/SwRI/MSSS +* Io from Galileo by NASA/JPL/USGS +* Ganymede from Juno by NASA/JPL-Caltech/SwRI/MSSS/Kevin M. Gill +* Calisto NASA/JPL/DLR +* Saturn from Cassini, NASA/ESA +* Uranus from Voyager 2, NASA/JPL-Caltech +* Neptune from Voyager 2, NASA/JPL-Caltech +* Pluto image from New Horizons, NASA/JHUAPL/SwRI

API

diff --git a/plugins/feature/startracker/spice.cpp b/plugins/feature/startracker/spice.cpp index e577fbfab..b384cd2ba 100644 --- a/plugins/feature/startracker/spice.cpp +++ b/plugins/feature/startracker/spice.cpp @@ -1,4 +1,4 @@ -/////////////////////////////////////////////////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2026 Jon Beniston, M7RCE // // // // This program is free software; you can redistribute it and/or modify // @@ -93,16 +93,6 @@ static SpiceDouble normalize360(SpiceDouble deg) return d; } -// Normalize angle to (-180, +180] -static SpiceDouble normalize180(SpiceDouble deg) -{ - SpiceDouble d = fmod(deg + 180.0, 360.0); - if (d < 0.0) { - d += 360.0; - } - return d - 180.0; -} - // Compute topocentric observer position in J2000 at ET static bool computeTopocenterJ2000(SpiceDouble latDeg, SpiceDouble lonDeg, SpiceDouble altKm, SpiceDouble et, SpiceDouble obsJ2000[3]) { @@ -214,32 +204,6 @@ QStringList getSPICETargets(const QString& file) return targets; } -// Get position of named body relative to Solar System Barycentre. No abberation correction -bool getSSBPositionFromSPICE(const QString& name, double et, QVector3D &positionKm) -{ - SpiceDouble posJ2000[3]; - SpiceDouble lightTime; - const QByteArray nameBA = name.toLatin1(); - const char *nameStr = nameBA.constData(); - - // Get position of named body, relative to SSB. - spkpos_c(nameStr, et, "J2000", "NONE", "SOLAR SYSTEM BARYCENTER", posJ2000, &lightTime); - if (!failed_c()) - { - positionKm.setX(posJ2000[0]); - positionKm.setY(posJ2000[1]); - positionKm.setZ(posJ2000[2]); - - return true; - } - else - { - qDebug() << "StarTrackerWorker::calculateSolarSystemPositions: Failed to get position for" << name; - reset_c(); - return false; - } -} - // Calculate azimuth and elevation of a target body from a position on Earth using SPICE bool getAzElFromSPICE(const QString& target, double et, double latitude, double longitude, double altitudeKm, double &azimuth, double &elevation) { @@ -314,7 +278,7 @@ bool getRADecFromSPICE(const QString& target, double et, double &ra, double &dec } // Calculate Jupiter's CML (Central Meridian Longitude) as seen from a location on Earth and the phase of the given Jovian moon (IO or GANYMEDE) -bool calculateJupiterMoonPhase(const QString& moon, double et, double latitude, double longitude, double altitudeMetres, double &cml, double &phase) +bool spiceJupiterMoonPhase(const QString& moon, double et, double latitude, double longitude, double altitudeMetres, double &cml, double &phase) { const QByteArray moonBA = moon.toUpper().toLatin1(); const char *moonName = moonBA.data(); @@ -428,3 +392,109 @@ bool calculateJupiterMoonPhase(const QString& moon, double et, double latitude, return true; } + +// Get position of named body relative to Sun, in ECLIPJ2000 reference frame. No abberation correction. +bool spicePosition(const QString& name, double et, QVector3D &positionKm) +{ + SpiceDouble pos[3]; + SpiceDouble lightTime; + const QByteArray nameBA = name.toLatin1(); + const char *nameStr = nameBA.constData(); + + // Get position of named body + spkpos_c(nameStr, et, "ECLIPJ2000", "NONE", "SUN", pos, &lightTime); + if (!failed_c()) + { + positionKm.setX(pos[0]); + positionKm.setY(pos[1]); + positionKm.setZ(pos[2]); + + return true; + } + else + { + qDebug() << "spicePosition: Failed to get position for" << name; + reset_c(); + return false; + } +} + +// Convert orbital elements to perifocal (PQW) coordinate system +static void orbitalElementsToPerifocal(SpiceDouble omega, SpiceDouble inc, SpiceDouble argp, + SpiceDouble p[3], SpiceDouble q[3]) +{ + SpiceDouble cO = cos(omega); + SpiceDouble sO = sin(omega); + SpiceDouble ci = cos(inc); + SpiceDouble si = sin(inc); + SpiceDouble cw = cos(argp); + SpiceDouble sw = sin(argp); + + // Phat (toward periapsis) + p[0] = cO * cw - sO * sw * ci; + p[1] = sO * cw + cO * sw * ci; + p[2] = sw * si; + + // Qhat (90 deg ahead in orbit plane) + q[0] = -cO * sw - sO * cw * ci; + q[1] = -sO * sw + cO * cw * ci; + q[2] = cw * si; +} + +// Get orbital path around the Sun, in XY plane of ECLIPJ2000 reference frame. +bool spiceOrbit(const QString& name, double et, QList &orbit) +{ + const QByteArray nameBA = name.toUpper().toLatin1(); + const char *target = nameBA.data(); + + // Sun relative state, expressed in ECLIPJ2000 + SpiceDouble state[6], lt; + spkezr_c(target, et, "ECLIPJ2000", "NONE", "SUN", state, <); + + // Sun GM (gravitational parameter = G * M) + SpiceInt dim; + SpiceDouble mu; + bodvrd_c("SUN", "GM", 1, &dim, &mu); + + // Osculating conic elements + SpiceDouble elts[8]; + oscelt_c(state, et, mu, elts); + + SpiceDouble rp = elts[0]; // perifocal distance (km) + SpiceDouble e = elts[1]; // eccentricity + SpiceDouble inc = elts[2]; // inclination (rad) + SpiceDouble omega = elts[3]; // longitude of ascending node (rad) + SpiceDouble argp = elts[4]; // argument of periapsis (rad) + + if (e >= 1.0) + { + qDebug() << "spiceOrbit: Not an ellipse" << name; + return false; + } + + SpiceDouble a = rp / (1.0 - e); // semi-major axis in orbital plane + SpiceDouble b = a * sqrt(1.0 - e * e); // semi-minor axis in orbital plane + + SpiceDouble pHat[3], qHat[3]; + orbitalElementsToPerifocal(omega, inc, argp, pHat, qHat); + + const int N = 1000; // Could vary this with zoom level. 1k good enough when zoomed to orbit of the Moon around Earth + for (int k = 0; k <= N; k++) + { + const double E = 2.0 * M_PI * (double) k / (double) N; + + // Ellipse in PQW with Sun at focus + double xp = a * (cos(E) - e); + double yp = b * sin(E); + + // Rotate into ECLIPJ2000 + double x = xp * pHat[0] + yp * qHat[0]; + double y = xp * pHat[1] + yp * qHat[1]; + + QPointF point = {x, y}; + + orbit.append(point); + } + + return true; +} diff --git a/plugins/feature/startracker/spice.h b/plugins/feature/startracker/spice.h index 80031f890..b5578cb6d 100644 --- a/plugins/feature/startracker/spice.h +++ b/plugins/feature/startracker/spice.h @@ -28,9 +28,10 @@ void spiceUnlock(); bool dateTimeToET(const QDateTime& dateTime, double &et); QStringList getSPICETargets(const QString& file); -bool getSSBPositionFromSPICE(const QString& name, double et, QVector3D &position); bool getAzElFromSPICE(const QString& target, double et, double latitude, double longitude, double altitudeKm, double &azimuth, double &elevation); bool getRADecFromSPICE(const QString& target, double et, double &ra, double &dec); -bool calculateJupiterMoonPhase(const QString& moon, double et, double latitude, double longitude, double altitudeMetres, double& cml, double &phase); +bool spiceJupiterMoonPhase(const QString& moon, double et, double latitude, double longitude, double altitudeMetres, double& cml, double &phase); +bool spicePosition(const QString& name, double et, QVector3D &position); +bool spiceOrbit(const QString& name, double et, QList &orbit); #endif // STARTRACKER_SPICE_H diff --git a/plugins/feature/startracker/startrackergui.cpp b/plugins/feature/startracker/startrackergui.cpp index 9e71b7089..6339e7361 100644 --- a/plugins/feature/startracker/startrackergui.cpp +++ b/plugins/feature/startracker/startrackergui.cpp @@ -172,7 +172,7 @@ bool StarTrackerGUI::handleMessage(const Message& message) else if (StarTrackerReport::MsgReportSolarSystemPositions::match(message)) { StarTrackerReport::MsgReportSolarSystemPositions& report = (StarTrackerReport::MsgReportSolarSystemPositions&) message; - updateSolarSystemPositions(report.getNames(), report.getPositions()); + updateSolarSystemPositions(report.getNames(), report.getPositions(), report.getOrbit()); return true; } else if (StarTrackerReport::MsgReportJupiter::match(message)) @@ -1702,23 +1702,13 @@ static void logScale(QVector3D &p) p.setZ(r * std::cos(el)); } - - -QRectF getVisibleRect( QGraphicsView * view ) -{ - QPointF A = view->mapToScene( QPoint(0, 0) ); - QPointF B = view->mapToScene( QPoint( - view->viewport()->width(), - view->viewport()->height() )); - return QRectF( A, B ); -} - - -void StarTrackerGUI::updateSolarSystemPositions(const QStringList &names, const QList &positions) +void StarTrackerGUI::updateSolarSystemPositions(const QStringList &names, const QList &positions, const QList> &orbits) { const double kmToAU = 6.68459e-9; // Convert position from kM to AU const double pixelScale = 20.0; // Mercury is 0.4AU. Neptune is 30 AU bool scale = false; + QPen orbitPen(Qt::gray); + orbitPen.setWidth(0); for (int i = 0; i < names.size(); i++) { @@ -1738,9 +1728,18 @@ void StarTrackerGUI::updateSolarSystemPositions(const QStringList &names, const QBrush brush(QColor(200, 200, 200)); item = new SolarSystemItem(); item->m_textItem = m_solarSystemScene->addText(name, m_solarSystemLabelFont); + item->m_textItem->setZValue(2); item->m_scale = getScale(name.toLower()); item->m_pixmapItem = m_solarSystemScene->addPixmap(*pixmap); item->m_pixmapItem->setOffset(-pixmap->width() / 2, -pixmap->height() / 2); + item->m_pixmapItem->setZValue(1); + + if (orbits[i].size() > 0) { + item->m_orbitItem = m_solarSystemScene->addPolygon(QPolygonF(), orbitPen); + } else { + item->m_orbitItem = nullptr; + } + m_solarSystemItems.insert(names[i], item); scale = true; } @@ -1753,6 +1752,33 @@ void StarTrackerGUI::updateSolarSystemPositions(const QStringList &names, const scaledPos = pixelScale * kmToAU * scaledPos; } + // Draw an ellipse for planet's orbit + if (item->m_orbitItem) + { + QPolygonF polygon; + + for (int j = 0; j < orbits[i].size(); j++) + { + QPointF point = orbits[i][j]; + + if (m_settings.m_logScale) + { + QVector3D v = {(float) point.x(), (float) point.y(), 0.0f}; + logScale(v); + point.setX(v.x()); + point.setY(v.y()); + } + else + { + point = pixelScale * kmToAU * point; + } + + polygon << point; + } + + item->m_orbitItem->setPolygon(polygon); + } + // Position label to right const int textYOffset = m_solarSystemLabelFontMetrics.height(); item->m_pixmapItem->setPos(scaledPos.x(), scaledPos.y()); @@ -1774,6 +1800,7 @@ void StarTrackerGUI::updateSolarSystemPositions(const QStringList &names, const SolarSystemItem* item = itr.value(); m_solarSystemScene->removeItem(item->m_pixmapItem); m_solarSystemScene->removeItem(item->m_textItem); + m_solarSystemScene->removeItem(item->m_orbitItem); delete item; itr.remove(); } @@ -1868,7 +1895,6 @@ void StarTrackerGUI::centerOnSolarSystemBody() if (m_solarSystemItems.contains(selectedBody)) { SolarSystemItem *item = m_solarSystemItems.value(selectedBody); - //qDebug() << "scene rect" << m_solarSystemScene->sceneRect() << "view scene rect" << ui->image->sceneRect() << "visible rect" << getVisibleRect(ui->image) << "centre on" << selectedBody << item->m_pixmapItem->pos(); ui->image->centerOn(item->m_pixmapItem); ui->image->setDragMode(QGraphicsView::NoDrag); } diff --git a/plugins/feature/startracker/startrackergui.h b/plugins/feature/startracker/startrackergui.h index 260f97e02..0a1bb3d92 100644 --- a/plugins/feature/startracker/startrackergui.h +++ b/plugins/feature/startracker/startrackergui.h @@ -144,6 +144,7 @@ private: QGraphicsPixmapItem *m_pixmapItem; QGraphicsTextItem *m_textItem; float m_scale; + QGraphicsPolygonItem *m_orbitItem; }; QFont m_solarSystemLabelFont; QFontMetrics m_solarSystemLabelFontMetrics; @@ -202,7 +203,8 @@ private: void plotJupiter(); void updateJupiterMoonPosition(double cml, double ioPhase, double ganymedePhase); void updateJupiterMoonPositions(const StarTrackerReport::MsgReportJupiterData& report); - void updateSolarSystemPositions(const QStringList &names, const QList &positions); + void updateSolarSystemPositions(const QStringList &names, const QList &positions, + const QList> &orbit); void scaleSolarSystemItems(); void createSolarSystemScene(); QPixmap *getPlanetPixmap(const QString& name); diff --git a/plugins/feature/startracker/startrackerreport.h b/plugins/feature/startracker/startrackerreport.h index 84726ea31..38b842347 100644 --- a/plugins/feature/startracker/startrackerreport.h +++ b/plugins/feature/startracker/startrackerreport.h @@ -145,22 +145,25 @@ public: QDateTime getDateTime() const { return m_dateTime; } const QStringList &getNames() const { return m_names; } const QList &getPositions() const { return m_positions; } + const QList> &getOrbit() const { return m_orbit; } - static MsgReportSolarSystemPositions* create(const QDateTime& dateTime, const QStringList &names, const QList &positions) + static MsgReportSolarSystemPositions* create(const QDateTime& dateTime, const QStringList &names, const QList &positions, QList> &orbit) { - return new MsgReportSolarSystemPositions(dateTime, names, positions); + return new MsgReportSolarSystemPositions(dateTime, names, positions, orbit); } private: QDateTime m_dateTime; QStringList m_names; QList m_positions; + QList> m_orbit; - MsgReportSolarSystemPositions(const QDateTime& dateTime, const QStringList &names, const QList &positions) : + MsgReportSolarSystemPositions(const QDateTime& dateTime, const QStringList &names, const QList &positions, const QList> &orbit) : Message(), m_dateTime(dateTime), m_names(names), - m_positions(positions) + m_positions(positions), + m_orbit(orbit) { } diff --git a/plugins/feature/startracker/startrackersettings.cpp b/plugins/feature/startracker/startrackersettings.cpp index d7f14a835..1680ac098 100644 --- a/plugins/feature/startracker/startrackersettings.cpp +++ b/plugins/feature/startracker/startrackersettings.cpp @@ -27,6 +27,7 @@ const QStringList StarTrackerSettings::m_defaultSpiceEphemerides = { "https://naif.jpl.nasa.gov/pub/naif/generic_kernels/lsk/naif0012.tls", "https://naif.jpl.nasa.gov/pub/naif/generic_kernels/pck/pck00011.tpc", + "https://naif.jpl.nasa.gov/pub/naif/generic_kernels/pck/gm_de440.tpc", "https://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/planets/de440.bsp", "https://naif.jpl.nasa.gov/pub/naif/generic_kernels/spk/satellites/jup365.bsp", }; diff --git a/plugins/feature/startracker/startrackerworker.cpp b/plugins/feature/startracker/startrackerworker.cpp index f2f3646bf..89c26f7c0 100644 --- a/plugins/feature/startracker/startrackerworker.cpp +++ b/plugins/feature/startracker/startrackerworker.cpp @@ -1062,6 +1062,12 @@ void StarTrackerWorker::calculateSolarSystemPositions(const QDateTime& dateTime) { QStringList bodyNames; QList bodyPositions; + QList> orbits; + + static const QStringList planets = { + "MERCURY", "VENUS", "EARTH", "MARS", "JUPITER", "SATURN", "URANUS", "NEPTUNE", + "MERCURY BARYCENTER", "VENUS BARYCENTER", "EARTH BARYCENTER", "MARS BARYCENTER", "JUPITER BARYCENTER", "SATURN BARYCENTER", "URANUS BARYCENTER", "NEPTUNE BARYCENTER" + }; double et; if (!dateTimeToET(dateTime, et)) { @@ -1072,17 +1078,23 @@ void StarTrackerWorker::calculateSolarSystemPositions(const QDateTime& dateTime) { QVector3D positionKm; - if (getSSBPositionFromSPICE(body, et, positionKm)) + if (spicePosition(body, et, positionKm)) { QVector3D position(positionKm[0], positionKm[1], positionKm[2]); bodyNames.append(body); bodyPositions.append(position); + + QList orbit; + if (planets.contains(body)) { + spiceOrbit(body, et, orbit); + } + orbits.append(orbit); } } if (getMessageQueueToGUI()) { - getMessageQueueToGUI()->push(StarTrackerReport::MsgReportSolarSystemPositions::create(dateTime, bodyNames, bodyPositions)); + getMessageQueueToGUI()->push(StarTrackerReport::MsgReportSolarSystemPositions::create(dateTime, bodyNames, bodyPositions, orbits)); } } @@ -1111,9 +1123,9 @@ void StarTrackerWorker::calculateJupiterParameters(const QDateTime& dateTime) if (getAzElFromSPICE("JUPITER", et, m_settings.m_latitude, m_settings.m_longitude, 0.0, az, el)) { // Calculate Jupiter CML and phase of Moons - if (calculateJupiterMoonPhase("IO", et, m_settings.m_latitude, m_settings.m_longitude, 0.0, cml, ioPhase)) + if (spiceJupiterMoonPhase("IO", et, m_settings.m_latitude, m_settings.m_longitude, 0.0, cml, ioPhase)) { - if (calculateJupiterMoonPhase("GANYMEDE", et, m_settings.m_latitude, m_settings.m_longitude, 0.0, cml, ganymedePhase)) + if (spiceJupiterMoonPhase("GANYMEDE", et, m_settings.m_latitude, m_settings.m_longitude, 0.0, cml, ganymedePhase)) { if (getMessageQueueToGUI()) { getMessageQueueToGUI()->push(StarTrackerReport::MsgReportJupiter::create(dateTime, az, el, cml, ioPhase, ganymedePhase)); @@ -1138,7 +1150,7 @@ void StarTrackerWorker::calculateJupiterParameters(const QDateTime& dateTime) { if (el > 0.0) { - if (calculateJupiterMoonPhase(moon, et, m_settings.m_latitude, m_settings.m_longitude, 0.0, cml, moonPhase)) + if (spiceJupiterMoonPhase(moon, et, m_settings.m_latitude, m_settings.m_longitude, 0.0, cml, moonPhase)) { StarTrackerReport::JupiterData jd = {dt, az, el}; StarTrackerReport::JupiterMoonData md = {cml, moonPhase}; @@ -1169,7 +1181,7 @@ void StarTrackerWorker::calculateJupiterParameters(const QDateTime& dateTime) { if (el > 0.0) { - if (calculateJupiterMoonPhase(moon, et, m_settings.m_latitude, m_settings.m_longitude, 0.0, cml, moonPhase)) + if (spiceJupiterMoonPhase(moon, et, m_settings.m_latitude, m_settings.m_longitude, 0.0, cml, moonPhase)) { StarTrackerReport::JupiterData jd = {dt, az, el}; StarTrackerReport::JupiterMoonData id = {cml, moonPhase}; @@ -1216,7 +1228,7 @@ void StarTrackerWorker::calculateJupiterParameters(const QDateTime& dateTime) { if (el > 0.0) { - if (calculateJupiterMoonPhase(moon, et, m_settings.m_latitude, m_settings.m_longitude, 0.0, cml, moonPhase)) + if (spiceJupiterMoonPhase(moon, et, m_settings.m_latitude, m_settings.m_longitude, 0.0, cml, moonPhase)) { StarTrackerReport::JupiterData jd = {dt, az, el}; StarTrackerReport::JupiterMoonData id = {cml, moonPhase};