LSST Applications g180d380827+0f66a164bb,g2079a07aa2+86d27d4dc4,g2305ad1205+7d304bc7a0,g29320951ab+500695df56,g2bbee38e9b+0e5473021a,g337abbeb29+0e5473021a,g33d1c0ed96+0e5473021a,g3a166c0a6a+0e5473021a,g3ddfee87b4+e42ea45bea,g48712c4677+36a86eeaa5,g487adcacf7+2dd8f347ac,g50ff169b8f+96c6868917,g52b1c1532d+585e252eca,g591dd9f2cf+c70619cc9d,g5a732f18d5+53520f316c,g5ea96fc03c+341ea1ce94,g64a986408d+f7cd9c7162,g858d7b2824+f7cd9c7162,g8a8a8dda67+585e252eca,g99cad8db69+469ab8c039,g9ddcbc5298+9a081db1e4,ga1e77700b3+15fc3df1f7,gb0e22166c9+60f28cb32d,gba4ed39666+c2a2e4ac27,gbb8dafda3b+c92fc63c7e,gbd866b1f37+f7cd9c7162,gc120e1dc64+02c66aa596,gc28159a63d+0e5473021a,gc3e9b769f7+b0068a2d9f,gcf0d15dbbd+e42ea45bea,gdaeeff99f8+f9a426f77a,ge6526c86ff+84383d05b3,ge79ae78c31+0e5473021a,gee10cc3b42+585e252eca,gff1a9f87cc+f7cd9c7162,w.2024.17
LSST Data Management Base Package
Loading...
Searching...
No Matches
NormalizedAngleInterval.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_NORMALIZEDANGLEINTERVAL_H_
31#define LSST_SPHGEOM_NORMALIZEDANGLEINTERVAL_H_
32
36
37#include <iosfwd>
38
39#include "NormalizedAngle.h"
40#include "Relationship.h"
41
42
43namespace lsst {
44namespace sphgeom {
45
65public:
66 // Factory functions
71
72 static NormalizedAngleInterval fromRadians(double a, double b) {
74 }
75
79
84
88
91 explicit NormalizedAngleInterval(Angle const & x) : _a(x), _b(_a) {}
92
95 _a(x), _b(x) {}
96
104
108
110 bool operator==(NormalizedAngleInterval const & i) const {
111 return (_a == i._a && _b == i._b) || (isEmpty() && i.isEmpty());
112 }
113
114 bool operator!=(NormalizedAngleInterval const & i) const {
115 return !(*this == i);
116 }
117
120 return (_a == x && _b == x) || (x.isNan() && isEmpty());
121 }
122
123 bool operator!=(NormalizedAngle x) const { return !(*this == x); }
124
126 NormalizedAngle getA() const { return _a; }
127
129 NormalizedAngle getB() const { return _b; }
130
133 bool isEmpty() const { return _a.isNan() || _b.isNan(); }
134
136 bool isFull() const {
137 return _a.asRadians() == 0.0 && _b.asRadians() == 2.0 * PI;
138 }
139
142 bool wraps() const { return _a > _b; }
143
147
152 NormalizedAngle getSize() const { return _a.getAngleTo(_b); }
153
158 if (x.isNan()) {
159 return true;
160 }
161 return wraps() ? (x <= _b || _a <= x) : (_a <= x && x <= _b);
162 }
163
164 bool contains(NormalizedAngleInterval const & x) const;
166
171 return !intersects(x);
172 }
173
174 bool isDisjointFrom(NormalizedAngleInterval const & x) const;
176
181 return wraps() ? (x <= _b || _a <= x) : (_a <= x && x <= _b);
182 }
183
185 return !isDisjointFrom(x);
186 }
188
193 return (_a == x && _b == x) || isEmpty();
194 }
195
196 bool isWithin(NormalizedAngleInterval const & x) const {
197 return x.contains(*this);
198 }
200
208
211 *this = clippedTo(x);
212 return *this;
213 }
214
219
224
231
239
247
252
259
261 *this = dilatedBy(x);
262 return *this;
263 }
264
266
267private:
270};
271
272std::ostream & operator<<(std::ostream &, NormalizedAngleInterval const &);
273
274}} // namespace lsst::sphgeom
275
276#endif // LSST_SPHGEOM_NORMALIZEDANGLEINTERVAL_H_
This file declares a class for representing normalized angles.
This file provides a type alias for describing set relationships.
int y
Definition SpanSet.cc:48
table::Key< int > b
Angle represents an angle in radians.
Definition Angle.h:50
static Angle fromDegrees(double a)
Definition Angle.h:56
NormalizedAngle is an angle that lies in the range [0, 2π), with one exception - a NormalizedAngle ca...
bool isNan() const
isNan returns true if the angle value is NaN.
double asRadians() const
asRadians returns the value of this angle in units of radians.
NormalizedAngle getAngleTo(NormalizedAngle const &a) const
getAngleTo computes the angle α ∈ [0, 2π) such that adding α to this angle and then normalizing the r...
static NormalizedAngle center(NormalizedAngle const &a, NormalizedAngle const &b)
For two normalized angles a and b, center(a, b) returns the angle m such that a.getAngleTo(m) is equa...
NormalizedAngleInterval represents closed intervals of normalized angles, i.e.
static NormalizedAngleInterval empty()
bool isFull() const
isFull returns true if this interval contains all normalized angles.
NormalizedAngleInterval()
This constructor creates an empty interval.
bool wraps() const
wraps returns true if the interval "wraps" around the 0/2π angle discontinuity, i....
NormalizedAngleInterval clippedTo(NormalizedAngleInterval const &x) const
clippedTo returns the smallest interval containing the intersection of this interval and x.
NormalizedAngleInterval & clipTo(NormalizedAngle x)
clipTo shrinks this interval until all its points are in x.
NormalizedAngleInterval(NormalizedAngle x, NormalizedAngle y)
This constructor creates an interval with the given endpoints.
NormalizedAngle getA() const
getA returns the first endpoint of this interval.
NormalizedAngle getCenter() const
getCenter returns the center of this interval.
bool intersects(NormalizedAngleInterval const &x) const
bool operator==(NormalizedAngle x) const
A closed interval is equal to a point x if both endpoints equal x.
NormalizedAngleInterval & erodeBy(Angle x)
NormalizedAngleInterval(Angle const &x)
This constructor creates a closed interval containing only the normalization of x.
bool isWithin(NormalizedAngleInterval const &x) const
NormalizedAngleInterval expandedTo(NormalizedAngleInterval const &x) const
NormalizedAngleInterval dilatedBy(Angle x) const
For positive x, dilatedBy returns the morphological dilation of this interval by [-x,...
Relationship relate(NormalizedAngle x) const
NormalizedAngleInterval erodedBy(Angle x) const
NormalizedAngleInterval & dilateBy(Angle x)
NormalizedAngleInterval expandedTo(NormalizedAngle x) const
NormalizedAngle getSize() const
getSize returns the size (length, width) of this interval.
NormalizedAngleInterval & expandTo(NormalizedAngle x)
NormalizedAngle getB() const
getB returns the second endpoint of this interval.
bool operator==(NormalizedAngleInterval const &i) const
Two intervals are equal if they contain the same points.
NormalizedAngleInterval(NormalizedAngle const &x)
This constructor creates a closed interval containing only x.
bool operator!=(NormalizedAngleInterval const &i) const
static NormalizedAngleInterval fromDegrees(double a, double b)
static NormalizedAngleInterval fromRadians(double a, double b)
NormalizedAngleInterval clippedTo(NormalizedAngle x) const
clippedTo returns the intersection of this interval and x.
static NormalizedAngleInterval full()
bool isEmpty() const
isEmpty returns true if this interval does not contain any normalized angles.
std::ostream & operator<<(std::ostream &, Angle const &)
Definition Angle.cc:41
constexpr double PI
Definition constants.h:43