LSST Applications  21.0.0-172-gfb10e10a+18fedfabac,22.0.0+297cba6710,22.0.0+80564b0ff1,22.0.0+8d77f4f51a,22.0.0+a28f4c53b1,22.0.0+dcf3732eb2,22.0.1-1-g7d6de66+2a20fdde0d,22.0.1-1-g8e32f31+297cba6710,22.0.1-1-geca5380+7fa3b7d9b6,22.0.1-12-g44dc1dc+2a20fdde0d,22.0.1-15-g6a90155+515f58c32b,22.0.1-16-g9282f48+790f5f2caa,22.0.1-2-g92698f7+dcf3732eb2,22.0.1-2-ga9b0f51+7fa3b7d9b6,22.0.1-2-gd1925c9+bf4f0e694f,22.0.1-24-g1ad7a390+a9625a72a8,22.0.1-25-g5bf6245+3ad8ecd50b,22.0.1-25-gb120d7b+8b5510f75f,22.0.1-27-g97737f7+2a20fdde0d,22.0.1-32-gf62ce7b1+aa4237961e,22.0.1-4-g0b3f228+2a20fdde0d,22.0.1-4-g243d05b+871c1b8305,22.0.1-4-g3a563be+32dcf1063f,22.0.1-4-g44f2e3d+9e4ab0f4fa,22.0.1-42-gca6935d93+ba5e5ca3eb,22.0.1-5-g15c806e+85460ae5f3,22.0.1-5-g58711c4+611d128589,22.0.1-5-g75bb458+99c117b92f,22.0.1-6-g1c63a23+7fa3b7d9b6,22.0.1-6-g50866e6+84ff5a128b,22.0.1-6-g8d3140d+720564cf76,22.0.1-6-gd805d02+cc5644f571,22.0.1-8-ge5750ce+85460ae5f3,master-g6e05de7fdc+babf819c66,master-g99da0e417a+8d77f4f51a,w.2021.48
LSST Data Management Base Package
Public Member Functions | Related Functions | List of all members
lsst::geom::SpherePoint Class Referencefinal

Point in an unspecified spherical coordinate system. More...

#include <SpherePoint.h>

Public Member Functions

 SpherePoint (Angle const &longitude, Angle const &latitude)
 Construct a SpherePoint from a longitude and latitude. More...
 
 SpherePoint (double longitude, double latitude, AngleUnit units)
 Construct a SpherePoint from double longitude and latitude. More...
 
 SpherePoint (sphgeom::Vector3d const &vector)
 Construct a SpherePoint from a vector representing a direction. More...
 
 SpherePoint (sphgeom::LonLat const &lonLat) noexcept
 Construct a SpherePoint from a sphgeom::LonLat. More...
 
 SpherePoint () noexcept
 Construct a SpherePoint with "nan" for longitude and latitude. More...
 
 SpherePoint (SpherePoint const &other) noexcept
 Create a copy of a SpherePoint. More...
 
 SpherePoint (SpherePoint &&other) noexcept
 Create a copy of a SpherePoint. More...
 
 ~SpherePoint () noexcept
 
SpherePointoperator= (SpherePoint const &other) noexcept
 Overwrite this object with the value of another SpherePoint. More...
 
SpherePointoperator= (SpherePoint &&other) noexcept
 Overwrite this object with the value of another SpherePoint. More...
 
 operator sphgeom::LonLat () const noexcept
 Make SpherePoint implicitly convertible to LonLat. More...
 
Angle getLongitude () const noexcept
 The longitude of this point. More...
 
Angle getRa () const noexcept
 Synonym for getLongitude. More...
 
Angle getLatitude () const noexcept
 The latitude of this point. More...
 
Angle getDec () const noexcept
 Synonym for getLatitude. More...
 
Point2D getPosition (AngleUnit unit) const noexcept
 Return longitude, latitude as a Point2D object. More...
 
