astronoby 0.8.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/CHANGELOG.md +159 -0
  4. data/README.md +12 -5
  5. data/UPGRADING.md +109 -0
  6. data/docs/README.md +109 -16
  7. data/docs/angles.md +2 -1
  8. data/docs/configuration.md +20 -17
  9. data/docs/coordinates.md +73 -13
  10. data/docs/deep_sky_bodies.md +101 -0
  11. data/docs/ephem.md +6 -3
  12. data/docs/equinoxes_solstices_times.md +4 -3
  13. data/docs/glossary.md +97 -1
  14. data/docs/iers.md +40 -0
  15. data/docs/instant.md +21 -16
  16. data/docs/lunar_eclipses.md +93 -0
  17. data/docs/lunar_observation.md +87 -0
  18. data/docs/moon_phases.md +5 -2
  19. data/docs/observer.md +21 -7
  20. data/docs/planetary_phenomena.md +78 -0
  21. data/docs/reference_frames.md +193 -35
  22. data/docs/rise_transit_set_times.md +10 -8
  23. data/docs/{celestial_bodies.md → solar_system_bodies.md} +27 -5
  24. data/docs/twilight_times.md +25 -21
  25. data/lib/astronoby/angle.rb +69 -4
  26. data/lib/astronoby/angles/dms.rb +18 -1
  27. data/lib/astronoby/angles/hms.rb +14 -1
  28. data/lib/astronoby/angular_velocity.rb +97 -0
  29. data/lib/astronoby/bodies/deep_sky_object.rb +49 -0
  30. data/lib/astronoby/bodies/deep_sky_object_position.rb +142 -0
  31. data/lib/astronoby/bodies/earth.rb +9 -42
  32. data/lib/astronoby/bodies/jupiter.rb +10 -0
  33. data/lib/astronoby/bodies/mars.rb +10 -0
  34. data/lib/astronoby/bodies/mercury.rb +10 -0
  35. data/lib/astronoby/bodies/moon.rb +162 -15
  36. data/lib/astronoby/bodies/neptune.rb +10 -0
  37. data/lib/astronoby/bodies/saturn.rb +10 -0
  38. data/lib/astronoby/bodies/solar_system_body.rb +257 -53
  39. data/lib/astronoby/bodies/sun.rb +79 -4
  40. data/lib/astronoby/bodies/uranus.rb +10 -0
  41. data/lib/astronoby/bodies/venus.rb +10 -0
  42. data/lib/astronoby/body.rb +6 -0
  43. data/lib/astronoby/cache.rb +1 -0
  44. data/lib/astronoby/center.rb +84 -0
  45. data/lib/astronoby/constants.rb +7 -2
  46. data/lib/astronoby/constellation.rb +9 -1
  47. data/lib/astronoby/coordinates/ecliptic.rb +10 -1
  48. data/lib/astronoby/coordinates/equatorial.rb +66 -13
  49. data/lib/astronoby/coordinates/geodetic.rb +102 -0
  50. data/lib/astronoby/coordinates/horizontal.rb +13 -1
  51. data/lib/astronoby/distance.rb +41 -0
  52. data/lib/astronoby/duration.rb +116 -0
  53. data/lib/astronoby/earth_rotation.rb +70 -0
  54. data/lib/astronoby/equinox_solstice.rb +31 -8
  55. data/lib/astronoby/errors.rb +11 -0
  56. data/lib/astronoby/events/conjunction.rb +51 -0
  57. data/lib/astronoby/events/conjunction_opposition_calculator.rb +84 -0
  58. data/lib/astronoby/events/eclipse_phase.rb +27 -0
  59. data/lib/astronoby/events/extremum_calculator.rb +80 -0
  60. data/lib/astronoby/events/extremum_event.rb +15 -0
  61. data/lib/astronoby/events/greatest_elongation.rb +58 -0
  62. data/lib/astronoby/events/greatest_elongation_calculator.rb +56 -0
  63. data/lib/astronoby/events/lunar_eclipse.rb +99 -0
  64. data/lib/astronoby/events/lunar_eclipse_calculator.rb +285 -0
  65. data/lib/astronoby/events/opposition.rb +19 -0
  66. data/lib/astronoby/events/rise_transit_set_calculator.rb +9 -6
  67. data/lib/astronoby/events/rise_transit_set_event.rb +12 -1
  68. data/lib/astronoby/events/rise_transit_set_events.rb +12 -1
  69. data/lib/astronoby/events/twilight_calculator.rb +1 -1
  70. data/lib/astronoby/events/twilight_event.rb +24 -6
  71. data/lib/astronoby/events/twilight_events.rb +26 -6
  72. data/lib/astronoby/extremum_finder.rb +148 -0
  73. data/lib/astronoby/instant.rb +35 -9
  74. data/lib/astronoby/libration.rb +25 -0
  75. data/lib/astronoby/mean_obliquity.rb +8 -0
  76. data/lib/astronoby/moon_orientation_ephemeris.rb +69 -0
  77. data/lib/astronoby/moon_physical_ephemeris.rb +263 -0
  78. data/lib/astronoby/nutation.rb +10 -20
  79. data/lib/astronoby/observer.rb +67 -49
  80. data/lib/astronoby/orientation.rb +107 -0
  81. data/lib/astronoby/position.rb +16 -0
  82. data/lib/astronoby/precession.rb +61 -60
  83. data/lib/astronoby/reference_frame.rb +73 -7
  84. data/lib/astronoby/reference_frames/apparent.rb +25 -16
  85. data/lib/astronoby/reference_frames/astrometric.rb +14 -1
  86. data/lib/astronoby/reference_frames/geometric.rb +7 -1
  87. data/lib/astronoby/reference_frames/mean_of_date.rb +13 -1
  88. data/lib/astronoby/reference_frames/teme.rb +153 -0
  89. data/lib/astronoby/reference_frames/topocentric.rb +31 -5
  90. data/lib/astronoby/refraction.rb +26 -5
  91. data/lib/astronoby/root_finder.rb +83 -0
  92. data/lib/astronoby/rotation.rb +49 -0
  93. data/lib/astronoby/stellar_propagation.rb +162 -0
  94. data/lib/astronoby/time/greenwich_apparent_sidereal_time.rb +31 -0
  95. data/lib/astronoby/time/greenwich_mean_sidereal_time.rb +101 -0
  96. data/lib/astronoby/time/greenwich_sidereal_time.rb +41 -58
  97. data/lib/astronoby/time/local_apparent_sidereal_time.rb +63 -0
  98. data/lib/astronoby/time/local_mean_sidereal_time.rb +63 -0
  99. data/lib/astronoby/time/local_sidereal_time.rb +59 -26
  100. data/lib/astronoby/time/sidereal_time.rb +64 -0
  101. data/lib/astronoby/true_obliquity.rb +4 -0
  102. data/lib/astronoby/util/maths.rb +8 -0
  103. data/lib/astronoby/util/time.rb +10 -467
  104. data/lib/astronoby/vector.rb +10 -0
  105. data/lib/astronoby/velocity.rb +44 -0
  106. data/lib/astronoby/version.rb +1 -1
  107. data/lib/astronoby.rb +33 -0
  108. metadata +58 -6
