Kstars

ksnumbers.h
1 /*
2  SPDX-FileCopyrightText: 2002-2005 Jason Harris <[email protected]>
3  SPDX-FileCopyrightText: 2004-2005 Pablo de Vicente <[email protected]>
4 
5  SPDX-License-Identifier: GPL-2.0-or-later
6 */
7 
8 #pragma once
9 
10 #include "cachingdms.h"
11 
12 #if __GNUC__ > 5
13 #pragma GCC diagnostic push
14 #pragma GCC diagnostic ignored "-Wignored-attributes"
15 #endif
16 #if __GNUC__ > 6
17 #pragma GCC diagnostic ignored "-Wint-in-bool-context"
18 #endif
19 #include <Eigen/Core>
20 #if __GNUC__ > 5
21 #pragma GCC diagnostic pop
22 #endif
23 
24 #define NUTTERMS 63
25 
26 /** @class KSNumbers
27  *
28  *There are several time-dependent values used in position calculations,
29  *that are not specific to an object. This class provides
30  *storage for these values, and methods for calculating them for a given date.
31  *The numbers include solar data like the true/mean solar anomalies
32  *and longitudes, the longitude of the Earth's perihelion, the
33  *eccentricity of Earth's orbit, the
34  *constant of aberration, the obliquity of the Ecliptic, the effects of
35  *Nutation (delta Obliquity and delta Ecliptic longitude),
36  *the Julian Day/Century/Millenium, and arrays for computing the precession.
37  *@short Store several time-dependent astronomical quantities.
38  *@author Jason Harris
39  *@version 1.0
40  */
41 
42 class KSNumbers
43 {
44  public:
45  /**
46  * Constructor.
47  * @param jd Julian Day for which the new instance is initialized
48  */
49  explicit KSNumbers(long double jd);
50  ~KSNumbers() = default;
51 
52  /**
53  * @return the current Obliquity (the angle of inclination between
54  * the celestial equator and the ecliptic)
55  */
56  inline const CachingDms *obliquity() const { return &Obliquity; }
57 
58  /** @return the constant of aberration (20.49 arcsec). */
59  inline dms constAberr() const { return K; }
60 
61  /** @return the mean solar anomaly. */
62  inline dms sunMeanAnomaly() const { return M; }
63 
64  /** @return the mean solar longitude. */
65  inline dms sunMeanLongitude() const { return L; }
66 
67  /** @return the true solar anomaly. */
68  inline dms sunTrueAnomaly() const { return M0; }
69 
70  /** @return the true solar longitude. */
71  inline CachingDms sunTrueLongitude() const { return L0; }
72 
73  /** @return the longitude of the Earth's perihelion point. */
74  inline CachingDms earthPerihelionLongitude() const { return P; }
75 
76  /** @return eccentricity of Earth's orbit.*/
77  inline double earthEccentricity() const { return e; }
78 
79  /** @return the change in obliquity due to the nutation of
80  * Earth's orbit. Value is in degrees */
81  inline double dObliq() const { return deltaObliquity; }
82 
83  /** @return the change in Ecliptic Longitude due to nutation.
84  * Value is in degrees. */
85  inline double dEcLong() const { return deltaEcLong; }
86 
87  /** @return Julian centuries since J2000*/
88  inline double julianCenturies() const { return T; }
89 
90  /** @return Julian Day*/
91  inline long double julianDay() const { return days; }
92 
93  /** @return Julian Millenia since J2000*/
94  inline double julianMillenia() const { return jm; }
95 
96  /** @return element of P1 precession array at position (i1, i2) */
97  inline double p1(int i1, int i2) const { return P1(i1, i2); }
98 
99  /** @return element of P2 precession array at position (i1, i2) */
100  inline double p2(int i1, int i2) const { return P2(i1, i2); }
101 
102  /** @return element of P1B precession array at position (i1, i2) */
103  inline double p1b(int i1, int i2) const { return P1B(i1, i2); }
104 
105  /** @return element of P2B precession array at position (i1, i2) */
106  inline double p2b(int i1, int i2) const { return P2B(i1, i2); }
107 
108  /** @return the precession matrix directly **/
109  inline const Eigen::Matrix3d &p2() const { return P1; }
110  inline const Eigen::Matrix3d &p1() const { return P2; }
111  inline const Eigen::Matrix3d &p1b() const { return P1B; }
112  inline const Eigen::Matrix3d &p2b() const { return P2B; }
113 
114  /**
115  * @short compute constant values that need to be computed only once per instance of the application
116  */
117  void computeConstantValues();
118 
119  /**
120  * @short update all values for the date given as an argument.
121  * @param jd the Julian date for which to compute values
122  */
123  void updateValues(long double jd);
124 
125  /**
126  * @return the JD for which these values hold (i.e. the last updated JD)
127  */
128  inline long double getJD() const { return days; }
129 
130  inline double vEarth(int i) const { return vearth[i]; }
131 
132  private:
133  CachingDms Obliquity, L0, P;
134  dms K, L, LM, M, M0, O, D, MM, F;
135  dms XP, YP, ZP, XB, YB, ZB;
136  double CX, SX, CY, SY, CZ, SZ;
137  double CXB, SXB, CYB, SYB, CZB, SZB;
138  Eigen::Matrix3d P1, P2, P1B, P2B;
139  double deltaObliquity, deltaEcLong;
140  double e, T;
141  long double days; // JD for which the last update was called
142  double jm;
143  static const int arguments[NUTTERMS][5];
144  static const int amp[NUTTERMS][4];
145  double vearth[3];
146 };
double p2b(int i1, int i2) const
Definition: ksnumbers.h:106
double julianMillenia() const
Definition: ksnumbers.h:94
double p1b(int i1, int i2) const
Definition: ksnumbers.h:103
a dms subclass that caches its sine and cosine values every time the angle is changed.
Definition: cachingdms.h:18
CachingDms sunTrueLongitude() const
Definition: ksnumbers.h:71
void computeConstantValues()
compute constant values that need to be computed only once per instance of the application
Definition: ksnumbers.cpp:111
KSNumbers(long double jd)
Constructor.
Definition: ksnumbers.cpp:93
long double getJD() const
Definition: ksnumbers.h:128
const Eigen::Matrix3d & p2() const
Definition: ksnumbers.h:109
Store several time-dependent astronomical quantities.
Definition: ksnumbers.h:42
dms sunTrueAnomaly() const
Definition: ksnumbers.h:68
void updateValues(long double jd)
update all values for the date given as an argument.
Definition: ksnumbers.cpp:155
double dObliq() const
Definition: ksnumbers.h:81
double earthEccentricity() const
Definition: ksnumbers.h:77
long double julianDay() const
Definition: ksnumbers.h:91
double dEcLong() const
Definition: ksnumbers.h:85
double p2(int i1, int i2) const
Definition: ksnumbers.h:100
An angle, stored as degrees, but expressible in many ways.
Definition: dms.h:37
double p1(int i1, int i2) const
Definition: ksnumbers.h:97
const CachingDms * obliquity() const
Definition: ksnumbers.h:56
dms sunMeanLongitude() const
Definition: ksnumbers.h:65
double julianCenturies() const
Definition: ksnumbers.h:88
CachingDms earthPerihelionLongitude() const
Definition: ksnumbers.h:74
dms constAberr() const
Definition: ksnumbers.h:59
dms sunMeanAnomaly() const
Definition: ksnumbers.h:62
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Sun Oct 1 2023 04:02:40 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.