astronoby 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +60 -0
- data/Gemfile.lock +17 -15
- data/README.md +147 -12
- data/UPGRADING.md +48 -0
- data/lib/astronoby/astronomical_models/ephemeride_lunaire_parisienne.rb +143 -0
- data/lib/astronoby/astronomical_models/moon_phases_periodic_terms.rb +249 -0
- data/lib/astronoby/bodies/moon.rb +335 -0
- data/lib/astronoby/bodies/sun.rb +15 -13
- data/lib/astronoby/constants.rb +6 -0
- data/lib/astronoby/coordinates/equatorial.rb +4 -3
- data/lib/astronoby/coordinates/horizontal.rb +18 -10
- data/lib/astronoby/distance.rb +83 -0
- data/lib/astronoby/events/moon_phases.rb +143 -0
- data/lib/astronoby/events/observation_events.rb +74 -134
- data/lib/astronoby/events/rise_transit_set_iteration.rb +215 -0
- data/lib/astronoby/geocentric_parallax.rb +36 -56
- data/lib/astronoby/moon_phase.rb +43 -0
- data/lib/astronoby/observer.rb +6 -4
- data/lib/astronoby/refraction.rb +8 -10
- data/lib/astronoby/util/maths.rb +1 -1
- data/lib/astronoby/version.rb +1 -1
- data/lib/astronoby.rb +7 -0
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 43ef390a6ab6a498edbf148b2af44c906daf73ff9ba61b5aafeadd828fb550e4
|
4
|
+
data.tar.gz: b2cf0743676aa49f95f24c62b3d5d759553014bc52114260a71ecedfb9e6c1cb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
+
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.
|
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
|
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.
|
26
|
-
rexml (3.2.
|
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.
|
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.
|
52
|
-
parser (>= 3.3.0
|
53
|
-
rubocop-performance (1.
|
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.
|
56
|
+
rubocop-ast (>= 1.31.1, < 2.0)
|
56
57
|
ruby-progressbar (1.13.0)
|
57
|
-
standard (1.
|
58
|
+
standard (1.36.0)
|
58
59
|
language_server-protocol (~> 3.17.0.2)
|
59
60
|
lint_roller (~> 1.0)
|
60
|
-
rubocop (~> 1.
|
61
|
+
rubocop (~> 1.63.0)
|
61
62
|
standard-custom (~> 1.0.0)
|
62
|
-
standard-performance (~> 1.
|
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.
|
67
|
+
standard-performance (1.4.0)
|
67
68
|
lint_roller (~> 1.1)
|
68
|
-
rubocop-performance (~> 1.
|
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
|
-
|
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
|
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
|
-
|
76
|
-
|
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
|
-
|
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
|
-
|
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°
|
156
|
+
# => "+109° 29′ 34.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.
|
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°
|
168
|
+
# => "+250° 40′ 42.8609″"
|
120
169
|
```
|
121
170
|
|
122
|
-
|
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
|