data/docs/coordinates.md CHANGED
@@ -1,13 +1,15 @@
1
1
  # Coordinates
2
2
 
3
- Astronoby provides three different types of coordinates:
3
+ Astronoby provides four types of coordinates:
4
4
 
5
- * Equatorial
6
- * Ecliptic
7
- * Horizontal
5
+ - Equatorial
6
+ - Ecliptic
7
+ - Horizontal
8
+ - Geodetic
8
9
 
9
10
  Equatorial and ecliptic coordinates are available for each [reference frame],
10
- while horizontal coordinates are only available for a topocentric position.
11
+ horizontal coordinates are only available for a topocentric position, and
12
+ geodetic coordinates are used for Earth-surface positions (ECEF ↔ WGS-84).
11
13
 
12
14
  ## Equatorial
13
15
 
@@ -36,7 +38,7 @@ saturn = Astronoby::Saturn.new(ephem: ephem, instant: instant)
36
38
  equatorial = saturn.apparent.equatorial
37
39
 
38
40
  equatorial.right_ascension.str(:hms)
39
- # => "20h 45m 2.6702s"
41
+ # => "20h 45m 2.6681s"
40
42
  ```
41
43
 
42
44
  You can learn more about angles on the [Angle page].
@@ -49,7 +51,7 @@ is at -90°.
49
51
 
50
52
  ```rb
51
53
  equatorial.declination.str(:dms)
52
- # => "-18° 46′ 16.1226″"
54
+ # => "-18° 46′ 16.0931″"
53
55
  ```
54
56
 
55
57
  ### Hour angle
@@ -63,7 +65,7 @@ time. By convention, the hour angle is usually displayed in hours.
63
65
  longitude = Astronoby::Angle.from_degrees(2)
64
66
 
65
67
  equatorial.compute_hour_angle(longitude: longitude, time: time).str(:hms)
66
- # => "23h 27m 54.9585s"
68
+ # => "23h 27m 54.1924s"
67
69
  ```
