astronoby 0.4.0 → 0.5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3c65785b0c459ba8add86fcceb906205caa79a80f47b7f33c0b7ee008173fd14
4
- data.tar.gz: 66478c6055d84e34f560490f225ae3e3d5020972e729b37e8f6f0a6566ae173e
3
+ metadata.gz: 43ef390a6ab6a498edbf148b2af44c906daf73ff9ba61b5aafeadd828fb550e4
4
+ data.tar.gz: b2cf0743676aa49f95f24c62b3d5d759553014bc52114260a71ecedfb9e6c1cb
5
5
  SHA512:
6
- metadata.gz: 4bae651aabaec62d258a768952eb3cd830d99639acf33f02b9f0ab6fd2eeff8215d9a30087a5818736b777c1a86344918f98f33f987f65829a8712cb20477c55
7
- data.tar.gz: 401659e2d49599246ad2ea1a455a6d60b9797c49e730cacf8a614f4235929263c9318644373a96ea496969fcb814cc93144a8dbfffd0a0318e1628500bb1c8e8
6
+ metadata.gz: 052bfebf4ddaf6ef3f24883fec090a831d38a9e4124dd5f561d6b1dd7074b6385502396edddd5496ab6066ff93acab4f220ec3aaa244ad0638c0b65fbaace55f
7
+ data.tar.gz: fe37ac2714328893b068ba958e37a3b057a76ddfa1b299a35f22be005687d3168d20e98ebe571db519bd6cf69227cc0f0dc4c0889dd9ca5bb9d1abb2b1ee550d
data/CHANGELOG.md CHANGED
@@ -1,5 +1,65 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.5.0 - 2024-06-11
4
+
5
+ _If you are upgrading: please see [UPGRADING.md]._
6
+
7
+ [UPGRADING.md]: https://github.com/rhannequin/astronoby/blob/main/UPGRADING.md
8
+
9
+ ### Features
10
+
11
+ * Make `Sun#mean_anomaly` public ([#72])
12
+ * Moon ecliptic coordinates ([#73])
13
+ * Moon apparent geocentric equatorial coordinates ([#75])
14
+ * Moon horizontal coordinates ([#76])
15
+ * Assume Moon's equatorial coordinates are geocentric ([#77])
16
+ * Use observer object for geocentric parallax ([#79])
17
+ * Moon's phase angle and illuminated fraction ([#80])
18
+ * Monthly Moon phases ([#82])
19
+ * Rationalize negative degree angles ([#83])
20
+ * Factorize Moon phases periodic terms ([#85])
21
+ * Introduce observation events for Moon ([#86])
22
+
23
+ [#72]: https://github.com/rhannequin/astronoby/pull/72
24
+ [#73]: https://github.com/rhannequin/astronoby/pull/73
25
+ [#75]: https://github.com/rhannequin/astronoby/pull/75
26
+ [#76]: https://github.com/rhannequin/astronoby/pull/76
27
+ [#77]: https://github.com/rhannequin/astronoby/pull/77
28
+ [#79]: https://github.com/rhannequin/astronoby/pull/79
29
+ [#80]: https://github.com/rhannequin/astronoby/pull/80
30
+ [#82]: https://github.com/rhannequin/astronoby/pull/82
31
+ [#83]: https://github.com/rhannequin/astronoby/pull/83
32
+ [#85]: https://github.com/rhannequin/astronoby/pull/85
33
+ [#86]: https://github.com/rhannequin/astronoby/pull/86
34
+
35
+ ### Improvements
36
+
37
+ * Create FUNDING.yml ([#70])
38
+ * Bump standard from 1.35.1 to 1.36.0 ([#71])
39
+ * Bump rexml from 3.2.6 to 3.2.8 ([#74])
40
+ * Expand the number of tested Ruby versions ([#84])
41
+ * Add Ruby 3.1.6 and 3.3.2 coverage ([#88])
42
+ * Improve and update documentation ([#87])
43
+ * Update UPGRADING.md ([#89])
44
+
45
+ [#70]: https://github.com/rhannequin/astronoby/pull/70
46
+ [#71]: https://github.com/rhannequin/astronoby/pull/71
47
+ [#74]: https://github.com/rhannequin/astronoby/pull/74
48
+ [#84]: https://github.com/rhannequin/astronoby/pull/84
49
+ [#88]: https://github.com/rhannequin/astronoby/pull/88
50
+ [#87]: https://github.com/rhannequin/astronoby/pull/87
51
+ [#89]: https://github.com/rhannequin/astronoby/pull/89
52
+
53
+ ### Backward-incompatible changes
54
+
55
+ * Use Observer in Horizontal coordinates ([#69])
56
+ * Introduce `Astronoby::Distance` value object ([#78])
57
+
58
+ [#69]: https://github.com/rhannequin/astronoby/pull/69
59
+ [#78]: https://github.com/rhannequin/astronoby/pull/78
60
+
61
+ **Full Changelog**: https://github.com/rhannequin/astronoby/compare/v0.4.0...v0.5.0
62
+
3
63
  ## 0.4.0 - 2024-04-29
4
64
 
5
65
  _If you are upgrading: please see [UPGRADING.md]._
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- astronoby (0.4.0)
4
+ astronoby (0.5.0)
5
5
  matrix (~> 0.4.2)
6
6
  rake (~> 13.0)
7
7
  rspec (~> 3.0)
@@ -11,19 +11,20 @@ GEM
11
11
  specs:
12
12
  ast (2.4.2)
13
13
  diff-lcs (1.5.1)
14
- json (2.7.1)
14
+ json (2.7.2)
15
15
  language_server-protocol (3.17.0.3)
16
16
  lint_roller (1.1.0)
17
17
  matrix (0.4.2)
18
18
  parallel (1.24.0)
19
- parser (3.3.0.5)
19
+ parser (3.3.1.0)
20
20
  ast (~> 2.4.1)
21
21
  racc
22
22
  racc (1.7.3)
23
23
  rainbow (3.1.1)
24
24
  rake (13.2.1)
25
- regexp_parser (2.9.0)
26
- rexml (3.2.6)
25
+ regexp_parser (2.9.1)
26
+ rexml (3.2.8)
27
+ strscan (>= 3.0.9)
27
28
  rspec (3.13.0)
28
29
  rspec-core (~> 3.13.0)
29
30
  rspec-expectations (~> 3.13.0)
@@ -37,7 +38,7 @@ GEM
37
38
  diff-lcs (>= 1.2.0, < 2.0)
38
39
  rspec-support (~> 3.13.0)
39
40
  rspec-support (3.13.1)
40
- rubocop (1.62.1)
41
+ rubocop (1.63.5)
41
42
  json (~> 2.3)
42
43
  language_server-protocol (>= 3.17.0)
43
44
  parallel (~> 1.10)
@@ -48,24 +49,25 @@ GEM
48
49
  rubocop-ast (>= 1.31.1, < 2.0)
49
50
  ruby-progressbar (~> 1.7)
50
51
  unicode-display_width (>= 2.4.0, < 3.0)
51
- rubocop-ast (1.31.2)
52
- parser (>= 3.3.0.4)
53
- rubocop-performance (1.20.2)
52
+ rubocop-ast (1.31.3)
53
+ parser (>= 3.3.1.0)
54
+ rubocop-performance (1.21.0)
54
55
  rubocop (>= 1.48.1, < 2.0)
55
- rubocop-ast (>= 1.30.0, < 2.0)
56
+ rubocop-ast (>= 1.31.1, < 2.0)
56
57
  ruby-progressbar (1.13.0)
57
- standard (1.35.1)
58
+ standard (1.36.0)
58
59
  language_server-protocol (~> 3.17.0.2)
59
60
  lint_roller (~> 1.0)
60
- rubocop (~> 1.62.0)
61
+ rubocop (~> 1.63.0)
61
62
  standard-custom (~> 1.0.0)
62
- standard-performance (~> 1.3)
63
+ standard-performance (~> 1.4)
63
64
  standard-custom (1.0.2)
64
65
  lint_roller (~> 1.0)
65
66
  rubocop (~> 1.50)
66
- standard-performance (1.3.1)
67
+ standard-performance (1.4.0)
67
68
  lint_roller (~> 1.1)
68
- rubocop-performance (~> 1.20.2)
69
+ rubocop-performance (~> 1.21.0)
70
+ strscan (3.1.0)
69
71
  unicode-display_width (2.5.0)
70
72
 
71
73
  PLATFORMS
data/README.md CHANGED
@@ -11,6 +11,27 @@ The main reference is:
11
11
  - _Practical Astronomy with your Calculator or Spreadsheet_ by Peter
12
12
  Duffet-Smith and Jonathan Zwart
13
13
 
14
+ ## Content
15
+ - [Installation](#installation)
16
+ - [Usage](#usage)
17
+ - [Angle manipulation](#angle-manipulation)
18
+ - [Coordinates conversion](#coordinates-conversion)
19
+ - [Sun](#sun)
20
+ - [Sun's location in the sky](#suns-location-in-the-sky)
21
+ - [Sunrise and sunset times and azimuths](#sunrise-and-sunset-times-and-azimuths)
22
+ - [Twilight times](#twilight-times)
23
+ - [Solstice and Equinox times](#solstice-and-equinox-times)
24
+ - [Moon](#moon)
25
+ - [Moon's location in the sky](#moons-location-in-the-sky)
26
+ - [Moon's current attributes](#moons-current-attributes)
27
+ - [Moon's phases of the month](#moons-phases-of-the-month)
28
+ - [Moonrise and moonset times and azimuths](#moonrise-and-moonset-times-and-azimuths)
29
+ - [Precision](#precision)
30
+ - [Development](#development)
31
+ - [Contributing](#contributing)
32
+ - [License](#license)
33
+ - [Code of Conduct](#code-of-conduct)
34
+
14
35
  ## Installation
15
36
 
16
37
  Install the gem and add to the application's Gemfile by executing:
@@ -46,9 +67,35 @@ angle.cos
46
67
  # => 1.0
47
68
  ```
48
69
 
70
+ ### Distance manipulation
71
+
72
+ ```rb
73
+ distance1 = Astronoby::Distance.from_astronomical_units(1)
74
+ distance2 = Astronoby::Distance.from_kilometers(149_597_870.7)
75
+ distance3 = Astronoby::Distance.from_meters(300)
76
+
77
+ distance1 == distance2
78
+ # => true
79
+
80
+ distance1 > distance3
81
+ # => true
82
+
83
+ distance =
84
+ Astronoby::Distance.from_m(300) +
85
+ Astronoby::Distance.from_km(3)
86
+
87
+ distance.km
88
+ # => 3.3
89
+ ```
90
+
49
91
  ### Coordinates conversion
50
92
 
51
93
  ```rb
94
+ observer = Astronoby::Observer.new(
95
+ latitude: Astronoby::Angle.from_degrees(38),
96
+ longitude: Astronoby::Angle.from_degrees(-78)
97
+ )
98
+
52
99
  equatorial = Astronoby::Coordinates::Equatorial.new(
53
100
  right_ascension: Astronoby::Angle.from_hms(17, 43, 54),
54
101
  declination: Astronoby::Angle.from_dms(-22, 10, 0)
@@ -56,8 +103,7 @@ equatorial = Astronoby::Coordinates::Equatorial.new(
56
103
 
57
104
  horizontal = equatorial.to_horizontal(
58
105
  time: Time.new(2016, 1, 21, 21, 30, 0, "-05:00"),
59
- latitude: Astronoby::Angle.from_degrees(38),
60
- longitude: Astronoby::Angle.from_degrees(-78)
106
+ observer: observer
61
107
  )
62
108
 
63
109
  horizontal.altitude.str(:dms)
@@ -67,19 +113,22 @@ horizontal.azimuth.str(:dms)
67
113
  # => "+341° 33′ 21.587″"
68
114
  ```
69
115
 
70
- ### Sun's location in the sky
116
+ ### Sun
117
+
118
+ #### Sun's location in the sky
71
119
 
72
120
  ```rb
73
121
  time = Time.utc(2023, 2, 17, 11, 0, 0)
74
122
 
75
- latitude = Astronoby::Angle.from_degrees(48.8566)
76
- longitude = Astronoby::Angle.from_degrees(2.3522)
123
+ observer = Astronoby::Observer.new(
124
+ latitude: Astronoby::Angle.from_degrees(48.8566),
125
+ longitude: Astronoby::Angle.from_degrees(2.3522)
126
+ )
77
127
 
78
128
  sun = Astronoby::Sun.new(time: time)
79
129
 
80
130
  horizontal_coordinates = sun.horizontal_coordinates(
81
- latitude: latitude,
82
- longitude: longitude
131
+ observer: observer
83
132
  )
84
133
 
85
134
  horizontal_coordinates.altitude.degrees
@@ -89,7 +138,7 @@ horizontal_coordinates.altitude.str(:dms)
89
138
  # => "+27° 30′ 0.2966″"
90
139
  ```
91
140
 
92
- ### Sunrise and sunset times and azimuths
141
+ #### Sunrise and sunset times and azimuths
93
142
 
94
143
  ```rb
95
144
  time = Time.new(2015, 2, 5)
@@ -104,22 +153,22 @@ observation_events.rising_time
104
153
  # => 2015-02-05 12:12:59 UTC
105
154
 
106
155
  observation_events.rising_azimuth.str(:dms)
107
- # => "+109° 4643.145″"
156
+ # => "+109° 2934.3674″"
108
157
 
109
158
  observation_events.transit_time
110
159
  # => 2015-02-05 17:25:59 UTC
111
160
 
112
161
  observation_events.transit_altitude.str(:dms)
113
- # => "+36° 8′ 15.7638″"
162
+ # => "+36° 8′ 15.8197″"
114
163
 
115
164
  observation_events.setting_time
116
165
  # => 2015-02-05 22:39:27 UTC
117
166
 
118
167
  observation_events.setting_azimuth.str(:dms)
119
- # => "+250° 2333.614″"
168
+ # => "+250° 4042.8609″"
120
169
  ```
121
170
 
122
- ### Twilight times
171
+ #### Twilight times
123
172
 
124
173
  ```rb
125
174
  time = Time.new(2024, 1, 1)
@@ -161,6 +210,92 @@ Astronoby::EquinoxSolstice.june_solstice(year)
161
210
  # => 2024-06-20 20:50:18 UTC
162
211
  ```
163
212
 
213
+ ### Moon
214
+
215
+ #### Moon's location in the sky
216
+
217
+ ```rb
218
+ time = Time.utc(2023, 2, 17, 11, 0, 0)
219
+
220
+ observer = Astronoby::Observer.new(
221
+ latitude: Astronoby::Angle.from_degrees(48.8566),
222
+ longitude: Astronoby::Angle.from_degrees(2.3522)
223
+ )
224
+
225
+ moon = Astronoby::Moon.new(time: time)
226
+
227
+ horizontal_coordinates = moon.horizontal_coordinates(
228
+ observer: observer
229
+ )
230
+
231
+ horizontal_coordinates.altitude.degrees
232
+ # => 10.277834691708053
233
+
234
+ horizontal_coordinates.altitude.str(:dms)
235
+ # => "+10° 16′ 40.2048″"
236
+ ```
237
+
238
+ #### Moon's current attributes
239
+
240
+ ```rb
241
+ time = Time.utc(2024, 6, 1, 10, 0, 0)
242
+ moon = Astronoby::Moon.new(time: time)
243
+
244
+ moon.illuminated_fraction.round(2)
245
+ # => 0.31
246
+
247
+ moon.distance.km.round
248
+ # => 368409
249
+
250
+ moon.phase_angle.degrees.round
251
+ # => 112
252
+ ```
253
+
254
+ #### Moon's phases of the month
255
+
256
+ ```rb
257
+ june_phases = Astronoby::Moon.monthly_phase_events(
258
+ year: 2024,
259
+ month: 6
260
+ )
261
+
262
+ june_phases.each { puts "#{_1.phase}: #{_1.time}" }
263
+ # new_moon: 2024-06-06 12:37:41 UTC
264
+ # first_quarter: 2024-06-14 05:18:28 UTC
265
+ # full_moon: 2024-06-22 01:07:53 UTC
266
+ # last_quarter: 2024-06-28 21:53:25 UTC
267
+ ```
268
+
269
+ #### Moonrise and moonset times and azimuths
270
+
271
+ ```rb
272
+ time = Time.utc(2024, 6, 1, 10, 0, 0)
273
+ observer = Astronoby::Observer.new(
274
+ latitude: Astronoby::Angle.from_degrees(48.8566),
275
+ longitude: Astronoby::Angle.from_degrees(2.3522)
276
+ )
277
+ moon = Astronoby::Moon.new(time: time)
278
+ observation_events = moon.observation_events(observer: observer)
279
+
280
+ observation_events.rising_time
281
+ # => 2024-06-01 00:35:36 UTC
282
+
283
+ observation_events.rising_azimuth.str(:dms)
284
+ # => "+93° 7′ 43.2347″"
285
+
286
+ observation_events.transit_time
287
+ # => 2024-06-01 02:42:43 UTC
288
+
289
+ observation_events.transit_altitude.str(:dms)
290
+ # => "+26° 59′ 30.9915″"
291
+
292
+ observation_events.setting_time
293
+ # => 2024-06-01 16:02:26 UTC
294
+
295
+ observation_events.setting_azimuth.str(:dms)
296
+ # => "+273° 29′ 30.0954″"
297
+ ```
298
+
164
299
  ## Precision
165
300
 
166
301
  The current precision for the Sun's apparent location in the sky, compared
data/UPGRADING.md CHANGED
@@ -7,6 +7,54 @@ changes to it as long as a major version has not been released.
7
7
  If you are already using Astronoby and wish to follow the changes to its
8
8
  public API, please read the upgrading notes for each release.
9
9
 
10
+ ## Upgrading from 0.4.0 to 0.5.0
11
+
12
+ ### `Sun#horizontal_coordinates` method signature changed ([#69])
13
+
14
+ `Astronoby::Sun#horizontal_coordinates` expects an `observer`
15
+ (`Astronoby::Observer`) key argument instead of `latitude` and `longitude`
16
+ angles.
17
+
18
+ [#69]: https://github.com/rhannequin/astronoby/pull/69
19
+
20
+ ### `Sun#distance` now returns an `Astronoby::Distance` ([#78])
21
+
22
+ [#78]: https://github.com/rhannequin/astronoby/pull/78
23
+
24
+ ### `Coordinates::Equatorial#to_horizontal` method signature changed ([#69])
25
+
26
+ `Astronoby::Coordinates::Equatorial#to_horizontal` expects an `observer`
27
+ (`Astronoby::Observer`) key argument instead of `latitude` and `longitude`
28
+ angles.
29
+
30
+ ### `Coordinates::Horizontal` constructor and attributes changed ([#69])
31
+
32
+ `Astronoby::Coordinates::Horizontal::new` now expects an `observer`
33
+ (`Astronoby::Observer`) key argument instead of `latitude` and `longitude`,
34
+ and therefore now exposes `#observer` instead of `#latitude` and `#longitude`.
35
+
36
+ ### `GeocentricParallax#angle` method signature changed ([#78])
37
+
38
+ `Astronoby::GeocentricParallax#angle`'s key argument `distance` is now
39
+ expected to be an instance of `Astronoby::Distance` instead of a `Numeric`.
40
+
41
+ ### `GeocentricParallax#for_equatorial_coordinates` method signature changed ([#69])
42
+
43
+ `Astronoby::GeocentricParallax#for_equatorial_coordinates` expects an
44
+ `observer` (`Astronoby::Observer`) key argument instead of `latitude`,
45
+ `longitude` and `elevation`.
46
+
47
+ ### `Observer` constructor changed ([#78])
48
+
49
+ `Astronoby::Observer::new`'s key argument `distance` is now expected to be
50
+ an instance of `Astronoby::Distance` instead of a `Numeric`.
51
+
52
+ ### `Refraction` methods signatures changed ([#69])
53
+
54
+ `Astronoby::Refraction`'s constructor doesn't accept the `observer` key
55
+ argument anymore. Therefore, the methods `::angle` and
56
+ `::correct_horizontal_coordinates` neither.
57
+
10
58
  ## Upgrading from 0.3.0 to 0.4.0
11
59
 
12
60
  ### `Body` class removed ([#50])
@@ -0,0 +1,143 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Astronoby
4
+ class EphemerideLunaireParisienne
5
+ # Lunar theory: Éphéméride Lunaire Parisienne
6
+ # By Jean Chapront, Michelle Chapront-Touzé
7
+ # https://en.wikipedia.org/wiki/Ephemeride_Lunaire_Parisienne
8
+
9
+ DEGREES_UNIT = 10**-6
10
+
11
+ # @return [Array] Periodic terms for the Moon's longitude and distance
12
+ def self.periodic_terms_for_moon_longitude_and_distance
13
+ [
14
+ [0, 0, 1, 0, 6288774, -20905355],
15
+ [2, 0, -1, 0, 1274027, -3699111],
16
+ [2, 0, 0, 0, 658314, -2955968],
17
+ [0, 0, 2, 0, 213618, -569925],
18
+ [0, 1, 0, 0, -185116, 48888],
19
+ [0, 0, 0, 2, -114332, -3149],
20
+ [2, 0, -2, 0, 58793, 246158],
21
+ [2, -1, -1, 0, 57066, -152138],
22
+ [2, 0, 1, 0, 53322, -170733],
23
+ [2, -1, 0, 0, 45758, -204586],
24
+ [0, 1, -1, 0, -40923, -129620],
25
+ [1, 0, 0, 0, -34720, 108743],
26
+ [0, 1, 1, 0, -30383, 104755],
27
+ [2, 0, 0, -2, 15327, 10321],
28
+ [0, 0, 1, 2, -12528, 0],
29
+ [0, 0, 1, -2, 10980, 79661],
30
+ [4, 0, -1, 0, 10675, -34782],
31
+ [0, 0, 3, 0, 10034, -23210],
32
+ [4, 0, -2, 0, 8548, -21636],
33
+ [2, 1, -1, 0, -7888, 24208],
34
+ [2, 1, 0, 0, -6766, 30824],
35
+ [1, 0, -1, 0, -5163, -8379],
36
+ [1, 1, 0, 0, 4987, -16675],
37
+ [2, -1, 1, 0, 4036, -12831],
38
+ [2, 0, 2, 0, 3994, -10445],
39
+ [4, 0, 0, 0, 3861, -11650],
40
+ [2, 0, -3, 0, 3665, 14403],
41
+ [0, 1, -2, 0, -2689, -7003],
42
+ [2, 0, -1, 2, -2602, 0],
43
+ [2, -1, -2, 0, 2390, 10056],
44
+ [1, 0, 1, 0, -2348, 6322],
45
+ [2, -2, 0, 0, 2236, -9884],
46
+ [0, 1, 2, 0, -2120, 5751],
47
+ [0, 2, 0, 0, -2069, 0],
48
+ [2, -2, -1, 0, 2048, -4950],
49
+ [2, 0, 1, -2, -1773, 4130],
50
+ [2, 0, 0, 2, -1595, 0],
51
+ [4, -1, -1, 0, 1215, -3958],
52
+ [0, 0, 2, 2, -1110, 0],
53
+ [3, 0, -1, 0, -892, 3258],
54
+ [2, 1, 1, 0, -810, 2616],
55
+ [4, -1, -2, 0, 759, -1897],
56
+ [0, 2, -1, 0, -713, -2117],
57
+ [2, 2, -1, 0, -700, 2354],
58
+ [2, 1, -2, 0, 691, 0],
59
+ [2, -1, 0, -2, 596, 0],
60
+ [4, 0, 1, 0, 549, -1423],
61
+ [0, 0, 4, 0, 537, -1117],
62
+ [4, -1, 0, 0, 520, -1571],
63
+ [1, 0, -2, 0, -487, -1739],
64
+ [2, 1, 0, -2, -399, 0],
65
+ [0, 0, 2, -2, -381, -4421],
66
+ [1, 1, 1, 0, 351, 0],
67
+ [3, 0, -2, 0, -340, 0],
68
+ [4, 0, -3, 0, 330, 0],
69
+ [2, -1, 2, 0, 327, 0],
70
+ [0, 2, 1, 0, -323, 1165],
71
+ [1, 1, -1, 0, 299, 0],
72
+ [2, 0, 3, 0, 294, 0],
73
+ [2, 0, -1, -2, 0, 8752]
74
+ ]
75
+ end
76
+
77
+ # @return [Array] Periodic terms for the Moon's latitude
78
+ def self.periodic_terms_for_moon_latitude
79
+ [
80
+ [0, 0, 0, 1, 5128122],
81
+ [0, 0, 1, 1, 280602],
82
+ [0, 0, 1, -1, 277693],
83
+ [2, 0, 0, -1, 173237],
84
+ [2, 0, -1, 1, 55413],
85
+ [2, 0, -1, -1, 46271],
86
+ [2, 0, 0, 1, 32573],
87
+ [0, 0, 2, 1, 17198],
88
+ [2, 0, 1, -1, 9266],
89
+ [0, 0, 2, -1, 8822],
90
+ [2, -1, 0, -1, 8216],
91
+ [2, 0, -2, -1, 4324],
92
+ [2, 0, 1, 1, 4200],
93
+ [2, 1, 0, -1, -3359],
94
+ [2, -1, -1, 1, 2463],
95
+ [2, -1, 0, 1, 2211],
96
+ [2, -1, -1, -1, 2065],
97
+ [0, 1, -1, -1, -1870],
98
+ [4, 0, -1, -1, 1828],
99
+ [0, 1, 0, 1, -1794],
100
+ [0, 0, 0, 3, -1749],
101
+ [0, 1, -1, 1, -1565],
102
+ [1, 0, 0, 1, -1491],
103
+ [0, 1, 1, 1, -1475],
104
+ [0, 1, 1, -1, -1410],
105
+ [0, 1, 0, -1, -1344],
106
+ [1, 0, 0, -1, -1335],
107
+ [0, 0, 3, 1, 1107],
108
+ [4, 0, 0, -1, 1021],
109
+ [4, 0, -1, 1, 833],
110
+ [0, 0, 1, -3, 777],
111
+ [4, 0, -2, 1, 671],
112
+ [2, 0, 0, -3, 607],
113
+ [2, 0, 2, -1, 596],
114
+ [2, -1, 1, -1, 491],
115
+ [2, 0, -2, 1, -451],
116
+ [0, 0, 3, -1, 439],
117
+ [2, 0, 2, 1, 422],
118
+ [2, 0, -3, -1, 421],
119
+ [2, 1, -1, 1, -366],
120
+ [2, 1, 0, 1, -351],
121
+ [4, 0, 0, 1, 331],
122
+ [2, -1, 1, 1, 315],
123
+ [2, -2, 0, -1, 302],
124
+ [0, 0, 1, 3, -283],
125
+ [2, 1, 1, -1, -229],
126
+ [1, 1, 0, -1, 223],
127
+ [1, 1, 0, 1, 223],
128
+ [0, 1, -2, -1, -220],
129
+ [2, 1, -1, -1, -220],
130
+ [1, 0, 1, 1, -185],
131
+ [2, -1, -2, -1, 181],
132
+ [0, 1, 2, 1, -177],
133
+ [4, 0, -2, -1, 176],
134
+ [4, -1, -1, -1, 166],
135
+ [1, 0, 1, -1, -164],
136
+ [4, 0, 1, -1, 132],
137
+ [1, 0, -1, -1, -119],
138
+ [4, -1, 0, -1, 115],
139
+ [2, -2, 0, 1, 107]
140
+ ]
141
+ end
142
+ end
143
+ end