mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-01 13:36:48 +08:00
Ref T111, lat/lng/angle changes
* get struct CAngle::DegMinSecFractionalSec to obtain parts * round to epsilon utility functions and fix (qint64)
This commit is contained in:
committed by
Mathew Sutcliffe
parent
77546a46b1
commit
e55480737e
@@ -14,10 +14,60 @@
|
||||
|
||||
#include <cmath>
|
||||
|
||||
using namespace BlackMisc::Math;
|
||||
|
||||
namespace BlackMisc
|
||||
{
|
||||
namespace PhysicalQuantities
|
||||
{
|
||||
CAngle::CAngle(int degrees, int minutes, double seconds) :
|
||||
CPhysicalQuantity(
|
||||
degrees + minutes / 100.0 + seconds / 10000.0,
|
||||
CAngleUnit::sexagesimalDeg())
|
||||
{
|
||||
Q_ASSERT_X((degrees >= 0 && minutes >= 0 && seconds >= 0) ||
|
||||
(degrees <= 0 && minutes <= 0 && seconds <= 0), Q_FUNC_INFO, "Same sign required");
|
||||
}
|
||||
|
||||
CAngle::CAngle(int degrees, double minutes) :
|
||||
CPhysicalQuantity(
|
||||
degrees + minutes / 100.0,
|
||||
CAngleUnit::sexagesimalDeg())
|
||||
{
|
||||
Q_ASSERT_X((degrees >= 0 && minutes >= 0) || (degrees <= 0 && minutes <= 0),
|
||||
Q_FUNC_INFO, "Same sign required");
|
||||
}
|
||||
|
||||
void CAngle::unifySign(int °rees, int &minutes, double &seconds)
|
||||
{
|
||||
if (degrees < 0)
|
||||
{
|
||||
if (minutes > 0) minutes *= -1;
|
||||
if (seconds > 0) seconds *= -1.0;
|
||||
}
|
||||
else if (degrees > 0)
|
||||
{
|
||||
if (minutes < 0) minutes *= -1;
|
||||
if (seconds < 0) seconds *= -1.0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// degrees was 0
|
||||
if ((minutes > 0 && seconds < 0) || (minutes < 0 && seconds > 0))
|
||||
{
|
||||
seconds *= -1.0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void CAngle::unifySign(int °rees, int &minutes)
|
||||
{
|
||||
if ((degrees > 0 && minutes < 0) || (degrees < 0 && minutes > 0))
|
||||
{
|
||||
minutes *= -1.0;
|
||||
}
|
||||
}
|
||||
|
||||
BlackMisc::CIcon CAngle::toIcon() const
|
||||
{
|
||||
BlackMisc::CIcon i = CIcon::iconByIndex(CIcons::StandardIconArrowMediumNorth16);
|
||||
@@ -25,6 +75,37 @@ namespace BlackMisc
|
||||
return i;
|
||||
}
|
||||
|
||||
CAngle::DegMinSecFractionalSec CAngle::asSexagesimalDegMinSec(bool range180Degrees) const
|
||||
{
|
||||
double v = this->value(CAngleUnit::deg());
|
||||
v = CAngleUnit::deg().roundToEpsilon(v);
|
||||
|
||||
// range -179-180 ?
|
||||
if (range180Degrees)
|
||||
{
|
||||
v = std::fmod(v + 180.0, 360.0);
|
||||
v += (v < 0) ? 180.0 : -180.0;
|
||||
}
|
||||
|
||||
DegMinSecFractionalSec values;
|
||||
if (v < 0)
|
||||
{
|
||||
values.sign = -1;
|
||||
v *= -1.0;
|
||||
}
|
||||
|
||||
values.deg = v;
|
||||
v -= values.deg;
|
||||
v = v * 100.0 * 0.6;
|
||||
values.min = v;
|
||||
v -= values.min;
|
||||
v = v * 100.0 * 0.6;
|
||||
values.sec = v;
|
||||
v -= values.sec;
|
||||
values.fractionalSec = CMathUtils::round(v, 6);
|
||||
return values;
|
||||
}
|
||||
|
||||
double CAngle::piFactor() const
|
||||
{
|
||||
return BlackMisc::Math::CMathUtils::round(this->value(CAngleUnit::rad()) / BlackMisc::Math::CMathUtils::PI() , 6);
|
||||
@@ -49,5 +130,5 @@ namespace BlackMisc
|
||||
{
|
||||
return std::tan(this->value(CAngleUnit::rad()));
|
||||
}
|
||||
}
|
||||
}
|
||||
} // ns
|
||||
} // ns
|
||||
|
||||
Reference in New Issue
Block a user