68
70
 
69
71
  ## Ecliptic
@@ -101,7 +103,7 @@ saturn = Astronoby::Saturn.new(ephem: ephem, instant: instant)
101
103
  ecliptic = saturn.apparent.ecliptic
102
104
 
103
105
  ecliptic.latitude.str(:dms)
104
- # => "-0° 41′ 27.5439″"
106
+ # => "-0° 41′ 27.5077″"
105
107
  ```
106
108
 
107
109
  ### Longitude
@@ -111,7 +113,7 @@ ecliptic towards the north (positive) or south (negative) ecliptic pole.
111
113
 
112
114
  ```rb
113
115
  ecliptic.longitude.str(:dms)
114
- # => "+308° 38′ 33.1744″"
116
+ # => "+308° 38′ 33.1535″"
115
117
  ```
116
118
 
117
119
  ## Horizontal
@@ -142,7 +144,7 @@ saturn = Astronoby::Saturn.new(ephem: ephem, instant: instant)
142
144
  horizontal = saturn.observed_by(observer).horizontal
143
145
 
144
146
  horizontal.altitude.str(:dms)
145
- # => "+28° 46′ 39.5994″"
147
+ # => "+28° 46′ 38.3398″"
146
148
  ```
147
149
 
148
150
  ### Azimuth
@@ -152,16 +154,74 @@ eastward.
152
154
 
153
155
  ```rb
154
156
  horizontal.azimuth.str(:dms)
155
- # => "+171° 19′ 50.5798″"
157
+ # => "+171° 19′ 38.2567″"
156
158
  ```
157
159
 
160
+ ## Geodetic
161
+
162
+ Geodetic coordinates describe a position on or above the Earth's surface using
163
+ the [WGS-84] reference ellipsoid, the same system used by GPS. They have three
164
+ attributes:
165
+
166
+ ### Latitude
167
+
168
+ The angle from the equator to the point on the ellipsoid surface, from +90°
169
+ (North Pole) to -90° (South Pole).
170
+
171
+ ### Longitude
172
+
173
+ The angle from the Greenwich meridian, from +180° to -180°, with positive
174
+ angles eastward.
175
+
176
+ ### Elevation
177
+
178
+ The distance above (or below) the WGS-84 ellipsoid surface.
179
+
180
+ ### From ECEF
181
+
182
+ Geodetic coordinates can be derived from Earth-Centered Earth-Fixed (ECEF)
183
+ Cartesian coordinates using `Astronoby::Coordinates::Geodetic.from_ecef`. This
184
+ is particularly useful for satellite tracking, where a propagator produces ECEF
185
+ positions via `Astronoby::Teme#to_ecef`:
186
+
187
+ ```rb
188
+ teme = Astronoby::Teme.new(
189
+ position: Astronoby::Distance.vector_from_meters(
190
+ [5_094_180.16, 6_127_644.66, 6_380_344.53]
191
+ ),
192
+ velocity: Astronoby::Velocity.vector_from_mps(
193
+ [-4746.13, 785.82, 5531.93]
194
+ ),
195
+ instant: instant
196
+ )
197
+
198
+ geodetic = teme.to_ecef.geodetic
199
+
200
+ geodetic.latitude.str(:dms)
201
+ # => "+38° 48′ 3.3038″"
202
+
203
+ geodetic.longitude.str(:dms)
204
+ # => "+97° 27′ 6.7374″"
205
+
206
+ geodetic.elevation.km.round
207
+ # => 3838
208
+ ```
209
+
210
+ The conversion uses Bowring's iterative method, which converges in 2-3
211
+ iterations for typical satellite altitudes.
212
+
213
+ The forward direction (geodetic → ECEF) is handled by
214
+ [`Astronoby::Observer#geocentric_position`][Observer page].
215
+
216
+ [WGS-84]: https://en.wikipedia.org/wiki/World_Geodetic_System
158
217
  [reference frame]: reference_frames.md
159
218
  [Wikipedia]: https://en.wikipedia.org/wiki/Equatorial_coordinate_system
160
219
  [Angle page]: angles.md
161
220
  [topocentric position]: reference_frames.md#topocentric
162
221
 
163
222
  ## See also
223
+
164
224
  - [Reference Frames](reference_frames.md) - for coordinate system details
165
225
  - [Angles](angles.md) - for working with angular measurements
