Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Show Earth's mass and show all semi-axes for non spherical bodies #2193

Merged
merged 10 commits into from
Jun 15, 2024
27 changes: 21 additions & 6 deletions src/celestia/hud.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -184,10 +184,10 @@ displayMass(const util::NumberFormatter& formatter, Overlay& overlay, float mass
if (mass < 0.001f)
{
if (measurement == MeasurementSystem::Imperial)
overlay.print(_("Mass: {} lb\n"),
overlay.print(_("Mass: {%.4g} lb\n"),
ajtribick marked this conversation as resolved.
Show resolved Hide resolved
formatter.format(mass * astro::EarthMass / static_cast<float>(OneLbInKg), 4, SigDigitNum));
else
overlay.print(_("Mass: {} kg\n"),
overlay.print(_("Mass: {%.4g} kg\n"),
ajtribick marked this conversation as resolved.
Show resolved Hide resolved
formatter.format(mass * astro::EarthMass, 4, SigDigitNum));
}
else if (mass > 50.0f)
Expand Down Expand Up @@ -533,13 +533,28 @@ displayPlanetInfo(const util::NumberFormatter& formatter,
overlay.printf(_("Distance: %s\n"),
DistanceKmToStr(formatter, distance, 5, hudSettings.measurementSystem));

Eigen::Vector3f semiAxes = body.getSemiAxes();
375gnu marked this conversation as resolved.
Show resolved Hide resolved
if (body.getClassification() == BodyClassification::Invisible)
{
return;
}

overlay.printf(_("Radius: %s\n"),
DistanceKmToStr(formatter, body.getRadius(), 5, hudSettings.measurementSystem));
else if (body.isEllipsoid() && !body.isSphere()) // show mean radius along with triaxial semi-axes
{
double radiusMean = cbrt(semiAxes.prod());
375gnu marked this conversation as resolved.
Show resolved Hide resolved
double axis0 = semiAxes.x();
double axis1 = semiAxes.z();
double axis2 = semiAxes.y(); // polar semi-axis
overlay.print(_("Radius: {} ({} " UTF8_MULTIPLICATION_SIGN " {} " UTF8_MULTIPLICATION_SIGN " {})\n"),
DistanceKmToStr(formatter, radiusMean, 5, hudSettings.measurementSystem),
DistanceKmToStr(formatter, axis0, 5, hudSettings.measurementSystem),
DistanceKmToStr(formatter, axis1, 5, hudSettings.measurementSystem),
DistanceKmToStr(formatter, axis2, 5, hudSettings.measurementSystem));
}
else
{
overlay.print(_("Radius: {}\n"),
DistanceKmToStr(formatter, body.getRadius(), 5, hudSettings.measurementSystem));
}

displayApparentDiameter(overlay, body.getRadius(), distanceKm, loc);

Expand Down Expand Up @@ -593,7 +608,7 @@ displayPlanetInfo(const util::NumberFormatter& formatter,
if (body.getRotationModel(t)->isPeriodic())
displayRotationPeriod(formatter, overlay, body.getRotationModel(t)->getPeriod());

if (body.getName() != "Earth" && body.getMass() > 0)
if (body.getMass() > 0)
displayMass(formatter, overlay, body.getMass(), hudSettings.measurementSystem);

if (float density = body.getDensity(); density > 0)
Expand Down
Loading