diff --git a/src/blackmisc/pq/angle.cpp b/src/blackmisc/pq/angle.cpp index d16273dd7..a8480f196 100644 --- a/src/blackmisc/pq/angle.cpp +++ b/src/blackmisc/pq/angle.cpp @@ -117,6 +117,14 @@ namespace BlackMisc this->switchUnit(u); } + void CAngle::normalizeTo360Degrees() + { + const double v = normalizeDegrees360(this->value(CAngleUnit::deg())); + const CAngleUnit u = this->getUnit(); + *this = CAngle(v, CAngleUnit::deg()); + this->switchUnit(u); + } + CAngle CAngle::normalizedToPlusMinus180Degrees() const { CAngle copy(*this); @@ -124,6 +132,13 @@ namespace BlackMisc return copy; } + CAngle CAngle::normalizedTo360Degrees() const + { + CAngle copy(*this); + copy.normalizeTo360Degrees(); + return copy; + } + double CAngle::normalizeDegrees180(double degrees, int roundDigits) { double d = CMathUtils::normalizeDegrees360(degrees + 180.0) - 180.0; diff --git a/src/blackmisc/pq/angle.h b/src/blackmisc/pq/angle.h index 6edf65973..83e52119d 100644 --- a/src/blackmisc/pq/angle.h +++ b/src/blackmisc/pq/angle.h @@ -42,9 +42,9 @@ namespace BlackMisc struct DegMinSecFractionalSec { int sign = 1; //!< 1/-1 - int deg = 0; //!< 0-359 - int min = 0; //!< 0-59 - int sec = 0; //!< 0-59 + int deg = 0; //!< 0-359 + int min = 0; //!< 0-59 + int sec = 0; //!< 0-59 double fractionalSec = 0; //!< value < 1.0 //! Degrees as string @@ -100,9 +100,15 @@ namespace BlackMisc //! Normalize to +- 180deg, [-179.99, 180.0] void normalizeToPlusMinus180Degrees(); - //! As [-179.99, 180.0] normalized heading + //! Normalize to 0-360, [0, 359,99] + void normalizeTo360Degrees(); + + //! As [-179.99, 180.0] normalized angle CAngle normalizedToPlusMinus180Degrees() const; + //! As [0, 359.99] normalized angle + CAngle normalizedTo360Degrees() const; + //! Normalize: -180< degrees ≤180 static double normalizeDegrees180(double degrees, int roundDigits = -1);