sphgeom::UnitVector3d getVector () const noexcept
 A unit vector representation of this point. More...
 
Angle operator[] (size_t index) const
 Longitude and latitude by index. More...
 
bool atPole () const noexcept
 true if this point is either coordinate pole. More...
 
bool isFinite () const noexcept
 true if this point is a well-defined position. More...
 
bool operator== (SpherePoint const &other) const noexcept
 true if two points have the same longitude and latitude. More...
 
bool operator!= (SpherePoint const &other) const noexcept
 false if two points represent the same position. More...
 
std::size_t hash_value () const noexcept
 Return a hash of this object. More...
 
Angle bearingTo (SpherePoint const &other) const
 Orientation at this point of the great circle arc to another point. More...
 
Angle separation (SpherePoint const &other) const noexcept
 Angular distance between two points. More...
 
SpherePoint rotated (SpherePoint const &axis, Angle const &amount) const noexcept
 Return a point rotated from this one around an axis. More...
 
SpherePoint offset (Angle const &bearing, Angle const &amount) const
 Return a point offset from this one along a great circle. More...
 
std::pair< Angle, AnglegetTangentPlaneOffset (SpherePoint const &other) const
 Get the offset from a tangent plane centered at this point to another point. More...
 

Related Functions

(Note that these are not member functions.)

std::ostreamoperator<< (std::ostream &os, SpherePoint const &point)
 Print the value of a point to a stream. More...
 

Detailed Description

Point in an unspecified spherical coordinate system.

This class represents a point on a sphere in the mathematical rather than the astronomical sense. It does not refer to any astronomical reference frame, nor does it have any concept of (radial) distance.

Points can be represented either as spherical coordinates or as a unit vector. The adopted convention for converting between these two systems is that (0, 0) corresponds to <1, 0, 0>, that (π/2, 0) corresponds to <0, 1, 0>, and that (0, π/2) corresponds to <0, 0, 1>.

To keep usage simple, SpherePoint does not support modification of existing values; transformations of SpherePoints should be expressed as a new object. To support cases where a SpherePoint must be updated in-place, SpherePoint supports assignment to an existing object. One example is in containers of SpherePoints; no STL container has an atomic element-replacement method, so complicated constructions would need to be used if you couldn't overwrite an existing element.

Definition at line 57 of file SpherePoint.h.

Constructor & Destructor Documentation

◆ SpherePoint() [1/7]

lsst::geom::SpherePoint::SpherePoint ( Angle const &  longitude,
Angle const &  latitude 
)

Construct a SpherePoint from a longitude and latitude.

Parameters
longitudeThe longitude of the point. +/-inf is treated as nan (because longitude is wrapped to a standard range and infinity cannot be wrapped)
latitudeThe latitude of the point. Must be in the interval [-π/2, π/2] radians.
Exceptions
pex::exceptions::InvalidParameterErrorThrown if latitude is out of range.
Exception Safety
Provides strong exception guarantee.

Definition at line 68 of file SpherePoint.cc.

69  : _longitude(longitude.wrap().asRadians()), _latitude(latitude.asRadians()) {
70  if (fabs(_latitude) > HALFPI) {
71  throw pexExcept::InvalidParameterError("Angle " + to_string(latitude.asDegrees()) +
72  " is not a valid latitude.");
73  }
74 }
table::Key< lsst::geom::Angle > longitude
Definition: VisitInfo.cc:213
table::Key< lsst::geom::Angle > latitude
Definition: VisitInfo.cc:212
Reports invalid arguments.
Definition: Runtime.h:66
T fabs(T... args)
constexpr double HALFPI
Definition: Angle.h:41

◆ SpherePoint() [2/7]

lsst::geom::SpherePoint::SpherePoint ( double  longitude,
double  latitude,
AngleUnit  units 
)

Construct a SpherePoint from double longitude and latitude.

