lsst.sphgeom
gdcc65144bf+d801c9999e
Toggle main menu visibility
Loading...
Searching...
No Matches
Angle.h
Go to the documentation of this file.
1
/*
2
* This file is part of sphgeom.
3
*
4
* Developed for the LSST Data Management System.
5
* This product includes software developed by the LSST Project
6
* (http://www.lsst.org).
7
* See the COPYRIGHT file at the top-level directory of this distribution
8
* for details of code ownership.
9
*
10
* This software is dual licensed under the GNU General Public License and also
11
* under a 3-clause BSD license. Recipients may choose which of these licenses
12
* to use; please see the files gpl-3.0.txt and/or bsd_license.txt,
13
* respectively. If you choose the GPL option then the following text applies
14
* (but note that there is still no warranty even if you opt for BSD instead):
15
*
16
* This program is free software: you can redistribute it and/or modify
17
* it under the terms of the GNU General Public License as published by
18
* the Free Software Foundation, either version 3 of the License, or
19
* (at your option) any later version.
20
*
21
* This program is distributed in the hope that it will be useful,
22
* but WITHOUT ANY WARRANTY; without even the implied warranty of
23
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24
* GNU General Public License for more details.
25
*
26
* You should have received a copy of the GNU General Public License
27
* along with this program. If not, see <http://www.gnu.org/licenses/>.
28
*/
29
30
#ifndef LSST_SPHGEOM_ANGLE_H_
31
#define LSST_SPHGEOM_ANGLE_H_
32
35
36
#include <cmath>
37
#include <algorithm>
38
#include <iosfwd>
39
#include <limits>
40
41
#include "
constants.h
"
42
43
44
namespace
lsst {
45
namespace
sphgeom
{
46
50
class
Angle
{
51
public
:
52
static
Angle
nan() {
53
return
Angle
(std::numeric_limits<double>::quiet_NaN());
54
}
55
56
static
Angle
fromDegrees(
double
a) {
return
Angle
(a * RAD_PER_DEG); }
57
58
static
Angle
fromRadians(
double
a) {
return
Angle
(a); }
59
61
Angle
() : _rad(0.0) {}
62
64
explicit
Angle
(
double
a) : _rad(a) {}
65
66
// Comparison operators
67
bool
operator==(
Angle
const
& a)
const
{
return
_rad == a._rad; }
68
bool
operator!=(
Angle
const
& a)
const
{
return
_rad != a._rad; }
69
bool
operator<(
Angle
const
& a)
const
{
return
_rad < a._rad; }
70
bool
operator>(
Angle
const
& a)
const
{
return
_rad > a._rad; }
71
bool
operator<=(
Angle
const
& a)
const
{
return
_rad <= a._rad; }
72
bool
operator>=(
Angle
const
& a)
const
{
return
_rad >= a._rad; }
73
74
// Arithmetic operators
75
Angle
operator-()
const
{
return
Angle
(-_rad); }
76
Angle
operator+(
Angle
const
& a)
const
{
return
Angle
(_rad + a._rad); }
77
Angle
operator-(
Angle
const
& a)
const
{
return
Angle
(_rad - a._rad); }
78
Angle
operator*(
double
a)
const
{
return
Angle
(_rad * a); }
79
Angle
operator/(
double
a)
const
{
return
Angle
(_rad / a); }
80
double
operator/(
Angle
const
& a)
const
{
return
_rad / a._rad; }
81
82
// In-place arithmetic operators
83
Angle
& operator+=(
Angle
const
& a) { *
this
= *
this
+ a;
return
*
this
; }
84
Angle
& operator-=(
Angle
const
& a) { *
this
= *
this
- a;
return
*
this
; }
85
Angle
& operator*=(
double
a) { *
this
= *
this
* a;
return
*
this
; }
86
Angle
& operator/=(
double
a) { *
this
= *
this
/ a;
return
*
this
; }
87
89
double
asDegrees
()
const
{
return
_rad * DEG_PER_RAD; }
90
92
double
asRadians
()
const
{
return
_rad; }
93
95
bool
isNormalized
()
const
{
return
_rad >= 0.0 && _rad <= 2.0 * PI; }
96
98
bool
isNan
()
const
{
return
std::isnan(_rad); }
99
100
private
:
101
double
_rad;
102
};
103
104
105
inline
Angle operator*(
double
a, Angle
const
& b) {
return
b * a; }
106
107
std::ostream & operator<<(std::ostream &, Angle
const
&);
108
109
inline
double
sin(Angle
const
& a) {
return
std::sin(a.asRadians()); }
110
inline
double
cos(
Angle
const
& a) {
return
std::cos(a.asRadians()); }
111
inline
double
tan(
Angle
const
& a) {
return
std::tan(a.asRadians()); }
112
113
inline
Angle
abs(
Angle
const
& a) {
return
Angle
(std::fabs(a.asRadians())); }
114
115
}}
// namespace lsst::sphgeom
116
117
#endif
// LSST_SPHGEOM_ANGLE_H_
lsst::sphgeom::Angle
Definition
Angle.h:50
lsst::sphgeom::Angle::isNan
bool isNan() const
isNan returns true if the angle value is NaN.
Definition
Angle.h:98
lsst::sphgeom::Angle::isNormalized
bool isNormalized() const
isNormalized returns true if this angle lies in the range [0, 2π).
Definition
Angle.h:95
lsst::sphgeom::Angle::Angle
Angle(double a)
This constructor creates an Angle with the given value in radians.
Definition
Angle.h:64
lsst::sphgeom::Angle::Angle
Angle()
This constructor creates an Angle with a value of zero.
Definition
Angle.h:61
lsst::sphgeom::Angle::asDegrees
double asDegrees() const
asDegrees returns the value of this angle in units of degrees.
Definition
Angle.h:89
lsst::sphgeom::Angle::asRadians
double asRadians() const
asRadians returns the value of this angle in units of radians.
Definition
Angle.h:92
constants.h
This file contains common constants.
lsst::sphgeom
Definition
Angle.h:45
include
lsst
sphgeom
Angle.h
Generated by
1.17.0