PCL
Position.h
Go to the documentation of this file.
1 // ____ ______ __
2 // / __ \ / ____// /
3 // / /_/ // / / /
4 // / ____// /___ / /___ PixInsight Class Library
5 // /_/ \____//_____/ PCL 2.6.5
6 // ----------------------------------------------------------------------------
7 // pcl/Position.h - Released 2024-01-13T15:47:58Z
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 
230  ObserverPosition( ObserverPosition&& ) = default;
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 
494  Vector Geometric( EphemerisFile::Handle& H );
495 
510  Vector Geometric( const StarPosition& S );
511 
532  Vector Astrometric( EphemerisFile::Handle& H );
533 
553  Vector Astrometric( const StarPosition& S );
554 
576  Vector Proper( EphemerisFile::Handle& H );
577 
598  Vector Proper( const StarPosition& S );
599 
631  Vector Apparent( EphemerisFile::Handle& H );
632 
663  Vector Apparent( const StarPosition& S );
664 
697  Vector Intermediate( EphemerisFile::Handle& H );
698 
730  Vector Intermediate( const StarPosition& S );
731 
764  void SetObserver( const ObserverPosition& observer );
765 
779  void SetGeocentric();
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 
982  void InitEquinoxBasedParameters();
983 
1001  void InitCIOBasedParameters();
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 
1179  bool CanComputeApparentVisualMagnitude( const EphemerisFile::Handle& H ) const;
1180 
1219  Optional<double> ApparentVisualMagnitude( EphemerisFile::Handle& H );
1220 
1235  static Vector EquatorialToEcliptic( const Vector& q, double se, double ce )
1236  {
1237  // Rx(eps)*q
1238  return Vector( q[0], q[1]*ce + q[2]*se, q[2]*ce - q[1]*se );
1239  }
1240 
1253  static Vector EquatorialToEcliptic( const Vector& q, double eps )
1254  {
1255  double se, ce; SinCos( eps, se, ce );
1256  return EquatorialToEcliptic( q, se, ce );
1257  }
1258 
1273  static DPoint EquatorialToEcliptic( const DPoint& q, double se, double ce )
1274  {
1275  DPoint e;
1276  EquatorialToEcliptic( Vector::FromSpherical( q.x, q.y ), se, ce ).ToSpherical2Pi( e.x, e.y );
1277  return e;
1278  }
1279 
1292  static DPoint EquatorialToEcliptic( const DPoint& q, double eps )
1293  {
1294  double se, ce; SinCos( eps, se, ce );
1295  return EquatorialToEcliptic( q, se, ce );
1296  }
1297 
1312  static Vector EclipticToEquatorial( const Vector& q, double se, double ce )
1313  {
1314  // Rx(eps)*q
1315  return Vector( q[0], q[1]*ce - q[2]*se, q[2]*ce + q[1]*se );
1316  }
1317 
1330  static Vector EclipticToEquatorial( const Vector& q, double eps )
1331  {
1332  double se, ce; SinCos( eps, se, ce );
1333  return EclipticToEquatorial( q, se, ce );
1334  }
1335 
1350  static DPoint EclipticToEquatorial( const DPoint& q, double se, double ce )
1351  {
1352  DPoint e;
1353  EclipticToEquatorial( Vector::FromSpherical( q.x, q.y ), se, ce ).ToSpherical2Pi( e.x, e.y );
1354  return e;
1355  }
1356 
1369  static DPoint EclipticToEquatorial( const DPoint& q, double eps )
1370  {
1371  double se, ce; SinCos( eps, se, ce );
1372  return EclipticToEquatorial( q, se, ce );
1373  }
1374 
1409  {
1410  return Matrix( +0.494055821648, -0.054657353964, -0.445679169947,
1411  -0.872844082054, -0.484928636070, +0.746511167077,
1412  -0.867710446378, -0.198779490637, +0.455593344276 )*q;
1413  }
1414 
1430  {
1431  DPoint g;
1432  ICRSEquatorialToGalactic( Vector::FromSpherical( q.x, q.y ) ).ToSpherical2Pi( g.x, g.y );
1433  return g;
1434  }
1435 
1436 private:
1437 
1438  // TDB
1439  TimePoint m_t;
1440  // TT
1441  TimePoint m_tt;
1442  // UTC
1443  TimePoint m_utc;
1444  // UT1
1445  TimePoint m_ut1;
1446  // TT in Julian centuries since J2000.0.
1447  double m_TT;
1448  // Barycentric ICRS position and velocity of the Earth.
1449  Vector m_Eb, m_Edb;
1450  // Geocentric ICRS position and velocity of the observer, in km and km/day.
1451  Vector m_G, m_Gd;
1452  // Barycentric ICRS position of the Sun.
1453  Vector m_Sb;
1454  // Heliocentric position of the Earth.
1455  Vector m_Eh;
1456  // Distance Earth-Sun.
1457  double m_E;
1458  // Heliocentric position of the observer (au).
1459  Vector m_Oh;
1460  // Distance observer-Sun (au).
1461  double m_O;
1462  // Bias+precession angles.
1463  double m_gamb, m_phib, m_psib, m_epsa;
1464  // Nutation angles.
1465  double m_dpsi, m_deps;
1466  // Position of the Celestial Intermediate Pole (CIP) in GCRS.
1467  double m_X, m_Y;
1468  // CIO locator.
1469  double m_s;
1470  // Combined bias-precession-nutation matrix (NPB).
1471  Matrix m_M, m_Minv;
1472  // Combined bias-precession-nutation matrix (NPB_CIO).
1473  Matrix m_C, m_Cinv;
1474  // Equation of the origins.
1475  double m_EO;
1476  // Earth rotation angle.
1477  double m_ERA;
1478  // Greenwich apparent sidereal time.
1479  double m_GAST;
1480  // Light-travel time in days.
1481  double m_tau = 0;
1482  // Barycentric position.
1483  Vector m_ub;
1484  // True geocentric position.
1485  Vector m_U0;
1486  // Geocentric position.
1487  Vector m_U;
1488  // Astrometric place.
1489  Vector m_u1;
1490  // Proper place.
1491  Vector m_u2;
1492  // Apparent place.
1493  Vector m_u3e;
1494  // Intermediate place.
1495  Vector m_u3i;
1496 
1497  // Handles for calculation of fundamental ephemerides and nutation angles.
1498  AutoPointerCloner<EphemerisFile::Handle> m_TT_TDB, m_HE, m_HS, m_HN;
1499 
1500  // Current observer for calculation of topocentric coordinates.
1502 
1503  // Special case flags.
1504  bool m_isMoon = false, m_isSun = false, m_isStar = false;
1505 
1506  // Whether to account for polar motion (CIP->ITRS) in calculation of
1507  // topocentric positions.
1508  bool m_usePolarMotion = true;
1509 
1510  // Unique identifier of the object whose positions are being calculated.
1511  uint64 m_uniqueObjectId = 0;
1512 
1513  template <class T>
1514  bool Validate( const T& obj )
1515  {
1516  if ( obj.m_uniqueId != m_uniqueObjectId )
1517  {
1518  m_U0 = m_U = m_ub = m_u1 = m_u2 = m_u3e = m_u3i = Vector();
1519  m_tau = 0;
1520  m_isMoon = m_isSun = m_isStar = false;
1521  m_uniqueObjectId = obj.m_uniqueId;
1522  return false;
1523  }
1524  return true;
1525  }
1526 
1527  Vector Deflection();
1528  Vector Aberration();
1529 
1530  static double CIOLocator( double T, double X, double Y );
1531 
1532  /*
1533  * Astronomical constants, IAU 2009/2012 and IERS 2003/2010.
1534  */
1535  constexpr static double au_km = 149597870.7; // astronomical unit (km)
1536  constexpr static double c_km_s = 299792.458; // speed of light (km/s)
1537  constexpr static double c_km_day = c_km_s*86400; // speed of light (km/day)
1538  constexpr static double c_au_day = (c_km_s/au_km)*86400; // speed of light (au/day)
1539  constexpr static double earth_omega = 7.292115e-5; // angular velocity of Earth in radians/s
1540 };
1541 
1542 // ----------------------------------------------------------------------------
1543 
1544 } // pcl
1545 
1546 #endif // __PCL_Position_h
1547 
1548 // ----------------------------------------------------------------------------
1549 // EOF pcl/Position.h - Released 2024-01-13T15:47:58Z
pcl::Position::Observer
ObserverPosition Observer() const
Definition: Position.h:786
pcl::Position::EquatorialToEcliptic
static DPoint EquatorialToEcliptic(const DPoint &q, double eps)
Definition: Position.h:1292
EphemerisFile.h
pcl
PCL root namespace.
Definition: AbstractImage.h:76
pcl::Position::ICRSEquatorialToGalactic
static DPoint ICRSEquatorialToGalactic(const DPoint &q)
Definition: Position.h:1429
pcl::Position::EclipticToEquatorial
static DPoint EclipticToEquatorial(const DPoint &q, double eps)
Definition: Position.h:1369
pcl::Range
constexpr const T & Range(const T &x, const T &a, const T &b) noexcept
Definition: Utility.h:190
pcl::Position::LightTravelTime
double LightTravelTime(EphemerisFile::Handle &H)
Definition: Position.h:472
pcl::StarPosition::muDelta
double muDelta
Proper motion in declination, in mas/year.
Definition: Position.h:88
pcl::Position::TrueDistance
double TrueDistance(EphemerisFile::Handle &H)
Definition: Position.h:442
pcl::Position
Reduction of planetary and stellar positions.
Definition: Position.h:345
pcl::Position::IsPolarMotionEnabled
bool IsPolarMotionEnabled() const
Definition: Position.h:817
pcl::TimePoint::J2000
static TimePoint J2000()
Definition: TimePoint.h:860
pcl::Max
constexpr const T & Max(const T &a, const T &b) noexcept
Definition: Utility.h:119
pcl::GenericPoint
A generic point in the two-dimensional space.
Definition: Point.h:99
pcl::Position::EpsA
double EpsA() const
Definition: Position.h:1139
pcl::GenericMatrix< double >
pcl::Position::EclipticToEquatorial
static Vector EclipticToEquatorial(const Vector &q, double se, double ce)
Definition: Position.h:1312
pcl::Position::EquinoxBiasPrecessionNutationInverseMatrix
Matrix EquinoxBiasPrecessionNutationInverseMatrix()
Definition: Position.h:1022
pcl::Position::TDB
TimePoint TDB() const
Definition: Position.h:847
pcl::StarPosition::StarPosition
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
Matrix.h
pcl::Position::CIP
Vector CIP()
Definition: Position.h:1062
pcl::IsoString
Eight-bit string (ISO/IEC-8859-1 or UTF-8 string)
Definition: String.h:5424
pcl::Position::BarycentricPositionOfEarth
Vector BarycentricPositionOfEarth() const
Definition: Position.h:907
pcl::StarPosition::muAlpha
double muAlpha
Proper motion in right ascension, mas/year * cos( delta ).
Definition: Position.h:87
pcl::Mod
constexpr T Mod(T x, T y) noexcept
Definition: Math.h:887
pcl::StarPosition::StarPosition
StarPosition(const StarPosition &x)
Definition: Position.h:101
pcl::Position::ICRSEquatorialToGalactic
static Vector ICRSEquatorialToGalactic(const Vector &q)
Definition: Position.h:1408
pcl::StarPosition
Positional data of a star.
Definition: Position.h:83
pcl::StarPosition::v
double v
Radial velocity in km/s, positive away from Earth.
Definition: Position.h:90
pcl::EphemerisFile::Handle
Calculation of ephemerides from data stored in XEPH files.
Definition: EphemerisFile.h:1674
pcl::Position::IsTopocentric
bool IsTopocentric() const
Definition: Position.h:797
pcl::Position::CIO
double CIO()
Definition: Position.h:1094
pcl::Position::EnablePolarMotion
void EnablePolarMotion(bool enable=true)
Definition: Position.h:826
pcl::Position::True
Vector True(const StarPosition &S)
Definition: Position.h:429
pcl::Optional< double >
pcl::uint64
unsigned long long uint64
Definition: Defs.h:685
pcl::StarPosition::p
double p
Parallax in arcseconds.
Definition: Position.h:89
pcl::TimePoint
An instant in any timescale.
Definition: TimePoint.h:102
pcl::StarPosition::delta
double delta
ICRS declination in degrees.
Definition: Position.h:86
pcl::Position::Teph
TimePoint Teph() const
Definition: Position.h:860
pcl::SinCos
void SinCos(T x, T &sx, T &cx) noexcept
Definition: Math.h:1030
pcl::Position::EquatorialToEcliptic
static Vector EquatorialToEcliptic(const Vector &q, double se, double ce)
Definition: Position.h:1235
pcl::Position::GAST
double GAST()
Definition: Position.h:1130
pcl::StarPosition::alpha
double alpha
ICRS right ascension in degrees.
Definition: Position.h:85
pcl::Position::True
Vector True(EphemerisFile::Handle &H)
Definition: Position.h:415
Vector
64-bit floating point real vector.
pcl::Position::EO
double EO()
Definition: Position.h:1106
pcl::Position::HeliocentricPositionOfEarth
Vector HeliocentricPositionOfEarth() const
Definition: Position.h:939
AutoPointer.h
pcl::GenericPoint::x
component x
Abscissa (horizontal, or X-axis coordinate).
Definition: Point.h:111
pcl::Position::UTC
TimePoint UTC() const
Definition: Position.h:884
pcl::Position::NutationAngles
DPoint NutationAngles()
Definition: Position.h:1154
pcl::Position::ERA
double ERA()
Definition: Position.h:1118
pcl::Position::EquinoxBiasPrecessionNutationMatrix
Matrix EquinoxBiasPrecessionNutationMatrix()
Definition: Position.h:1009
pcl::Position::EclipticToEquatorial
static DPoint EclipticToEquatorial(const DPoint &q, double se, double ce)
Definition: Position.h:1350
pcl::Position::CIOBiasPrecessionNutationInverseMatrix
Matrix CIOBiasPrecessionNutationInverseMatrix()
Definition: Position.h:1049
pcl::Position::TT
TimePoint TT() const
Definition: Position.h:872
pcl::Position::CIOBiasPrecessionNutationMatrix
Matrix CIOBiasPrecessionNutationMatrix()
Definition: Position.h:1035
pcl::StarPosition::t0
TimePoint t0
Epoch of coordinates.
Definition: Position.h:91
pcl::Position::DisablePolarMotion
void DisablePolarMotion(bool disable=true)
Definition: Position.h:835
pcl::Position::BarycentricVelocityOfEarth
Vector BarycentricVelocityOfEarth() const
Definition: Position.h:918
pcl::Position::EquatorialToEcliptic
static DPoint EquatorialToEcliptic(const DPoint &q, double se, double ce)
Definition: Position.h:1273
pcl::ObserverPosition
Geodetic coordinates of a terrestrial observer.
Definition: Position.h:194
pcl::Position::EclipticToEquatorial
static Vector EclipticToEquatorial(const Vector &q, double eps)
Definition: Position.h:1330
pcl::GenericPoint::y
component y
Ordinate (vertical, or Y-axis coordinate).
Definition: Point.h:112
pcl::Position::BarycentricPositionOfSun
Vector BarycentricPositionOfSun() const
Definition: Position.h:928
pcl::Position::TrueDistance
double TrueDistance(const StarPosition &S)
Definition: Position.h:460
pcl::Position::UT1
TimePoint UT1() const
Definition: Position.h:896
Defs.h
pcl::GenericVector< double >::FromSpherical
static GenericVector FromSpherical(double slon, double clon, double slat, double clat)
Definition: Vector.h:2143
pcl::ObserverPosition::ObserverPosition
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
pcl::GenericVector< double >
pcl::Position::EquatorialToEcliptic
static Vector EquatorialToEcliptic(const Vector &q, double eps)
Definition: Position.h:1253
pcl::Poly
T Poly(T x, C c, int n) noexcept
Definition: Math.h:908
pcl::AutoPointerCloner
A smart pointer able to generate dynamically allocated copies of the objects pointed to by other smar...
Definition: AutoPointer.h:695
pcl::AsRad
constexpr T AsRad(T x) noexcept
Definition: Math.h:1947