Parameters
longitudeThe longitude of the point. +/-inf is treated as nan (because longitude is wrapped to a standard range and infinity cannot be wrapped)
latitudeThe latitude of the point. Must be in the interval [-π/2, π/2] radians.
unitsThe units of longitude and latitude
Exceptions
pex::exceptions::InvalidParameterErrorThrown if latitude is out of range.
Exception Safety
Provides strong exception guarantee.

Definition at line 65 of file SpherePoint.cc.

66  : SpherePoint(longitude * units, latitude * units) {}
SpherePoint() noexcept
Construct a SpherePoint with "nan" for longitude and latitude.
Definition: SpherePoint.cc:108

◆ SpherePoint() [3/7]

lsst::geom::SpherePoint::SpherePoint ( sphgeom::Vector3d const &  vector)
explicit

Construct a SpherePoint from a vector representing a direction.

Parameters
vectorA position whose direction will be stored as a SpherePoint. Must not be the zero vector. Need not be normalized, and the norm will not affect the value of the point.
Exceptions
pex::exceptions::InvalidParameterErrorThrown if vector is the zero vector.
Exception Safety
Provides strong exception guarantee.
Note
If the SpherePoint is at a pole then longitude is set to 0. That provides predictable behavior for bearingTo and offset.

Definition at line 76 of file SpherePoint.cc.

76  {
77  // sphgeom Vector3d has its own normalization,
78  // but its behavior is not documented for non-finite values
79  double norm = vector.getNorm();
80  if (norm <= 0.0) {
81  stringstream buffer;
82  buffer << "Vector " << vector << " has zero norm and cannot be normalized.";
83  throw pexExcept::InvalidParameterError(buffer.str());
84  }
85  // To avoid unexpected behavior from mixing finite elements and infinite norm
86  if (!isfinite(norm)) {
87  norm = NAN;
88  }
89  auto unitVector =
91  _set(unitVector);
92 }
static UnitVector3d fromNormalized(Vector3d const &v)
fromNormalized returns the unit vector equal to v, which is assumed to be normalized.
Definition: UnitVector3d.h:82
T isfinite(T... args)
T norm(const T &x)
Definition: Integrate.h:160
T str(T... args)

◆ SpherePoint() [4/7]

lsst::geom::SpherePoint::SpherePoint ( sphgeom::LonLat const &  lonLat)
noexcept

Construct a SpherePoint from a sphgeom::LonLat.

Parameters
lonLatThe lonLat
Exception Safety
Shall not throw exceptions.

Definition at line 94 of file SpherePoint.cc.

95  : SpherePoint(lonLat.getLon().asRadians(), lonLat.getLat().asRadians(), radians) {}
constexpr AngleUnit radians
constant with units of radians
Definition: Angle.h:108

◆ SpherePoint() [5/7]

lsst::geom::SpherePoint::SpherePoint ( )
noexcept

Construct a SpherePoint with "nan" for longitude and latitude.

Definition at line 108 of file SpherePoint.cc.

108 : _longitude(nan("")), _latitude(nan("")) {}
T nan(T... args)

◆ SpherePoint() [6/7]

lsst::geom::SpherePoint::SpherePoint ( SpherePoint const &  other)
defaultnoexcept

Create a copy of a SpherePoint.

Parameters
otherThe point to copy.
Exception Safety
Shall not throw exceptions.

◆ SpherePoint() [7/7]

lsst::geom::SpherePoint::SpherePoint ( SpherePoint &&  other)
defaultnoexcept

Create a copy of a SpherePoint.

As SpherePoint(SpherePoint const&), except that other may be left in an unspecified but valid state.

◆ ~SpherePoint()

lsst::geom::SpherePoint::~SpherePoint ( )
defaultnoexcept

Member Function Documentation

◆ atPole()

bool lsst::geom::SpherePoint::atPole ( ) const
inlinenoexcept

true if this point is either coordinate pole.

Returns
true if this point is at the north or south pole, false otherwise
Exception Safety
Shall not throw exceptions.

Definition at line 237 of file SpherePoint.h.