166
226
  - [Observer](observer.md) - for location setup
167
- - [Celestial Bodies](celestial_bodies.md) - for object positions
227
+ - [Solar System Bodies](solar_system_bodies.md) - for object positions
@@ -0,0 +1,101 @@
1
+ # Deep-sky Bodies
2
+
3
+ Deep-sky objects represent celestial object that are not part of the Solar
4
+ System, like stars, nebulae, clusters, galaxies. They are not affected by any
5
+ body of the Solar System.
6
+
7
+ Because we know billions of there objects, it is impossible for Astronoby to
8
+ store a comprehensive catalogue. Therefore, it is up to the developer to build
9
+ the object they need, based on equatorial coordinates from official catalogues
10
+ at J2000 epoch. The [SIMBAD Astronomical Database] is an example of database
11
+ where such coordinates can be found.
12
+
13
+ Astronoby makes the difference between the body and the position.
14
+ `Astronoby::DeepSkyObject` represent the body in itself, defined by fixed
15
+ coordinates. It can also be support proper motion parameters, also given from
16
+ official catalogues, which provides a bit more precision.
17
+
18
+ ```rb
19
+ vega_j2000 = Astronoby::Coordinates::Equatorial.new(
20
+ right_ascension: Astronoby::Angle.from_hms(18, 36, 56.33635),
21
+ declination: Astronoby::Angle.from_dms(38, 47, 1.2802),
22
+ epoch: Astronoby::JulianDate::J2000
23
+ )
24
+
25
+ vega = Astronoby::DeepSkyObject.new(equatorial_coordinates: vega_j2000)
26
+
27
+ vega_with_proper_motion = Astronoby::DeepSkyObject.new(
28
+ equatorial_coordinates: vega_j2000,
29
+ proper_motion_ra: Astronoby::AngularVelocity
30
+ .from_milliarcseconds_per_year(200.94),
31
+ proper_motion_dec: Astronoby::AngularVelocity
32
+ .from_milliarcseconds_per_year(286.23),
33
+ parallax: Astronoby::Angle.from_degree_arcseconds(130.23 / 1000.0),
34
+ radial_velocity: Astronoby::Velocity.from_kilometers_per_second(-13.5)
35
+ )
36
+ ```
37
+
38
+ From a `DeepSkyObject` instance, it is possible to instantiate the position
39
+ of the body at a given instant. If given the optional `ephem` parameter,
40
+ precision will increase as some astronomical corrections will be
41
+ applied.
42
+
43
+ A `DeepSkyPosition` object exposes `astrometric`, `apparent` and `topocentric`
44
+ reference frames.
45
+
46
+ ```rb
47
+ time = Time.utc(2025, 10, 1)
48
+ instant = Astronoby::Instant.from_time(time)
49
+
50
+ ephem = Astronoby::Ephem.load("inpop19a.bsp")
51
+
52
+ vega
53
+ .at(instant)
54
+ .apparent
55
+ .equatorial
56
+ .right_ascension
57
+ .str(:hms)
58
+ # => "18h 37m 48.2804s"
59
+
60
+ vega_with_proper_motion
61
+ .at(instant, ephem: ephem)
62
+ .apparent
63
+ .equatorial
64
+ .right_ascension
65
+ .str(:hms)
66
+ # => "18h 37m 48.706s"
67
+ ```
68
+
69
+ You can learn more about [ephemerides] and [reference frames].
70
+
71
+ A deep-sky body object can also be used in calculators.
72
+
73
+ ```rb
74
+ observer = Astronoby::Observer.new(
75
+ latitude: Astronoby::Angle.from_degrees(51.5072),
76
+ longitude: Astronoby::Angle.from_degrees(-0.1276)
77
+ )
78
+ date = Date.new(2025, 10, 1)
79
+
80
+ body = Astronoby::DeepSkyObject.new(
81
+ equatorial_coordinates: Astronoby::Coordinates::Equatorial.new(
82
+ right_ascension: Astronoby::Angle.from_hms(6, 45, 8.917),
83
+ declination: Astronoby::Angle.from_dms(-16, 42, 58.02)
84
+ )
85
+ )
86
+
87
+ calculator = Astronoby::RiseTransitSetCalculator.new(
88
+ body: body,
89
+ observer: observer,
90
+ ephem: ephem
91
+ )
92
+
93
+ event = calculator.event_on(date)
94
+
95
+ event.rising_time
96
+ # => 2025-10-01 01:31:25 UTC
97
+ ```
98
+
99
+ [ephemerides]: ephem.md
100
+ [reference frames]: reference_frames.md
101
+ [SIMBAD Astronomical Database]: https://simbad.u-strasbg.fr/simbad/
data/docs/ephem.md CHANGED
@@ -17,8 +17,9 @@ providing the filename.
17
17
  ### Manually
