1 #ifndef SZA_UTIL_ANGLE_H
2 #define SZA_UTIL_ANGLE_H
15 #include "carma/szautil/ConformableQuantity.h"
20 class Angle :
public ConformableQuantity {
32 Angle(
bool modulo=
false);
37 Angle(std::string degrees,
bool modulo);
42 Angle(
const Radians& units,
double radians,
bool modulo=
false);
43 Angle(
const Degrees& units,
double degrees,
bool modulo=
false);
44 Angle(
const MilliArcSec& units,
double mas,
bool modulo=
false);
45 Angle(
const ArcSec& units,
double as,
bool modulo=
false);
46 Angle(
const ArcMinutes& units,
double am,
bool modulo=
false);
47 Angle(
const Angle& angle);
58 void setRadians(
double radians);
59 void setDegrees(
double degrees);
60 void setDegrees(
double degrees,
double arcmin,
double arcsec);
61 void setArcMinutes(
double am);
62 void setMas(
double mas);
63 void setArcSec(
double as);
64 void setDegrees(std::string degrees);
69 virtual void addRadians(
double radians);
70 virtual void addDegrees(
double degrees);
71 virtual void addDegrees(std::string degrees);
76 inline double radians() {
80 inline double degrees() {
81 return radians_ * degPerRad_;
84 inline double arcsec() {
85 return radians_ * arcSecPerRad_;
88 inline double arcmin() {
89 return radians_ * arcMinPerRad_;
93 return radians_ * masPerRad_;
96 inline short tiltmeterUnits() {
97 return (
short)(arcmin() * 1000);
100 inline short caltertUnits() {
101 return (
short)(degrees() * 100);
104 std::string strDegrees();
106 void operator=(Angle& angle);
107 void operator=(
const Angle& angle);
112 friend std::ostream& operator<<(std::ostream& os, Angle& angle);
117 Angle operator+(Angle& angle);
122 void operator+=(Angle& angle);
123 void operator+=(
const Angle& angle);
128 Angle operator-(Angle& angle);
133 void operator/=(
unsigned uval);
138 Angle operator/(
unsigned uval);
143 bool operator>(Angle& angle);
144 bool operator>(
const Angle& angle);
145 bool operator>=(Angle& angle);
146 bool operator<(Angle& angle);
147 bool operator<(
const Angle& angle);
148 bool operator<=(Angle& angle);
156 static double sexagesimalToDouble(std::string valStr);
161 static std::string doubleToSexagesimal(
double val);
163 static double radiansToPiMinusPi(
double radians);
164 static double radiansToZeroTwoPi(
double radians);
166 static const double pi_;
167 static const double twoPi_;
169 static const double degPerRad_;
170 static const double arcSecPerDegree_;
171 static const double masPerDegree_;
172 static const double arcSecPerRad_;
173 static const double arcMinPerRad_;
174 static const double masPerRad_;
180 Angle(
double radians,
bool modulo);
193 #endif // End #ifndef SZA_UTIL_ANGLE_H