23 #ifndef LSST_SPHGEOM_ANGLE_H_
24 #define LSST_SPHGEOM_ANGLE_H_
46 return Angle(std::numeric_limits<double>::quiet_NaN());
49 static Angle fromDegrees(
double a) {
return Angle(a * RAD_PER_DEG); }
51 static Angle fromRadians(
double a) {
return Angle(a); }
57 explicit Angle(
double a) : _rad(a) {}
60 bool operator==(
Angle const & a)
const {
return _rad == a._rad; }
61 bool operator!=(
Angle const & a)
const {
return _rad != a._rad; }
62 bool operator<(
Angle const & a)
const {
return _rad < a._rad; }
63 bool operator>(
Angle const & a)
const {
return _rad > a._rad; }
64 bool operator<=(
Angle const & a)
const {
return _rad <= a._rad; }
65 bool operator>=(
Angle const & a)
const {
return _rad >= a._rad; }
68 Angle operator-()
const {
return Angle(-_rad); }
71 Angle operator*(
double a)
const {
return Angle(_rad * a); }
72 Angle operator/(
double a)
const {
return Angle(_rad / a); }
73 double operator/(
Angle const & a)
const {
return _rad / a._rad; }
76 Angle & operator+=(
Angle const & a) { *
this = *
this + a;
return *
this; }
77 Angle & operator-=(
Angle const & a) { *
this = *
this - a;
return *
this; }
78 Angle & operator*=(
double a) { *
this = *
this * a;
return *
this; }
79 Angle & operator/=(
double a) { *
this = *
this / a;
return *
this; }
82 double asDegrees()
const {
return _rad * DEG_PER_RAD; }
88 bool isNormalized()
const {
return _rad >= 0.0 && _rad <= 2.0 * PI; }
91 bool isNan()
const {
return std::isnan(_rad); }
98 inline Angle operator*(
double a, Angle
const & b) {
return b * a; }
100 std::ostream & operator<<(std::ostream &, Angle
const &);
102 inline double sin(Angle
const & a) {
return std::sin(a.asRadians()); }
103 inline double cos(Angle
const & a) {
return std::cos(a.asRadians()); }
104 inline double tan(Angle
const & a) {
return std::tan(a.asRadians()); }
106 inline Angle abs(Angle
const & a) {
return Angle(std::fabs(a.asRadians())); }
110 #endif // LSST_SPHGEOM_ANGLE_H_