PCL
Position.h
Go to the documentation of this file.
1 // ____ ______ __
2 // / __ \ / ____// /
3 // / /_/ // / / /
4 // / ____// /___ / /___ PixInsight Class Library
5 // /_/ \____//_____/ PCL 2.7.0
6 // ----------------------------------------------------------------------------
7 // pcl/Position.h - Released 2024-06-18T15:48:54Z
8 // ----------------------------------------------------------------------------
9 // This file is part of the PixInsight Class Library (PCL).
10 // PCL is a multiplatform C++ framework for development of PixInsight modules.
11 //
12 // Copyright (c) 2003-2024 Pleiades Astrophoto S.L. All Rights Reserved.
13 //
14 // Redistribution and use in both source and binary forms, with or without
15 // modification, is permitted provided that the following conditions are met:
16 //
17 // 1. All redistributions of source code must retain the above copyright
18 // notice, this list of conditions and the following disclaimer.
19 //
20 // 2. All redistributions in binary form must reproduce the above copyright
21 // notice, this list of conditions and the following disclaimer in the
22 // documentation and/or other materials provided with the distribution.
23 //
24 // 3. Neither the names "PixInsight" and "Pleiades Astrophoto", nor the names
25 // of their contributors, may be used to endorse or promote products derived
26 // from this software without specific prior written permission. For written
27 // permission, please contact info@pixinsight.com.
28 //
29 // 4. All products derived from this software, in any form whatsoever, must
30 // reproduce the following acknowledgment in the end-user documentation
31 // and/or other materials provided with the product:
32 //
33 // "This product is based on software from the PixInsight project, developed
34 // by Pleiades Astrophoto and its contributors (https://pixinsight.com/)."
35 //
36 // Alternatively, if that is where third-party acknowledgments normally
37 // appear, this acknowledgment must be reproduced in the product itself.
38 //
39 // THIS SOFTWARE IS PROVIDED BY PLEIADES ASTROPHOTO AND ITS CONTRIBUTORS
40 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
41 // TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL PLEIADES ASTROPHOTO OR ITS
43 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
44 // EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, BUSINESS
45 // INTERRUPTION; PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; AND LOSS OF USE,
46 // DATA OR PROFITS) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
47 // CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
48 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
49 // POSSIBILITY OF SUCH DAMAGE.
50 // ----------------------------------------------------------------------------
51 
52 #ifndef __PCL_Position_h
53 #define __PCL_Position_h
54 
56 
57 #include <pcl/Defs.h>
58 
59 #include <pcl/AutoPointer.h>
60 #include <pcl/EphemerisFile.h>
61 #include <pcl/Matrix.h>
62 
63 namespace pcl
64 {
65 
66 // ----------------------------------------------------------------------------
67 
83 struct PCL_CLASS StarPosition
84 {
85  double alpha = 0;
86  double delta = 0;
87  double muAlpha = 0;
88  double muDelta = 0;
89  double p = 0;
90  double v = 0;
92 
96  StarPosition() = default;
97 
102  : alpha( x.alpha )
103  , delta( x.delta )
104  , muAlpha( x.muAlpha )
105  , muDelta( x.muDelta )
106  , p( x.p )
107  , v( x.v )
108  , t0( x.t0 )
109  {
110  }
111 
115  StarPosition& operator =( const StarPosition& x )
116  {
117  alpha = x.alpha;
118  delta = x.delta;
119  muAlpha = x.muAlpha;
120  muDelta = x.muDelta;
121  p = x.p;
122  v = x.v;
123  t0 = x.t0;
124  return *this;
125  }
126 
159  StarPosition( double ra, double dec,
160  double properMotionRA = 0, double properMotionDec = 0,
161  double parallax = 0,
162  double radialVelocity = 0,
163  TimePoint epoch = TimePoint::J2000() )
164  : alpha( ((ra = Mod( ra, 360.0 )) < 0) ? ra + 360 : ra )
165  , delta( Range( dec, -90.0, +90.0 ) )
166  , muAlpha( properMotionRA )
167  , muDelta( properMotionDec )
168  , p( parallax )
169  , v( radialVelocity )
170  , t0( epoch )
171  {
172  }
173 
174 private:
175 
176  uint64 m_uniqueId = UniqueId();
177 
178  static uint64 UniqueId();
179 
180  friend class PCL_CLASS Position;
181 };
182 
183 // ----------------------------------------------------------------------------
184 
194 struct PCL_CLASS ObserverPosition
195 {
196  double lambda = 0;
197  double phi = 0;
198  double h = 0;
199  double a = ea_eq_radius_IAU2009;
200  double f = ea_flattening_IERS2010;
201  Vector r0 = Vector( 0, 0, 0 );
202  bool cioBased = false;
203 
207  constexpr static double ea_eq_radius_IAU2009 = 6378136.6;
208 
212  constexpr static double ea_flattening_IERS2010 = 1/298.25642;
213 
220  ObserverPosition() = default;
221 
225  ObserverPosition( const ObserverPosition& ) = default;
226 
231 
235  ObserverPosition& operator =( const ObserverPosition& ) = default;
236 
240  ObserverPosition& operator =( ObserverPosition&& ) = default;
241 
280  ObserverPosition( double longitude, double latitude,
281  double height = 0,
282  double equatorialRadius = ea_eq_radius_IAU2009,
283  double flattening = ea_flattening_IERS2010,
284  const Vector& regionalCenter = Vector( 0, 0, 0 ),
285  bool useCIO = false )
286  : lambda( ((longitude = Mod( longitude, 360.0 )) < 0) ? longitude + 360 : longitude )
287  , phi( Range( latitude, -90.0, +90.0 ) )
288  , h( Max( 0.0, height ) )
289  , a( Max( 0.0, equatorialRadius ) )
290  , f( Max( 0.0, flattening ) )
291  , r0( regionalCenter )
292  , cioBased( useCIO )
293  {
294  }
295 };
296 
297 // ----------------------------------------------------------------------------
298 
345 class PCL_CLASS Position
346 {
347 public:
348 
379  Position( TimePoint t, const IsoString& timescale = "TT" );
380 
384  Position( const Position& ) = default;
385 
389  Position( Position&& ) = default;
390 
394  Position& operator =( const Position& ) = default;
395 
399  Position& operator =( Position&& ) = default;
400 
416  {
417  (void)Geometric( H );
418  return m_U0;
419  }
420 
430  {
431  (void)Geometric( S );
432  return m_U0;
433  }
434 
443  {
444  return True( H ).L2Norm();
445  }
446 
460  double TrueDistance( const StarPosition& S )
461  {
462  return True( S ).L2Norm();
463  }
464 
473  {
474  (void)Geometric( H );
475  return m_tau;
476  }
477 
495 
511 
533 
554 
577 
599 
632 
664 
698 
731 
764  void SetObserver( const ObserverPosition& observer );
765 
780 
787  {
788  if ( m_observer )
789  return *m_observer;
790  return ObserverPosition();
791  }
792 
797  bool IsTopocentric() const
798  {
799  return m_observer;
800  }
801 
817  bool IsPolarMotionEnabled() const
818  {
819  return m_usePolarMotion;
820  }
821 
826  void EnablePolarMotion( bool enable = true )
827  {
828  m_usePolarMotion = enable;
829  }
830 
835  void DisablePolarMotion( bool disable = true )
836  {
837  EnablePolarMotion( !disable );
838  }
839 
847  TimePoint TDB() const
848  {
849  return m_t;
850  }
851 
860  TimePoint Teph() const
861  {
862  return m_t;
863  }
864 
872  TimePoint TT() const
873  {
874  return m_tt;
875  }
876 
884  TimePoint UTC() const
885  {
886  return m_utc;
887  }
888 
896  TimePoint UT1() const
897  {
898  return m_ut1;
899  }
900 
908  {
909  return m_Eb;
910  }
911 
919  {
920  return m_Edb;
921  }
922 
929  {
930  return m_Sb;
931  }
932 
940  {
941  return m_Eh;
942  }
943 
983 
1002 
1010  {
1011  InitEquinoxBasedParameters();
1012  return m_M;
1013  }
1014 
1023  {
1024  InitEquinoxBasedParameters();
1025  return m_Minv;
1026  }
1027 
1036  {
1037  InitCIOBasedParameters();
1038  return m_C;
1039  }
1040 
1050  {
1051  InitCIOBasedParameters();
1052  return m_Cinv;
1053  }
1054 
1063  {
1064  InitEquinoxBasedParameters();
1065  return Vector( m_X, m_Y );
1066  }
1067 
1086  Vector CIP_ITRS() const;
1087 
1094  double CIO()
1095  {
1096  InitEquinoxBasedParameters();
1097  return m_s;
1098  }
1099 
1106  double EO()
1107  {
1108  InitEquinoxBasedParameters();
1109  return m_EO;
1110  }
1111 
1118  double ERA()
1119  {
1120  InitEquinoxBasedParameters();
1121  return m_ERA;
1122  }
1123 
1130  double GAST()
1131  {
1132  InitEquinoxBasedParameters();
1133  return m_GAST;
1134  }
1135 
1139  double EpsA() const
1140  {
1141  // Mean obliquity of the ecliptic, IAU 2006 precession model.
1142  if ( m_M.IsEmpty() )
1143  return AsRad( Poly( m_TT, { 84381.406, -46.836769, -0.0001831, 0.00200340, -0.000000576, -0.0000000434 } ) );
1144  return m_epsa;
1145  }
1146 
1155  {
1156  InitEquinoxBasedParameters();
1157  return DPoint( m_dpsi, m_deps );
1158  }
1159 
1167 
1174  double PhaseAngle( const StarPosition& S );
1175 
1200 
1246 
1257 
1269 
1280 
1292 
1319  {
1320  return EquatorialToHorizontal( q.x, q.y );
1321  }
1322 
1335  DPoint EquatorialToHorizontal( double ra, double dec )
1336  {
1337  if ( !IsTopocentric() )
1338  return DPoint( 0 );
1339 
1340  if ( m_observer->cioBased )
1341  InitCIOBasedParameters();
1342  else
1343  InitEquinoxBasedParameters();
1344 
1345  double sh, ch; SinCos( Norm2Pi( (m_observer->cioBased ? m_ERA : m_GAST) - ra + Rad( m_observer->lambda ) ), sh, ch );
1346  double sd, cd; SinCos( dec, sd, cd );
1347  return DPoint( Norm2Pi( ArcTan( -cd*sh, sd*m_cphi - cd*ch*m_sphi ) ),
1348  ArcSin( sd*m_sphi + cd*ch*m_cphi ) );
1349  }
1350 
1365  static Vector EquatorialToEcliptic( const Vector& q, double se, double ce )
1366  {
1367  // Rx(eps)*q
1368  return Vector( q[0], q[1]*ce + q[2]*se, q[2]*ce - q[1]*se );
1369  }
1370 
1383  static Vector EquatorialToEcliptic( const Vector& q, double eps )
1384  {
1385  double se, ce; SinCos( eps, se, ce );
1386  return EquatorialToEcliptic( q, se, ce );
1387  }
1388 
1403  static DPoint EquatorialToEcliptic( const DPoint& q, double se, double ce )
1404  {
1405  DPoint e;
1406  EquatorialToEcliptic( Vector::FromSpherical( q.x, q.y ), se, ce ).ToSpherical2Pi( e.x, e.y );
1407  return e;
1408  }
1409 
1422  static DPoint EquatorialToEcliptic( const DPoint& q, double eps )
1423  {
1424  double se, ce; SinCos( eps, se, ce );
1425  return EquatorialToEcliptic( q, se, ce );
1426  }
1427 
1442  static Vector EclipticToEquatorial( const Vector& q, double se, double ce )
1443  {
1444  // Rx(eps)*q
1445  return Vector( q[0], q[1]*ce - q[2]*se, q[2]*ce + q[1]*se );
1446  }
1447 
1460  static Vector EclipticToEquatorial( const Vector& q, double eps )
1461  {
1462  double se, ce; SinCos( eps, se, ce );
1463  return EclipticToEquatorial( q, se, ce );
1464  }
1465 
1480  static DPoint EclipticToEquatorial( const DPoint& q, double se, double ce )
1481  {
1482  DPoint e;
1483  EclipticToEquatorial( Vector::FromSpherical( q.x, q.y ), se, ce ).ToSpherical2Pi( e.x, e.y );
1484  return e;
1485  }
1486 
1499  static DPoint EclipticToEquatorial( const DPoint& q, double eps )
1500  {
1501  double se, ce; SinCos( eps, se, ce );
1502  return EclipticToEquatorial( q, se, ce );
1503  }
1504 
1539  {
1540  return Matrix( +0.494055821648, -0.054657353964, -0.445679169947,
1541  -0.872844082054, -0.484928636070, +0.746511167077,
1542  -0.867710446378, -0.198779490637, +0.455593344276 )*q;
1543  }
1544 
1560  {
1561  DPoint g;
1562  ICRSEquatorialToGalactic( Vector::FromSpherical( q.x, q.y ) ).ToSpherical2Pi( g.x, g.y );
1563  return g;
1564  }
1565 
1578  {
1579  return Matrix( -0.823971452454, +1.289170419979, -2.918407488771,
1580  -2.840810442223, -1.835975400200, +0.229340705201,
1581  -2.808784424949, +1.654265575150, -3.263314653103 )*g;
1582  }
1583 
1599  {
1600  DPoint q;
1601  GalacticToICRSEquatorial( Vector::FromSpherical( g.x, g.y ) ).ToSpherical2Pi( q.x, q.y );
1602  return q;
1603  }
1604 
1605 private:
1606 
1607  // TDB
1608  TimePoint m_t;
1609  // TT
1610  TimePoint m_tt;
1611  // UTC
1612  TimePoint m_utc;
1613  // UT1
1614  TimePoint m_ut1;
1615  // TT in Julian centuries since J2000.0.
1616  double m_TT;
1617  // Barycentric ICRS position and velocity of the Earth.
1618  Vector m_Eb, m_Edb;
1619  // Geocentric ICRS position and velocity of the observer, in km and km/day.
1620  Vector m_G, m_Gd;
1621  // Barycentric ICRS position of the Sun.
1622  Vector m_Sb;
1623  // Heliocentric position of the Earth.
1624  Vector m_Eh;
1625  // Distance Earth-Sun.
1626  double m_E;
1627  // Heliocentric position of the observer (au).
1628  Vector m_Oh;
1629  // Distance observer-Sun (au).
1630  double m_O;
1631  // Bias+precession angles.
1632  double m_gamb, m_phib, m_psib, m_epsa;
1633  // Nutation angles.
1634  double m_dpsi, m_deps;
1635  // Position of the Celestial Intermediate Pole (CIP) in GCRS.
1636  double m_X, m_Y;
1637  // CIO locator.
1638  double m_s;
1639  // Combined bias-precession-nutation matrix (NPB).
1640  Matrix m_M, m_Minv;
1641  // Combined bias-precession-nutation matrix (NPB_CIO).
1642  Matrix m_C, m_Cinv;
1643  // Equation of the origins.
1644  double m_EO;
1645  // Earth rotation angle.
1646  double m_ERA;
1647  // Greenwich apparent sidereal time.
1648  double m_GAST;
1649  // Light-travel time in days.
1650  double m_tau = 0;
1651  // Barycentric position.
1652  Vector m_ub;
1653  // True geocentric position.
1654  Vector m_U0;
1655  // Geocentric position.
1656  Vector m_U;
1657  // Astrometric place.
1658  Vector m_u1;
1659  // Proper place.
1660  Vector m_u2;
1661  // Apparent place.
1662  Vector m_u3e;
1663  // Intermediate place.
1664  Vector m_u3i;
1665 
1666  // Handles for calculation of fundamental ephemerides and nutation angles.
1667  AutoPointerCloner<EphemerisFile::Handle> m_TT_TDB, m_HE, m_HS, m_HN;
1668 
1669  // Current observer for calculation of topocentric coordinates.
1671  double m_sphi, m_cphi;
1672 
1673  // Special case flags.
1674  bool m_isMoon = false, m_isSun = false, m_isStar = false;
1675 
1676  // Whether to account for polar motion (CIP->ITRS) in calculation of
1677  // topocentric positions.
1678  bool m_usePolarMotion = true;
1679 
1680  // Unique identifier of the object whose positions are being calculated.
1681  uint64 m_uniqueObjectId = 0;
1682 
1683  template <class T>
1684  bool Validate( const T& obj )
1685  {
1686  if ( obj.m_uniqueId != m_uniqueObjectId )
1687  {
1688  m_U0 = m_U = m_ub = m_u1 = m_u2 = m_u3e = m_u3i = Vector();
1689  m_tau = 0;
1690  m_isMoon = m_isSun = m_isStar = false;
1691  m_uniqueObjectId = obj.m_uniqueId;
1692  return false;
1693  }
1694  return true;
1695  }
1696 
1697  Vector Deflection();
1698  Vector Aberration();
1699 
1700  static double CIOLocator( double T, double X, double Y );
1701 
1702  /*
1703  * Astronomical constants, IAU 2009/2012 and IERS 2003/2010.
1704  */
1705  constexpr static double au_km = 149597870.7; // astronomical unit (km)
1706  constexpr static double c_km_s = 299792.458; // speed of light (km/s)
1707  constexpr static double c_km_day = c_km_s*86400; // speed of light (km/day)
1708  constexpr static double c_au_day = (c_km_s/au_km)*86400; // speed of light (au/day)
1709  constexpr static double earth_omega = 7.292115e-5; // angular velocity of Earth in radians/s
1710 };
1711 
1712 // ----------------------------------------------------------------------------
1713 
1714 } // pcl
1715 
1716 #endif // __PCL_Position_h
1717 
1718 // ----------------------------------------------------------------------------
1719 // EOF pcl/Position.h - Released 2024-06-18T15:48:54Z
A smart pointer able to generate dynamically allocated copies of the objects pointed to by other smar...
Definition: AutoPointer.h:696
Calculation of ephemerides from data stored in XEPH files.
Generic dynamic matrix of arbitrary dimensions.
Definition: Matrix.h:123
A generic point in the two-dimensional space.
Definition: Point.h:100
component x
Abscissa (horizontal, or X-axis coordinate).
Definition: Point.h:111
component y
Ordinate (vertical, or Y-axis coordinate).
Definition: Point.h:112
Generic vector of arbitrary length.
Definition: Vector.h:107
static GenericVector FromSpherical(double slon, double clon, double slat, double clat)
Definition: Vector.h:2143
Eight-bit string (ISO/IEC-8859-1 or UTF-8 string)
Definition: String.h:5425
Reduction of planetary and stellar positions.
Definition: Position.h:346
Vector HeliocentricPositionOfEarth() const
Definition: Position.h:939
Optional< double > CometApparentVisualNuclearMagnitude(EphemerisFile::Handle &H)
static DPoint EquatorialToEcliptic(const DPoint &q, double eps)
Definition: Position.h:1422
bool CanComputeApparentVisualMagnitude(const EphemerisFile::Handle &H) const
static Vector EquatorialToEcliptic(const Vector &q, double se, double ce)
Definition: Position.h:1365
double CIO()
Definition: Position.h:1094
double LightTravelTime(EphemerisFile::Handle &H)
Definition: Position.h:472
double GAST()
Definition: Position.h:1130
Position(Position &&)=default
void SetGeocentric()
Vector Astrometric(const StarPosition &S)
Matrix EquinoxBiasPrecessionNutationInverseMatrix()
Definition: Position.h:1022
Vector Geometric(EphemerisFile::Handle &H)
Vector Geometric(const StarPosition &S)
double TrueDistance(const StarPosition &S)
Definition: Position.h:460
TimePoint TT() const
Definition: Position.h:872
double EpsA() const
Definition: Position.h:1139
Vector True(EphemerisFile::Handle &H)
Definition: Position.h:415
static Vector EclipticToEquatorial(const Vector &q, double se, double ce)
Definition: Position.h:1442
static DPoint GalacticToICRSEquatorial(const DPoint &g)
Definition: Position.h:1598
Vector Astrometric(EphemerisFile::Handle &H)
Vector Proper(EphemerisFile::Handle &H)
bool CanComputeCometApparentVisualTotalMagnitude(const EphemerisFile::Handle &H) const
DPoint EquatorialToHorizontal(double ra, double dec)
Definition: Position.h:1335
Vector Proper(const StarPosition &S)
Vector Intermediate(EphemerisFile::Handle &H)
double TrueDistance(EphemerisFile::Handle &H)
Definition: Position.h:442
Position(const Position &)=default
TimePoint Teph() const
Definition: Position.h:860
Vector BarycentricPositionOfSun() const
Definition: Position.h:928
TimePoint TDB() const
Definition: Position.h:847
void InitCIOBasedParameters()
DPoint NutationAngles()
Definition: Position.h:1154
Vector Apparent(const StarPosition &S)
static DPoint EclipticToEquatorial(const DPoint &q, double eps)
Definition: Position.h:1499
static DPoint EquatorialToEcliptic(const DPoint &q, double se, double ce)
Definition: Position.h:1403
static DPoint ICRSEquatorialToGalactic(const DPoint &q)
Definition: Position.h:1559
Vector CIP_ITRS() const
Optional< double > ApparentVisualMagnitude(EphemerisFile::Handle &H)
double ERA()
Definition: Position.h:1118
Position(TimePoint t, const IsoString &timescale="TT")
static DPoint EclipticToEquatorial(const DPoint &q, double se, double ce)
Definition: Position.h:1480
static Vector ICRSEquatorialToGalactic(const Vector &q)
Definition: Position.h:1538
Optional< double > CometApparentVisualTotalMagnitude(EphemerisFile::Handle &H)
Vector Intermediate(const StarPosition &S)
void InitEquinoxBasedParameters()
static Vector EclipticToEquatorial(const Vector &q, double eps)
Definition: Position.h:1460
void EnablePolarMotion(bool enable=true)
Definition: Position.h:826
void DisablePolarMotion(bool disable=true)
Definition: Position.h:835
double PhaseAngle(const StarPosition &S)
double PhaseAngle(EphemerisFile::Handle &H)
void SetObserver(const ObserverPosition &observer)
Vector BarycentricPositionOfEarth() const
Definition: Position.h:907
TimePoint UT1() const
Definition: Position.h:896
ObserverPosition Observer() const
Definition: Position.h:786
Vector Apparent(EphemerisFile::Handle &H)
Vector CIP()
Definition: Position.h:1062
Vector True(const StarPosition &S)
Definition: Position.h:429
Matrix CIOBiasPrecessionNutationInverseMatrix()
Definition: Position.h:1049
static Vector GalacticToICRSEquatorial(const Vector &g)
Definition: Position.h:1577
double EO()
Definition: Position.h:1106
bool CanComputeCometApparentVisualNuclearMagnitude(const EphemerisFile::Handle &H) const
DPoint EquatorialToHorizontal(const DPoint &q)
Definition: Position.h:1318
Matrix CIOBiasPrecessionNutationMatrix()
Definition: Position.h:1035
static Vector EquatorialToEcliptic(const Vector &q, double eps)
Definition: Position.h:1383
Vector BarycentricVelocityOfEarth() const
Definition: Position.h:918
bool IsTopocentric() const
Definition: Position.h:797
Matrix EquinoxBiasPrecessionNutationMatrix()
Definition: Position.h:1009
bool IsPolarMotionEnabled() const
Definition: Position.h:817
TimePoint UTC() const
Definition: Position.h:884
An instant in any timescale.
Definition: TimePoint.h:103
static TimePoint J2000()
Definition: TimePoint.h:893
64-bit floating point real vector.
void SinCos(T x, T &sx, T &cx) noexcept
Definition: Math.h:1030
constexpr T AsRad(T x) noexcept
Definition: Math.h:1947
constexpr T ArcTan(T x) noexcept
Definition: Math.h:526
constexpr T Norm2Pi(T x) noexcept
Definition: Math.h:2004
constexpr T ArcSin(T x) noexcept
Definition: Math.h:514
constexpr T Rad(T x) noexcept
Definition: Math.h:1894
T Poly(T x, C c, int n) noexcept
Definition: Math.h:908
constexpr T Mod(T x, T y) noexcept
Definition: Math.h:887
unsigned long long uint64
Definition: Defs.h:682
constexpr const T & Range(const T &x, const T &a, const T &b) noexcept
Definition: Utility.h:190
constexpr const T & Max(const T &a, const T &b) noexcept
Definition: Utility.h:119
PCL root namespace.
Definition: AbstractImage.h:77
Geodetic coordinates of a terrestrial observer.
Definition: Position.h:195
ObserverPosition(ObserverPosition &&)=default
ObserverPosition()=default
ObserverPosition(const ObserverPosition &)=default
ObserverPosition(double longitude, double latitude, double height=0, double equatorialRadius=ea_eq_radius_IAU2009, double flattening=ea_flattening_IERS2010, const Vector &regionalCenter=Vector(0, 0, 0), bool useCIO=false)
Definition: Position.h:280
Positional data of a star.
Definition: Position.h:84
double v
Radial velocity in km/s, positive away from Earth.
Definition: Position.h:90
StarPosition()=default
double muAlpha
Proper motion in right ascension, mas/year * cos( delta ).
Definition: Position.h:87
TimePoint t0
Epoch of coordinates.
Definition: Position.h:91
double delta
ICRS declination in degrees.
Definition: Position.h:86
StarPosition(const StarPosition &x)
Definition: Position.h:101
double muDelta
Proper motion in declination, in mas/year.
Definition: Position.h:88
StarPosition(double ra, double dec, double properMotionRA=0, double properMotionDec=0, double parallax=0, double radialVelocity=0, TimePoint epoch=TimePoint::J2000())
Definition: Position.h:159
double alpha
ICRS right ascension in degrees.
Definition: Position.h:85
double p
Parallax in arcseconds.
Definition: Position.h:89