swift
angle.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (C) 2013 swift Project Community / Contributors
2 // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-swift-pilot-client-1
3 
5 
6 #ifndef SWIFT_MISC_PQ_ANGLE_H
7 #define SWIFT_MISC_PQ_ANGLE_H
8 
9 #include <QMetaType>
10 #include <QPair>
11 #include <QString>
12 
13 #include "misc/math/mathutils.h"
14 #include "misc/mixin/mixinicon.h"
16 #include "misc/pq/units.h"
17 #include "misc/swiftmiscexport.h"
18 
19 namespace swift::misc::physical_quantities
20 {
22  class SWIFT_MISC_EXPORT CAngle : public CPhysicalQuantity<CAngleUnit, CAngle>
23  {
24  public:
26  CAngle() : CPhysicalQuantity(0, CAngleUnit::defaultUnit()) {}
27 
29  CAngle(double value, const CAngleUnit &unit) : CPhysicalQuantity(value, unit) {}
30 
32  CAngle(const QString &unitString) : CPhysicalQuantity(unitString) {}
33 
36  {
37  int sign = 1;
38  int deg = 0;
39  int min = 0;
40  int sec = 0;
41  double fractionalSec = 0;
42 
44  QString degAsString() const { return QString::number(deg); }
45 
47  QString minAsString() const { return QString::number(min); }
48 
50  QString secAsString() const { return QString::number(sec); }
51 
53  QString fractionalSecAsString(int width = -1) const
54  {
55  return swift::misc::math::CMathUtils::fractionalPartAsString(fractionalSec, width);
56  }
57  };
58 
62  CAngle(int degrees, int minutes, double seconds);
63 
67  CAngle(int degrees, double minutes);
68 
70  static void unifySign(int degrees, int &minutes, double &seconds);
71 
73  static void unifySign(int degrees, int &minutes);
74 
76  swift::misc::CIcons::IconIndex toIcon() const;
77 
79  DegMinSecFractionalSec asSexagesimalDegMinSec(bool range180Degrees = false) const;
80 
82  double piFactor() const;
83 
85  static const double &PI();
86 
88  double sin() const;
89 
91  double cos() const;
92 
94  double tan() const;
95 
97  void normalizeToPlusMinus180Degrees();
98 
100  void normalizeTo360Degrees();
101 
103  CAngle normalizedToPlusMinus180Degrees() const;
104 
106  CAngle normalizedTo360Degrees() const;
107 
109  static double normalizeDegrees180(double degrees, int roundDigits = -1);
110 
112  static double normalizeDegrees360(double degrees, int roundDigits = -1);
113  };
114 
115  using CAnglePair = QPair<CAngle, CAngle>;
116 } // namespace swift::misc::physical_quantities
117 
120 
121 #endif // SWIFT_MISC_PQ_ANGLE_H
QPair< CAngle, CAngle > CAnglePair
Pair of angle.
Definition: angle.h:115
IconIndex
Index for each icon, allows to send them via DBus, efficiently store them, etc.
Definition: icons.h:32
static QString fractionalPartAsString(double value, int width=-1)
Fractional part as integer string, e.g. 3.12 -> 12 / 3.012 -> 012.
Definition: mathutils.cpp:99
Physical unit angle (radians, degrees)
Definition: angle.h:23
CAngle()
Default constructor.
Definition: angle.h:26
CAngle(const QString &unitString)
Constructor by parsed string, e.g. 10m.
Definition: angle.h:32
CAngle(double value, const CAngleUnit &unit)
Init by double value.
Definition: angle.h:29
Specialized class for angles (degrees, radian).
Definition: units.h:233
A physical quantity such as "5m", "20s", "1500ft/s".
QString fractionalSecAsString(int width=-1) const
Fractional seconds as string.
Definition: angle.h:53
#define SWIFT_MISC_EXPORT
Export a class or function from the library.