237  {
238  // Unit tests indicate we don't need to worry about epsilon-errors, in that
239  // Objects constructed from lat=90*degrees, <0,0,1>, etc. all have atPole() = true.
240  return fabs(_latitude) >= HALFPI;
241  }

◆ bearingTo()

Angle lsst::geom::SpherePoint::bearingTo ( SpherePoint const &  other) const

Orientation at this point of the great circle arc to another point.

The orientation is measured in a plane tangent to the sphere at this point, with 0 degrees along the direction of increasing longitude and 90 degrees along the direction of increasing latitude. Thus for any point except the pole, the arc is due east at 0 degrees and due north at 90 degrees. To understand the behavior at the poles it may help to imagine the point has been shifted slightly by decreasing the absolute value of its latitude.

If the points are on opposite sides of the sphere then the returned bearing may be any value.

Parameters
otherthe point to which to measure the bearing
Returns
the direction, as defined above, in the interval [0, 2π).
Exception Safety
Provides strong exception guarantee.
Note
For two points A and B, A.bearingTo(B) will in general not be 180 degrees away from B.bearingTo(A).

Definition at line 159 of file SpherePoint.cc.

159  {
160  Angle const deltaLon = other.getLongitude() - this->getLongitude();
161 
162  double const sinDelta1 = sin(getLatitude().asRadians());
163  double const sinDelta2 = sin(other.getLatitude().asRadians());
164  double const cosDelta1 = cos(getLatitude().asRadians());
165  double const cosDelta2 = cos(other.getLatitude().asRadians());
166 
167  // Adapted from http://www.movable-type.co.uk/scripts/latlong.html
168  double const y = sin(deltaLon) * cosDelta2;
169  double const x = cosDelta1 * sinDelta2 - sinDelta1 * cosDelta2 * cos(deltaLon);
170  return (90.0 * degrees - atan2(y, x) * radians).wrap();
171 }
double x
int y
Definition: SpanSet.cc:48
T atan2(T... args)
Angle getLatitude() const noexcept
The latitude of this point.
Definition: SpherePoint.h:190
Angle getLongitude() const noexcept
The longitude of this point.
Definition: SpherePoint.h:178
lsst::geom::Angle Angle
Definition: misc.h:33
constexpr AngleUnit degrees
constant with units of degrees
Definition: Angle.h:109
double sin(Angle const &a)
Definition: Angle.h:102
double cos(Angle const &a)
Definition: Angle.h:103

◆ getDec()

Angle lsst::geom::SpherePoint::getDec ( ) const
inlinenoexcept

Synonym for getLatitude.

Definition at line 193 of file SpherePoint.h.

193 { return _latitude * radians; };

◆ getLatitude()

Angle lsst::geom::SpherePoint::getLatitude ( ) const
inlinenoexcept

The latitude of this point.

Returns
the latitude, in the interval [-π/2, π/2] radians.
Exception Safety
Shall not throw exceptions.

Definition at line 190 of file SpherePoint.h.

190 { return _latitude * radians; };

◆ getLongitude()

Angle lsst::geom::SpherePoint::getLongitude ( ) const
inlinenoexcept

The longitude of this point.

Returns
the longitude, in the interval [0, 2π) radians.
Exception Safety
Shall not throw exceptions.

Definition at line 178 of file SpherePoint.h.

178 { return _longitude * radians; };

◆ getPosition()

Point2D lsst::geom::SpherePoint::getPosition ( AngleUnit  unit) const
noexcept

Return longitude, latitude as a Point2D object.

Parameters
[in]unitUnits of returned data.
Exception Safety
Shall not throw exceptions.

Definition at line 129 of file SpherePoint.cc.

129  {
130  return Point2D(getLongitude().asAngularUnits(unit), getLatitude().asAngularUnits(unit));
131 }
Point< double, 2 > Point2D
Definition: Point.h:324

◆ getRa()

