Add nautical mile to the distance units

This commit is contained in:
Alexander Bock
2025-02-26 13:35:26 +01:00
parent fed3245a79
commit d861c321ba
2 changed files with 16 additions and 7 deletions

View File

@@ -42,6 +42,7 @@ namespace openspace::distanceconstants {
constexpr double Yard = 0.9144;
constexpr double Chain = 20.1168;
constexpr double Mile = 1609.344;
constexpr double NauticalMile = 1852.0;
} // openspace::distanceconstants
#endif // __OPENSPACE_CORE___DISTANCECONSTANTS___H__

View File

@@ -63,7 +63,8 @@ enum class DistanceUnit {
Chain,
Furlong,
Mile,
League
League,
NauticalMile
};
struct DistanceUnitName {
@@ -72,7 +73,7 @@ struct DistanceUnitName {
std::string_view abbreviation;
};
constexpr std::array<DistanceUnit, static_cast<int>(DistanceUnit::League) + 1>
constexpr std::array<DistanceUnit, static_cast<int>(DistanceUnit::NauticalMile) + 1>
DistanceUnits = {
DistanceUnit::Nanometer, DistanceUnit::Micrometer, DistanceUnit::Millimeter,
DistanceUnit::Centimeter, DistanceUnit::Decimeter, DistanceUnit::Meter,
@@ -81,12 +82,13 @@ DistanceUnits = {
DistanceUnit::Parsec, DistanceUnit::Kiloparsec, DistanceUnit::Megaparsec,
DistanceUnit::Gigaparsec, DistanceUnit::Gigalightyear, DistanceUnit::Thou,
DistanceUnit::Inch, DistanceUnit::Foot, DistanceUnit::Yard, DistanceUnit::Chain,
DistanceUnit::Furlong, DistanceUnit::Mile, DistanceUnit::League
DistanceUnit::Furlong, DistanceUnit::Mile, DistanceUnit::League,
DistanceUnit::NauticalMile
};
// Note that the syntax here is required when initializing constexpr std::arrays with structs
constexpr std::array<DistanceUnitName, static_cast<int>(DistanceUnit::League) + 1>
DistanceUnitNames {{
constexpr std::array<DistanceUnitName, static_cast<int>(DistanceUnit::NauticalMile) + 1>
DistanceUnitNames{ {
{ "Nanometer", "Nanometers", "nm" },
{ "Micrometer", "Micrometers", "um" },
{ "Millimeter", "Millimeters", "mm" },
@@ -111,7 +113,8 @@ DistanceUnitNames {{
{ "Chain", "Chains", "ch" },
{ "Furlong", "Furlongs", "fur" },
{ "Mile", "Miles", "mi" },
{ "League", "Leagues", "league"}
{ "League", "Leagues", "league" },
{ "Nautical Mile", "Nautical Miles", "nm" }
}};
constexpr bool isValidDistanceUnitName(std::string_view name) {
@@ -126,7 +129,8 @@ constexpr bool isValidDistanceUnitName(std::string_view name) {
return false;
}
constexpr std::string_view nameForDistanceUnit(DistanceUnit unit, bool usePluralForm = false)
constexpr std::string_view nameForDistanceUnit(DistanceUnit unit,
bool usePluralForm = false)
{
const DistanceUnitName unitName = DistanceUnitNames[static_cast<int>(unit)];
return usePluralForm ? unitName.plural : unitName.singular;
@@ -219,6 +223,8 @@ constexpr double convertMeters(double meters, DistanceUnit requestedUnit) {
return meters / distanceconstants::Mile;
case DistanceUnit::League:
return meters / (3.0 * distanceconstants::Mile);
case DistanceUnit::NauticalMile:
return meters / distanceconstants::NauticalMile;
default:
throw ghoul::MissingCaseException();
}
@@ -276,6 +282,8 @@ constexpr double toMeter(DistanceUnit unit) {
return distanceconstants::Mile;
case DistanceUnit::League:
return 3.0 * distanceconstants::Mile;
case DistanceUnit::NauticalMile:
return distanceconstants::NauticalMile;
default:
throw ghoul::MissingCaseException();
}