mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-01-06 11:39:49 -06:00
Add nautical mile to the distance units
This commit is contained in:
@@ -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__
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user