Angle lsst::geom::SpherePoint::getRa ( ) const
inlinenoexcept

Synonym for getLongitude.

Definition at line 181 of file SpherePoint.h.

181 { return _longitude * radians; };

◆ getTangentPlaneOffset()

std::pair< geom::Angle, geom::Angle > lsst::geom::SpherePoint::getTangentPlaneOffset ( SpherePoint const &  other) const

Get the offset from a tangent plane centered at this point to another point.

This is suitable only for small angles.

Parameters
[in]otherCoordinate to which to compute offset
Returns
pair of Angles: Longitude and Latitude offsets

Definition at line 214 of file SpherePoint.cc.

214  {
215  geom::Angle const alpha1 = this->getLongitude();
216  geom::Angle const delta1 = this->getLatitude();
217  geom::Angle const alpha2 = other.getLongitude();
218  geom::Angle const delta2 = other.getLatitude();
219 
220  // Compute the projection of "other" on a tangent plane centered at this point
221  double const sinDelta1 = std::sin(delta1);
222  double const cosDelta1 = std::cos(delta1);
223  double const sinDelta2 = std::sin(delta2);
224  double const cosDelta2 = std::cos(delta2);
225  double const cosAlphaDiff = std::cos(alpha2 - alpha1);
226  double const sinAlphaDiff = std::sin(alpha2 - alpha1);
227 
228  double const div = cosDelta1 * cosAlphaDiff * cosDelta2 + sinDelta1 * sinDelta2;
229  double const xi = cosDelta1 * sinAlphaDiff / div;
230  double const eta = (cosDelta1 * cosAlphaDiff * sinDelta2 - sinDelta1 * cosDelta2) / div;
231 
232  return std::make_pair(xi * geom::radians, eta * geom::radians);
233 }
A class representing an angle.
Definition: Angle.h:127
T cos(T... args)
T div(T... args)
T make_pair(T... args)
T sin(T... args)

◆ getVector()

sphgeom::UnitVector3d lsst::geom::SpherePoint::getVector ( ) const
noexcept

A unit vector representation of this point.

Returns
a unit vector whose direction corresponds to this point
Exception Safety
Shall not throw exceptions.

Definition at line 124 of file SpherePoint.cc.

124  {
125  return sphgeom::UnitVector3d::fromNormalized(cos(_longitude) * cos(_latitude),
126  sin(_longitude) * cos(_latitude), sin(_latitude));
127 }

◆ hash_value()

std::size_t lsst::geom::SpherePoint::hash_value ( ) const
noexcept

Return a hash of this object.

Definition at line 154 of file SpherePoint.cc.

154  {
155  // Completely arbitrary seed
156  return utils::hashCombine(17, _longitude, _latitude);
157 }
std::size_t hashCombine(std::size_t seed) noexcept
Combine hashes.
Definition: hashCombine.h:35

◆ isFinite()

bool lsst::geom::SpherePoint::isFinite ( ) const
noexcept

true if this point is a well-defined position.

Returns
true if getLongitude(), getLatitude(), and getVector() return finite floating-point values; false if any return NaN or infinity.
Exception Safety
Shall not throw exceptions.

Definition at line 144 of file SpherePoint.cc.

144 { return isfinite(_longitude) && isfinite(_latitude); }

◆ offset()

SpherePoint lsst::geom::SpherePoint::offset ( Angle const &  bearing,
Angle const &  amount 
) const

Return a point offset from this one along a great circle.

