13 using namespace swift::misc::math;
15 namespace swift::misc::physical_quantities
17 CAngle::CAngle(
int degrees,
int minutes,
double seconds)
20 Q_ASSERT_X((degrees >= 0 && minutes >= 0 && seconds >= 0) || (degrees <= 0 && minutes <= 0 && seconds <= 0),
21 Q_FUNC_INFO,
"Same sign required");
27 Q_ASSERT_X((degrees >= 0 && minutes >= 0) || (degrees <= 0 && minutes <= 0), Q_FUNC_INFO,
"Same sign required");
32 minutes = std::copysign(minutes, degrees == 0 ? minutes : degrees);
33 seconds = std::copysign(seconds, degrees == 0 ? minutes : degrees);
38 if (degrees == 0) {
return; }
39 minutes = std::copysign(minutes, degrees);
50 dms = std::fmod(dms + 180.0, 360.0);
51 dms += (dms < 0) ? 180.0 : -180.0;
61 QString str = QStringLiteral(
"%1").arg(dms, 14,
'f', 10,
'0');
62 values.
deg = QStringView { str }.mid(0, 3).toInt();
63 values.
min = QStringView { str }.mid(4, 2).toInt();
64 values.
sec = QStringView { str }.mid(6, 2).toInt();
65 values.
fractionalSec = QStringView { str }.mid(8, 6).toInt() / 1000000.0;
112 if (d <= -180.0) { d = 180.0; }
IconIndex
Index for each icon, allows to send them via DBus, efficiently store them, etc.
static double round(double value, int digits)
Utility round method.
static double normalizeDegrees360(double degrees)
Normalize: 0≤ degrees <360.
Physical unit angle (radians, degrees)
CAngle()
Default constructor.
double piFactor() const
Value as factor of PI (e.g. 0.5PI)
CAngle normalizedToPlusMinus180Degrees() const
As [-179.99, 180.0] normalized angle.
static void unifySign(int degrees, int &minutes, double &seconds)
Minutes and secods will get same sign as degrees.
DegMinSecFractionalSec asSexagesimalDegMinSec(bool range180Degrees=false) const
As individual values.
double cos() const
Cosine of angle.
double sin() const
Sine of angle.
double tan() const
Tangent of angle.
void normalizeTo360Degrees()
Normalize to 0-360, [0, 359,99].
static const double & PI()
PI as convenience method.
static double normalizeDegrees180(double degrees, int roundDigits=-1)
Normalize: -180< degrees ≤180.
void normalizeToPlusMinus180Degrees()
Normalize to +- 180deg, [-179.99, 180.0].
CAngle normalizedTo360Degrees() const
As [0, 359.99] normalized angle.
swift::misc::CIcons::IconIndex toIcon() const
As icon, not implemented by all classes.
static double normalizeDegrees360(double degrees, int roundDigits=-1)
Normalize: 0≤ degrees <360.
Specialized class for angles (degrees, radian).
static CAngleUnit rad()
Radians.
static CAngleUnit deg()
Degrees.
static CAngleUnit sexagesimalDeg()
Sexagesimal degree (degrees, minutes, seconds, decimal seconds)
A physical quantity such as "5m", "20s", "1500ft/s".
double value() const
Value in current unit.
const CAngleUnit & getUnit() const
Unit.
CAngle & switchUnit(const CAngleUnit &newUnit)
Change unit, and convert value to maintain the same quantity.
Value as individual values.
double fractionalSec
value < 1.0