18
18
 
19
19
  Ephemerides are available for download from:
20
- * the JPL public FTP interface: https://ssd.jpl.nasa.gov/ftp/eph/planets/bsp/
21
- * the INPOP releases page of the IMCCE: https://www.imcce.fr/inpop
20
+
21
+ - the JPL public FTP interface: https://ssd.jpl.nasa.gov/ftp/eph/planets/bsp/
22
+ - the INPOP releases page of the IMCCE: https://www.imcce.fr/inpop
22
23
 
23
24
  You can download any `.bsp` file. For the moment, Astronoby only supports the
24
25
  planets of the Solar System, and the Sun and the Moon, so you need to
@@ -48,6 +49,7 @@ ephem = Astronoby::Ephem.load("tmp/de421.bsp")
48
49
 
49
50
  JPL produces many different kernels over the years, with different accuracy and
50
51
  ranges of supported years. Here are some that we recommend to begin with:
52
+
51
53
  - `de421.bsp`: from 1900 to 2050, 17 MB
52
54
  - `de440s.bsp`: from 1849 to 2150, 32 MB
53
55
  - `inpop19a.bsp`: from 1900 to 2100, 22 MB
@@ -79,7 +81,8 @@ the target `399`.
79
81
  [IMCCE]: https://www.imcce.fr
80
82
 
81
83
  ## See also
82
- - [Celestial Bodies](celestial_bodies.md) - for using ephemeris data
84
+
85
+ - [Solar System Bodies](solar_system_bodies.md) - for using ephemeris data
83
86
  - [Reference Frames](reference_frames.md) - for coordinate calculations
84
87
  - [Observer](observer.md) - for location-based calculations
85
88
  - [Configuration](configuration.md) - for performance tuning
@@ -15,16 +15,17 @@ Astronoby::EquinoxSolstice.march_equinox(2025, ephem)
15
15
  # => 2025-03-20 09:01:29 UTC
16
16
 
17
17
  Astronoby::EquinoxSolstice.june_solstice(2025, ephem)
18
- # => 2025-06-21 02:42:19 UTC
18
+ # => 2025-06-21 02:42:16 UTC
19
19
 
20
20
  Astronoby::EquinoxSolstice.september_equinox(2025, ephem)
21
- # => 2025-09-22 18:19:22 UTC
21
+ # => 2025-09-22 18:19:21 UTC
22
22
 
23
23
  Astronoby::EquinoxSolstice.december_solstice(2025, ephem)