For any point A, any angle bearing and any non-negative angle amount, if B = A.offset(bearing, amount)thenA.bearingTo(B) = amountandA.separationTo(B) = amount. Negative values ofamountare supported in the obvious manner: A.offset(bearing, delta) = A.offset(bearing + 180*degrees, -delta)`

Parameters
bearingthe direction in which to move this point, following the conventions described in bearingTo.
amountthe distance by which to move along the great circle defined by bearing
Returns
a new point created by rotating this point. If the new point is at the pole then its longitude will be 0.
Exception Safety
Provides strong exception guarantee.

Definition at line 185 of file SpherePoint.cc.

185  {
186  double const phi = bearing.asRadians();
187 
188  // let v = vector in the direction bearing points (tangent to surface of sphere)
189  // To do the rotation, use rotated() method.
190  // - must provide an axis of rotation: take the cross product r x v to get that axis (pole)
191 
192  auto r = getVector();
193 
194  // Get the vector v:
195  // let u = unit vector lying on a parallel of declination
196  // let w = unit vector along line of longitude = r x u
197  // the vector v must satisfy the following:
198  // r . v = 0
199  // u . v = cos(phi)
200  // w . v = sin(phi)
201 
202  // v is a linear combination of u and w
203  // v = cos(phi)*u + sin(phi)*w
204  sphgeom::Vector3d const u(-sin(_longitude), cos(_longitude), 0.0);
205  auto w = r.cross(u);
206  auto v = cos(phi) * u + sin(phi) * w;
207 
208  // take r x v to get the axis
209  SpherePoint axis = SpherePoint(r.cross(v));
210 
211  return rotated(axis, amount);
212 }
sphgeom::UnitVector3d getVector() const noexcept
A unit vector representation of this point.
Definition: SpherePoint.cc:124
SpherePoint rotated(SpherePoint const &axis, Angle const &amount) const noexcept
Return a point rotated from this one around an axis.
Definition: SpherePoint.cc:178
double w
Definition: CoaddPsf.cc:69

◆ operator sphgeom::LonLat()

lsst::geom::SpherePoint::operator sphgeom::LonLat ( ) const
noexcept

Make SpherePoint implicitly convertible to LonLat.

Exception Safety
Shall not throw exceptions.

Definition at line 118 of file SpherePoint.cc.

118  {
119  return sphgeom::LonLat::fromRadians(getLongitude().asRadians(), getLatitude().asRadians());
120 }
static LonLat fromRadians(double lon, double lat)
Definition: LonLat.h:55

◆ operator!=()

bool lsst::geom::SpherePoint::operator!= ( SpherePoint const &  other) const
noexcept

false if two points represent the same position.

This operator shall always return the logical negation of operator==(); see its documentation for a detailed specification.

Definition at line 152 of file SpherePoint.cc.

152 { return !(*this == other); }

◆ operator=() [1/2]

SpherePoint & lsst::geom::SpherePoint::operator= ( SpherePoint &&  other)
defaultnoexcept

Overwrite this object with the value of another SpherePoint.

As operator=(SpherePoint const&), except that other may be left in an unspecified but valid state.

◆ operator=() [2/2]

SpherePoint & lsst::geom::SpherePoint::operator= ( SpherePoint const &  other)
defaultnoexcept

Overwrite this object with the value of another SpherePoint.

This is the only method that can alter the state of a SpherePoint after its construction, and is provided to allow in-place replacement of SpherePoints where swapping is not possible.

Parameters
otherThe object with which to overwrite this one.
Returns
a reference to this object.
Exception Safety
Shall not throw exceptions.

◆ operator==()

bool lsst::geom::SpherePoint::operator== ( SpherePoint const &  other) const
noexcept

true if two points have the same longitude and latitude.

Parameters
otherthe point to test for equality
Returns
true if this point has exactly the same values of getLongitude() and getLatitude() as other, false otherwise
Exception Safety
Shall not throw exceptions.
Note
Two points at the same pole will compare unequal if they have different longitudes, despite representing the same point on the unit sphere. This is important because the behavior of offset and bearingTo depend on longitude, even at the pole.
Warning
Points whose getLongitude(), getLatitude(), or getVector() methods return NaN shall not compare equal to any point, including themselves. This may break algorithms that assume object equality is reflexive; use isFinite() to filter objects if necessary.

Definition at line 146 of file SpherePoint.cc.

146  {
147  // Deliberate override of Style Guide 5-12
148  // Approximate FP comparison would make object equality intransitive
149  return _longitude == other._longitude && _latitude == other._latitude;
150 }

◆ operator[]()

Angle lsst::geom::SpherePoint::operator[] ( size_t  index) const

Longitude and latitude by index.

Parameters
indexthe index of the spherical coordinate to return. Must be either 0 or 1.
Returns
getLongitude() if index = 0, or getLatitude() if index = 1
Exceptions
pex::exceptions::OutOfRangeErrorThrown if index is neither 0 nor 1.
Exception Safety
Provides strong exception guarantee.

Definition at line 133 of file SpherePoint.cc.

133  {
134  switch (index) {
135  case 0:
136  return getLongitude();
137  case 1:
138  return getLatitude();
139  default:
140  throw pexExcept::OutOfRangeError("Index " + to_string(index) + " must be 0 or 1.");
141  }
142 }
Reports attempts to access elements outside a valid range of indices.
Definition: Runtime.h:89

◆ rotated()

SpherePoint lsst::geom::SpherePoint::rotated ( SpherePoint const &  axis,
Angle const &  amount 
) const
noexcept

Return a point rotated from this one around an axis.

Parameters
axisa point defining the north pole of the rotation axis.
amountthe amount of rotation, where positive values represent right-handed rotations around axis.
Returns
a new point created by rotating this point. If the new point is at the pole then its longitude will be 0.
Exception Safety
Shall not throw exceptions.

Definition at line 178 of file SpherePoint.cc.

178  {
179  auto const rotation = Eigen::AngleAxisd(amount.asRadians(), asEigen(axis.getVector())).matrix();
180  auto const x = asEigen(getVector());
181  auto const xprime = rotation * x;
182  return SpherePoint(sphgeom::Vector3d(xprime[0], xprime[1], xprime[2]));
183 }
Eigen::Vector3d asEigen(sphgeom::Vector3d const &vector) noexcept
Definition: sphgeomUtils.h:36

◆ separation()

Angle lsst::geom::SpherePoint::separation ( SpherePoint const &  other) const
noexcept

Angular distance between two points.

Parameters
otherthe point to which to measure the separation
Returns
the length of the shortest (great circle) arc between the two points. Shall not be negative.
Exception Safety
Shall not throw exceptions.

Definition at line 173 of file SpherePoint.cc.

173  {
174  return haversine(getLongitude() - other.getLongitude(), getLatitude() - other.getLatitude(),
175  cos(getLatitude().asRadians()), cos(other.getLatitude().asRadians()));
176 }

Friends And Related Function Documentation

◆ operator<<()

std::ostream & operator<< ( std::ostream os,
SpherePoint const &  point 
)
related

Print the value of a point to a stream.

The exact details of the string representation are unspecified and subject to change, but the following may be regarded as typical: "(10.543250, +32.830583)".

Parameters
osthe stream to which to print point
pointthe point to print to the stream
Returns
a reference to os
Exceptions
pex::exceptions::std::ostream::failureThrown if an I/O state flag was set that was registered with os.exceptions(). See the documentation of std::ostream for more details.
Exception Safety
Provides basic exception guarantee.

Definition at line 253 of file SpherePoint.cc.

253  {
254  // Can't provide atomic guarantee anyway for I/O, so ok to set ostream states here.
255  auto oldFlags = os.setf(ostream::fixed);
256  // 10 digits of precision for a value in degrees is about 1 milliarcsecond
257  auto oldPrecision = os.precision(10);
258 
259  os << "(" << point.getLongitude().asDegrees() << ", ";
260  os.setf(ostream::showpos);
261  os << point.getLatitude().asDegrees() << ")";
262 
263  os.flags(oldFlags);
264  os.precision(oldPrecision);
265  return os;
266 }
std::ostream * os
Definition: Schema.cc:557
T flags(T... args)
T precision(T... args)
T setf(T... args)

The documentation for this class was generated from the following files: