lsst.sphgeom
gdcc65144bf+d801c9999e
Toggle main menu visibility
Loading...
Searching...
No Matches
NormalizedAngle.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_NORMALIZEDANGLE_H_
31
#define LSST_SPHGEOM_NORMALIZEDANGLE_H_
32
35
36
#include <limits>
37
38
#include "
Angle.h
"
39
40
41
namespace
lsst {
42
namespace
sphgeom
{
43
44
// Forward declarations
45
class
LonLat
;
46
class
Vector3d
;
47
50
class
NormalizedAngle
{
51
public
:
52
static
NormalizedAngle
nan() {
53
return
NormalizedAngle
(std::numeric_limits<double>::quiet_NaN());
54
}
55
56
static
NormalizedAngle
fromDegrees(
double
a) {
57
return
NormalizedAngle
(a * RAD_PER_DEG);
58
}
59
60
static
NormalizedAngle
fromRadians(
double
a) {
61
return
NormalizedAngle
(a);
62
}
63
71
static
NormalizedAngle
between
(
NormalizedAngle
const
& a,
72
NormalizedAngle
const
& b);
73
76
static
NormalizedAngle
center
(
NormalizedAngle
const
& a,
77
NormalizedAngle
const
& b);
78
80
NormalizedAngle
() =
default
;
81
83
NormalizedAngle
(
NormalizedAngle
const
& a) =
default
;
84
86
explicit
NormalizedAngle
(
Angle
const
& a) {
87
*
this
=
NormalizedAngle
(a.
asRadians
());
88
}
89
92
explicit
NormalizedAngle
(
double
a) {
93
// For really large |a|, the error in this reduction can exceed 2*PI
94
// (because PI is only an approximation to π).
95
if
(a < 0.0) {
96
_a =
Angle
(std::fmod(a, 2.0 * PI) + 2.0 * PI);
97
}
else
if
(a > 2 * PI) {
98
_a =
Angle
(std::fmod(a, 2.0 * PI));
99
}
else
{
100
_a =
Angle
(a);
101
}
102
}
103
106
NormalizedAngle
(
LonLat
const
&,
LonLat
const
&);
107
110
NormalizedAngle
(
Vector3d
const
&,
Vector3d
const
&);
111
115
operator
Angle
const
& ()
const
{
return
_a; }
116
117
// Comparison operators
118
bool
operator==(
Angle
const
& a)
const
{
return
_a == a; }
119
bool
operator!=(Angle
const
& a)
const
{
return
_a != a; }
120
bool
operator<(Angle
const
& a)
const
{
return
_a < a; }
121
bool
operator>(Angle
const
& a)
const
{
return
_a > a; }
122
bool
operator<=(Angle
const
& a)
const
{
return
_a <= a; }
123
bool
operator>=(Angle
const
& a)
const
{
return
_a >= a; }
124
125
// Arithmetic operators
126
Angle operator-()
const
{
return
Angle(-_a); }
127
Angle operator+(Angle
const
& a)
const
{
return
_a + a; }
128
Angle operator-(Angle
const
& a)
const
{
return
_a - a; }
129
Angle operator*(
double
a)
const
{
return
_a * a; }
130
Angle operator/(
double
a)
const
{
return
_a / a; }
131
double
operator/(Angle
const
& a)
const
{
return
_a / a; }
132
134
double
asDegrees
()
const
{
return
_a.asDegrees(); }
135
137
double
asRadians
()
const
{
return
_a.asRadians(); }
138
140
bool
isNan
()
const
{
return
_a.isNan(); }
141
148
NormalizedAngle
getAngleTo
(
NormalizedAngle
const
& a)
const
{
149
NormalizedAngle
x;
150
double
d = a.
asRadians
() -
asRadians
();
151
x._a =
Angle
((d < 0.0) ? 2.0 * PI + d : d);
152
return
x;
153
}
154
155
private
:
156
Angle
_a;
157
};
158
159
inline
NormalizedAngle
const
& abs(NormalizedAngle
const
& a) {
return
a; }
160
161
}}
// namespace lsst::sphgeom
162
163
#endif
// LSST_SPHGEOM_NORMALIZEDANGLE_H_
Angle.h
This file declares a class for representing angles.
lsst::sphgeom::Angle
Definition
Angle.h:50
lsst::sphgeom::Angle::asRadians
double asRadians() const
asRadians returns the value of this angle in units of radians.
Definition
Angle.h:92
lsst::sphgeom::LonLat
Definition
LonLat.h:55
lsst::sphgeom::NormalizedAngle::isNan
bool isNan() const
isNan returns true if the angle value is NaN.
Definition
NormalizedAngle.h:140
lsst::sphgeom::NormalizedAngle::NormalizedAngle
NormalizedAngle(double a)
Definition
NormalizedAngle.h:92
lsst::sphgeom::NormalizedAngle::asRadians
double asRadians() const
asRadians returns the value of this angle in units of radians.
Definition
NormalizedAngle.h:137
lsst::sphgeom::NormalizedAngle::getAngleTo
NormalizedAngle getAngleTo(NormalizedAngle const &a) const
Definition
NormalizedAngle.h:148
lsst::sphgeom::NormalizedAngle::NormalizedAngle
NormalizedAngle(Angle const &a)
This constructor creates a normalized copy of a.
Definition
NormalizedAngle.h:86
lsst::sphgeom::NormalizedAngle::NormalizedAngle
NormalizedAngle()=default
This constructor creates a NormalizedAngle with a value of zero.
lsst::sphgeom::NormalizedAngle::asDegrees
double asDegrees() const
asDegrees returns the value of this angle in units of degrees.
Definition
NormalizedAngle.h:134
lsst::sphgeom::NormalizedAngle::between
static NormalizedAngle between(NormalizedAngle const &a, NormalizedAngle const &b)
Definition
NormalizedAngle.cc:42
lsst::sphgeom::NormalizedAngle::center
static NormalizedAngle center(NormalizedAngle const &a, NormalizedAngle const &b)
Definition
NormalizedAngle.cc:52
lsst::sphgeom::NormalizedAngle::NormalizedAngle
NormalizedAngle(NormalizedAngle const &a)=default
This constructor creates a copy of a.
lsst::sphgeom::Vector3d
Vector3d is a vector in ℝ³ with components stored in double precision.
Definition
Vector3d.h:51
lsst::sphgeom
Definition
Angle.h:45
include
lsst
sphgeom
NormalizedAngle.h
Generated by
1.17.0