24
- # => 2025-12-21 15:03:03 UTC
24
+ # => 2025-12-21 15:03:05 UTC
25
25
  ```
26
26
 
27
27
  ## See also
28
+
28
29
  - [Twilight Times](twilight_times.md) - for seasonal sun events
29
30
  - [Moon Phases](moon_phases.md) - for lunar events
30
31
  - [Ephemerides](ephem.md) - for data sources
data/docs/glossary.md CHANGED
@@ -5,130 +5,223 @@ This glossary defines key astronomical and technical terms used throughout the A
5
5
  ## Astronomical Terms
6
6
 
7
7
  ### **Aberration**
8
+
8
9
  The apparent displacement of a celestial object due to the finite speed of light and the motion of the observer. In Astronoby, this is automatically corrected in apparent reference frames.
9
10
 
10
11
  ### **Altitude**
12
+
11
13
  The angular distance of a celestial object above the observer's local horizon, measured in degrees from 0° (horizon) to 90° (zenith).
12
14
 
13
15
  ### **Apparent Position**
16
+
14
17
  The position of a celestial object as it appears in the sky, corrected for light-time, aberration, and other effects. This is what you actually see when looking through a telescope.
15
18
 
16
19
  ### **Arc Second**
20
+
17
21
  A unit of angular measurement equal to 1/3600th of a degree. Often used to describe the precision of astronomical calculations.
18
22
 
19
23
  ### **Azimuth**
24
+
20
25
  The angular distance around the horizon from north, measured clockwise in degrees. North is 0°, east is 90°, south is 180°, and west is 270°.
21
26
 
22
27
  ### **Barycentre**
28
+
23
29
  The centre of mass of a system of bodies. In the Solar System, this is the point around which all planets orbit, which is usually close to but not exactly at the Sun's centre.
24
30
 
25
31
  ### **Celestial Equator**
32
+
26
33
  The projection of Earth's equator onto the celestial sphere. It's the reference plane for equatorial coordinates.
27
34
 
28
35
  ### **Celestial Sphere**
36
+
29
37
  An imaginary sphere surrounding Earth, on which all celestial objects appear to be located. Used as a reference system for astronomical coordinates.
30
38
 
31
39
  ### **Constellation**
40
+
32
41
  A region of the sky containing a group of stars that form a recognizable pattern. Astronoby can determine which constellation a celestial body appears to be in.
33
42
 
34
43
  ### **Declination**
44
+
35
45
  The angular distance north or south of the celestial equator, measured in degrees. Positive values are north, negative values are south.
36
46
 
37
47
  ### **Ecliptic**
48
+
38
49
  The apparent path of the Sun across the celestial sphere throughout the year. It's the plane of Earth's orbit around the Sun.
39
50
 
40
51
  ### **Ephemeris**
52
+
41
53
  A table or file containing the calculated positions of celestial objects at specific times. Astronoby uses ephemeris files from JPL and IMCCE for high-precision calculations.
42
54
 
43
55
  ### **Equinox**
56
+
44
57
  The two times each year when the Sun crosses the celestial equator, making day and night approximately equal in length. The March (vernal) and September (autumnal) equinoxes.
45
58
 
46
59
  ### **Geocentric**
60
+
47
61
  As seen from the centre of Earth. Geocentric coordinates are useful for calculations but don't account for an observer's specific location.
48
62
 
49
63
  ### **Horizon**
64
+
50
65
  The apparent boundary between Earth and sky as seen by an observer. The local horizon depends on the observer's location and elevation.
51
66
 
52
67
  ### **Illuminated Fraction**
68
+
53
69
  The portion of a celestial body's disk that appears illuminated as seen from Earth. For the Moon, this varies from 0 (new moon) to 1 (full moon).
54
70
 
55
71
  ### **Julian Date**
72
+
56
73
  A continuous count of days since January 1, 4713 BCE. Used in astronomy for precise time measurements and calculations.
57
74
 
58
75
  ### **Light-Time Correction**
76
+
59
77
  The adjustment made to account for the time it takes light to travel from a celestial object to Earth. Important for accurate position calculations.
60
78
 
61
79
  ### **Magnitude**
80
+
62
81
  A measure of a celestial object's brightness. Lower numbers indicate brighter objects (e.g., -4 is brighter than +2). Apparent magnitude is as seen from Earth, absolute magnitude is intrinsic brightness.
63
82
 
64
83
  ### **Meridian**
84
+
65
85
  An imaginary line passing through the observer's zenith and the north and south celestial poles. Objects transit (cross) the meridian when they reach their highest point in the sky.
66
86
 
67
87
  ### **Nutation**
88
+
68
89
  Small periodic variations in the orientation of Earth's rotation axis, caused by gravitational forces from the Sun and Moon.
69
90
 
70
91
  ### **Obliquity**
92
+
71
93
  The angle between Earth's equatorial plane and the ecliptic plane. Currently about 23.4° and slowly decreasing.
72
94
 
73
95
  ### **Parallax**
96
+
74
97
  The apparent shift in position of a nearby object when viewed from different locations. Important for calculating distances to nearby stars.
75
98
 
76
99
  ### **Phase Angle**
100
+
77
101
  The angle between the Sun, a celestial object, and Earth. For planets, this determines how much of the disk is illuminated.
78
102
 
79
103
  ### **Precession**
104
+
80
105
  The slow, continuous change in the orientation of Earth's rotation axis, causing the positions of the equinoxes to shift over time.
81
106
 
82
107
  ### **Refraction**
108
+
83
109
  The bending of light as it passes through Earth's atmosphere, causing celestial objects to appear slightly higher in the sky than they actually are.
84
110
 
85
111
  ### **Right Ascension**
112
+
86
113
  The angular distance eastward along the celestial equator from the vernal equinox, measured in hours (0-24h) or degrees (0-360°).
87
114
 
88
115
  ### **Solstice**
116
+
89
117
  The two times each year when the Sun reaches its northernmost (June) or southernmost (December) position relative to the celestial equator.
90
118
 
91
119
  ### **Topocentric**
120
+
92
121
  As seen from a specific location on Earth's surface. Topocentric positions account for the observer's latitude, longitude, and elevation.
93
122
 
123
+ ### **TEME (True Equator, Mean Equinox)**
124
+
125
+ The reference frame used by the SGP4/SDP4 satellite orbit propagators. It shares the true equator with the apparent frame but uses the mean equinox (tracked by GMST) instead of the true equinox (tracked by GAST).
126
+
94
127
  ### **Transit**
128
+
95
129
  The moment when a celestial object crosses the observer's meridian, reaching its highest point in the sky for that day.
96
130
 
97
131
  ### **Twilight**
132
+
98
133
  The period before sunrise and after sunset when the sky is partially illuminated by scattered sunlight. Civil, nautical, and astronomical twilight have different definitions based on the Sun's position below the horizon.
99
134
 
100
135
  ### **Zenith**
136
+
101
137
  The point directly above an observer on Earth, at an altitude of 90°.
102
138
 
103
139
  ## Technical Terms
104
140
 
105
141
  ### **API (Application Programming Interface)**
142
+
106
143
  The set of methods and classes that programmers use to interact with the Astronoby library.
107
144
 
145
+ ### **Body**
146
+
147
+ A catalog definition that can position itself at an instant, returning a Position. Solar system bodies (the classes themselves, e.g. `Astronoby::Saturn`) and deep-sky objects (`Astronoby::DeepSkyObject` instances) both fulfil this role.
148
+
108
149
  ### **Cache**
150
+
109
151
  A temporary storage system that stores frequently used calculation results to improve performance.
110
152
 
153
+ ### **Centre**
154
+
155
+ The point a reference frame is relative to, modelled by the `Astronoby::Center` value object: barycentric (Solar System barycentre), geocentric (Earth's centre), or topocentric (a specific observer's location).
156
+
111
157
  ### **Coordinate System**
158
+
112
159
  A system for specifying the position of objects in space. Astronoby supports equatorial, ecliptic, and horizontal coordinate systems.
113
160
 
114
161
  ### **Ephemeris File**
162
+
115
163
  A binary file (usually with .bsp extension) containing orbital data for Solar System bodies. These files are produced by JPL and IMCCE.
116
164
 
117
165
  ### **Floating-Point Precision**
166
+
118
167
  The accuracy of decimal number calculations. Higher precision values in Astronoby provide more accurate results but may be slower.
119
168
 
169
+ ### **BCRS (Barycentric Celestial Reference System)**
170
+
171
+ A coordinate system centered on the Solar System barycentre with axes aligned to the ICRS. In Astronoby, this corresponds to the geometric reference frame.
172
+
173
+ ### **ECEF (Earth-Centered Earth-Fixed)**
174
+
175
+ A Cartesian coordinate system that rotates with the Earth. Equivalent to ITRS. In Astronoby, observer positions are expressed in ECEF.
176
+
177
+ ### **Equation of the Equinoxes**
178
+
179
+ The difference between Greenwich Apparent Sidereal Time (GAST) and Greenwich Mean Sidereal Time (GMST), equal to the nutation in longitude projected onto the equator (Δψ cos ε₀). It defines the angular offset between the mean and true equinoxes.
180
+
181
+ ### **GAST (Greenwich Apparent Sidereal Time)**
182
+
183
+ The hour angle of the true vernal equinox at the Greenwich meridian. Equal to GMST plus the equation of the equinoxes. Used to rotate observer positions from ECEF into the true-equinox celestial frame.
184
+
185
+ ### **GCRS (Geocentric Celestial Reference System)**
186
+
187
+ A coordinate system centered on the Earth's centre with axes aligned to the ICRS. In Astronoby, this corresponds to the astrometric reference frame.
188
+
189
+ ### **GMST (Greenwich Mean Sidereal Time)**
190
+
191
+ The hour angle of the mean vernal equinox at the Greenwich meridian. It measures Earth's rotation relative to the mean equinox, without nutation corrections. Used in the TEME ↔ ECEF conversion.
192
+
193
+ ### **ICRS (International Celestial Reference System)**
194
+
195
+ The standard celestial reference system adopted by the IAU. Its axes are defined by the positions of extragalactic radio sources and are practically fixed in space. JPL ephemeris data is given in ICRS-aligned coordinates.
196
+
197
+ ### **ITRS (International Terrestrial Reference System)**
198
+
199
+ The standard Earth-fixed reference system, also known as ECEF (Earth-Centered Earth-Fixed). Observer positions in Astronoby are expressed in ITRS before being rotated into the celestial frame.
200
+
201
+ ### **Position**
202
+
203
+ A target resolved at a specific instant, exposing the reference frame chain (astrometric, apparent, topocentric, ...) for a Body. Solar system body instances and `Astronoby::DeepSkyObjectPosition` instances fulfil this role.
204
+
120
205
  ### **Reference Frame**
121
- A coordinate system used to specify positions. Astronoby provides geometric, astrometric, mean of date, apparent, and topocentric reference frames.
206
+
207
+ A coordinate system used to specify positions. Astronoby provides geometric, astrometric, mean of date, apparent, and topocentric reference frames for celestial bodies, plus TEME for satellite tracking. See [Reference Frames](reference_frames.md) for how they map to IAU/IERS standard systems.
208
+
209
+ ### **WGS-84 (World Geodetic System 1984)**
210
+
211
+ The geodetic reference system used by GPS and Astronoby for specifying observer latitude, longitude, and elevation. Observer coordinates are converted from WGS-84 geodetic to ITRS geocentric Cartesian internally.
122
212
 
123
213
  ### **SPICE**
214
+
124
215
  A NASA toolkit for computing positions and orientations of Solar System bodies. Astronoby uses SPICE binary kernels (.bsp files) for ephemeris data.
125
216
 
126
217
  ### **UTC (Coordinated Universal Time)**
218
+
127
219
  The primary time standard used worldwide. All astronomical calculations in Astronoby are based on UTC.
128
220
 
129
221
  ## Units and Measurements
130
222
 
131
223
  ### **Angular Units**
224
+
132
225
  - **Degree (°)**: 1/360th of a circle
133
226
  - **Arc Minute (′)**: 1/60th of a degree
134
227
  - **Arc Second (″)**: 1/60th of an arc minute
@@ -136,16 +229,19 @@ The primary time standard used worldwide. All astronomical calculations in Astro
136
229
  - **Radian**: 180/π degrees (≈57.3°)
137
230
 
138
231
  ### **Distance Units**
232
+
139
233
  - **Astronomical Unit (AU)**: The average distance between Earth and Sun (≈149.6 million km)
140
234
  - **Kilometre (km)**: Standard metric unit for distances
141
235
  - **Metre (m)**: Standard metric unit for elevations
142
236
 
143
237
  ### **Time Units**
238
+
144
239
  - **Julian Day**: Continuous day count since 4713 BCE
145
240
  - **Terrestrial Time (TT)**: Astronomical time scale used for calculations
146
241
  - **UTC**: Coordinated Universal Time, the standard for civil time
147
242
 
148
243
  ## See also
244
+
149
245
  - [Quick Start Guide](README.md) - for getting started
150
246
  - [Coordinates](coordinates.md) - for coordinate systems
151
247
  - [Reference Frames](reference_frames.md) - for position calculations
data/docs/iers.md ADDED
@@ -0,0 +1,40 @@
1
+ # IERS Data
2
+
3
+ Astronoby relies on the [`iers`](https://github.com/rhannequin/iers) gem for
4
+ access to data published by the [International Earth Rotation and Reference
5
+ Systems Service (IERS)][IERS]. This data is used for:
6
+
7
+ - **Delta T (TT - UT1)**: the difference between Terrestrial Time and Universal
8
+ Time, used when converting between UTC and the internal TT time scale (see
9
+ [Instant](instant.md))
10
+ - **Greenwich Mean Sidereal Time (GMST)**: computed via the Earth Rotation Angle
11
+ (ERA) based expression from the [IERS Conventions (2010)]
12
+
13
+ ## Data coverage
14
+
15
+ The `iers` gem ships with bundled IERS data files that work out of the box
16
+ with no network access required. The bundled data covers dates roughly from
17
+ 1800 to early 2027.
18
+
19
+ - **Before 1800**: Delta T is not available; Astronoby returns 0.
20
+ - **After the end of bundled data**: Astronoby uses the last known Delta T
21
+ value, which remains a reasonable approximation for dates in the near future.
22
+
23
+ ## Updating data
24
+
25
+ The bundled data can be refreshed to extend coverage into the future:
26
+
27
+ ```rb
28
+ IERS::Data.update!
29
+ ```
30
+
31
+ This downloads the latest IERS finals data and stores it in the gem's cache
32
+ directory. Updated data is used automatically on subsequent calculations.
33
+
34
+ ## See also
35
+
36
+ - [Instant](instant.md) - for time scales and Delta T
37
+ - [Configuration](configuration.md) - for performance settings
38
+
39
+ [IERS]: https://www.iers.org
40
+ [IERS Conventions (2010)]: https://www.iers.org/IERS/EN/Publications/TechnicalNotes/tn36.html