astronoby 0.3.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +132 -0
  3. data/Gemfile.lock +19 -17
  4. data/README.md +195 -25
  5. data/UPGRADING.md +72 -0
  6. data/lib/astronoby/aberration.rb +7 -5
  7. data/lib/astronoby/angle.rb +26 -34
  8. data/lib/astronoby/astronomical_models/ephemeride_lunaire_parisienne.rb +143 -0
  9. data/lib/astronoby/astronomical_models/moon_phases_periodic_terms.rb +249 -0
  10. data/lib/astronoby/bodies/moon.rb +335 -0
  11. data/lib/astronoby/bodies/sun.rb +129 -132
  12. data/lib/astronoby/constants.rb +31 -0
  13. data/lib/astronoby/coordinates/ecliptic.rb +4 -4
  14. data/lib/astronoby/coordinates/equatorial.rb +7 -5
  15. data/lib/astronoby/coordinates/horizontal.rb +24 -12
  16. data/lib/astronoby/distance.rb +83 -0
  17. data/lib/astronoby/epoch.rb +0 -2
  18. data/lib/astronoby/equinox_solstice.rb +3 -2
  19. data/lib/astronoby/events/moon_phases.rb +143 -0
  20. data/lib/astronoby/events/observation_events.rb +259 -0
  21. data/lib/astronoby/events/rise_transit_set_iteration.rb +215 -0
  22. data/lib/astronoby/events/twilight_events.rb +121 -0
  23. data/lib/astronoby/geocentric_parallax.rb +36 -56
  24. data/lib/astronoby/mean_obliquity.rb +2 -2
  25. data/lib/astronoby/moon_phase.rb +43 -0
  26. data/lib/astronoby/nutation.rb +5 -3
  27. data/lib/astronoby/observer.rb +39 -18
  28. data/lib/astronoby/precession.rb +1 -1
  29. data/lib/astronoby/refraction.rb +8 -10
  30. data/lib/astronoby/time/greenwich_sidereal_time.rb +18 -29
  31. data/lib/astronoby/time/local_sidereal_time.rb +4 -4
  32. data/lib/astronoby/util/maths.rb +72 -0
  33. data/lib/astronoby/util/time.rb +88 -0
  34. data/lib/astronoby/util/trigonometry.rb +4 -4
  35. data/lib/astronoby/version.rb +1 -1
  36. data/lib/astronoby.rb +12 -1
  37. metadata +15 -4
  38. data/lib/astronoby/body.rb +0 -155
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2ab8b9191b1b2452c678389fbc4c1750c4080c8f3cddf55cf7aebad2d99a0da7
4
- data.tar.gz: f823456f556792e1d2ea3747f3665c84442a907c3a08271df5f871204bd09f10
3
+ metadata.gz: 43ef390a6ab6a498edbf148b2af44c906daf73ff9ba61b5aafeadd828fb550e4
4
+ data.tar.gz: b2cf0743676aa49f95f24c62b3d5d759553014bc52114260a71ecedfb9e6c1cb
5
5
  SHA512:
6
- metadata.gz: b14d2a19972991fecc5b0a12c15fe18f3a9a07d0e9fc705fe2d984af14e45ae82962332361e65dace20c27b5f6e05e19483385731770abe463a3bf28adcfb354
7
- data.tar.gz: 725810244872e539789b23d2b28ce656781a1f9121fabc76c3e2ebc5c9e6616900bff852290cf8719a10feb7a06afa42f7d02f4e00ac3ba2dadc4dea47d6a24c
6
+ metadata.gz: 052bfebf4ddaf6ef3f24883fec090a831d38a9e4124dd5f561d6b1dd7074b6385502396edddd5496ab6066ff93acab4f220ec3aaa244ad0638c0b65fbaace55f
7
+ data.tar.gz: fe37ac2714328893b068ba958e37a3b057a76ddfa1b299a35f22be005687d3168d20e98ebe571db519bd6cf69227cc0f0dc4c0889dd9ca5bb9d1abb2b1ee550d
data/CHANGELOG.md CHANGED
@@ -1,5 +1,137 @@
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
+
63
+ ## 0.4.0 - 2024-04-29
64
+
65
+ _If you are upgrading: please see [UPGRADING.md]._
66
+
67
+ [UPGRADING.md]: https://github.com/rhannequin/astronoby/blob/main/UPGRADING.md
68
+
69
+ ### Bug fixes
70
+
71
+ * Fix ecliptic to equatorial epoch ([#56])
72
+
73
+ [#56]: https://github.com/rhannequin/astronoby/pull/56
74
+
75
+ ### Features
76
+
77
+ * Add twilight times ([#49])
78
+ * Add interpolation method ([#52])
79
+ * Add decimal_hour_to_time util ([#53])
80
+ * Calculate leap seconds for an instant ([#54])
81
+ * Add `Angle#-@` ([#55])
82
+ * Enable equivalence and hash equality to `Observer` ([#57])
83
+ * Twilight events dedicated class ([#61])
84
+
85
+ [#49]: https://github.com/rhannequin/astronoby/pull/49
86
+ [#52]: https://github.com/rhannequin/astronoby/pull/52
87
+ [#53]: https://github.com/rhannequin/astronoby/pull/53
88
+ [#54]: https://github.com/rhannequin/astronoby/pull/54
89
+ [#55]: https://github.com/rhannequin/astronoby/pull/55
90
+ [#57]: https://github.com/rhannequin/astronoby/pull/57
91
+ [#61]: https://github.com/rhannequin/astronoby/pull/61
92
+
93
+ ### Improvements
94
+
95
+ * Upgrade bundler from 2.3.11 to 2.5.7 by @dorianmariecom ([#45])
96
+ * Drop `BigDecimal` ([#46])
97
+ * Bump rake from 13.1.0 to 13.2.0 ([#47])
98
+ * Increase Ruby versions support ([#48])
99
+ * Bump rake from 13.2.0 to 13.2.1 ([#51])
100
+ * Dedicated constants class ([#62])
101
+ * Improve accuracy of equation of time ([#63])
102
+ * Twilight times better accuracy ([#65])
103
+ * Update UPGRADING.md ([#66])
104
+ * release: Bump version to 0.4.0 ([#67])
105
+
106
+ [#45]: https://github.com/rhannequin/astronoby/pull/45
107
+ [#46]: https://github.com/rhannequin/astronoby/pull/46
108
+ [#47]: https://github.com/rhannequin/astronoby/pull/47
109
+ [#48]: https://github.com/rhannequin/astronoby/pull/48
110
+ [#51]: https://github.com/rhannequin/astronoby/pull/51
111
+ [#62]: https://github.com/rhannequin/astronoby/pull/62
112
+ [#63]: https://github.com/rhannequin/astronoby/pull/63
113
+ [#65]: https://github.com/rhannequin/astronoby/pull/65
114
+ [#66]: https://github.com/rhannequin/astronoby/pull/66
115
+ [#67]: https://github.com/rhannequin/astronoby/pull/67
116
+
117
+ ### Backward-incompatible changes
118
+
119
+ * More accurate rising, transit and setting times ([#50])
120
+ * Observation events dedicated and centralized class ([#60])
121
+ * Change `Astronoby::Sun` constructor ([#64])
122
+
123
+ [#50]: https://github.com/rhannequin/astronoby/pull/50
124
+ [#60]: https://github.com/rhannequin/astronoby/pull/60
125
+ [#64]: https://github.com/rhannequin/astronoby/pull/64
126
+
127
+ ### New Contributors
128
+
129
+ * @dorianmariecom made their first contribution in [#45]
130
+
131
+ [#45]: https://github.com/rhannequin/astronoby/pull/45
132
+
133
+ **Full Changelog**: https://github.com/rhannequin/astronoby/compare/v0.3.0...v0.4.0
134
+
3
135
  ## 0.3.0 - 2024-03-29
4
136
 
5
137
  _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.3.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
- rake (13.1.0)
25
- regexp_parser (2.9.0)
26
- rexml (3.2.6)
24
+ rake (13.2.1)
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
@@ -77,4 +79,4 @@ DEPENDENCIES
77
79
  standard (~> 1.3)
78
80
 
79
81
  BUNDLED WITH
80
- 2.3.11
82
+ 2.5.7
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:
@@ -32,7 +53,7 @@ major one is released.
32
53
 
33
54
  ```rb
34
55
  angle1 = Astronoby::Angle.from_degrees(90)
35
- angle2 = Astronoby::Angle.from_radians(Astronoby::Angle::PI / 2)
56
+ angle2 = Astronoby::Angle.from_radians(Math::PI / 2)
36
57
  angle3 = Astronoby::Angle.from_hours(12)
37
58
 
38
59
  angle1 == angle2
@@ -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,51 +113,89 @@ 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
- epoch = Astronoby::Epoch.from_time(time)
75
122
 
76
- latitude = Astronoby::Angle.from_degrees(48.8566)
77
- 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
+ )
78
127
 
79
- sun = Astronoby::Sun.new(epoch: epoch)
128
+ sun = Astronoby::Sun.new(time: time)
80
129
 
81
130
  horizontal_coordinates = sun.horizontal_coordinates(
82
- latitude: latitude,
83
- longitude: longitude
131
+ observer: observer
84
132
  )
85
133
 
86
- horizontal_coordinates.altitude.degrees.to_f
87
- # => 27.50008242057459
134
+ horizontal_coordinates.altitude.degrees
135
+ # => 27.500082409271247
88
136
 
89
137
  horizontal_coordinates.altitude.str(:dms)
90
- # => "+27° 30′ 0.2967″"
138
+ # => "+27° 30′ 0.2966″"
91
139
  ```
92
140
 
93
- ### Sunrise and sunset times and azimuths
141
+ #### Sunrise and sunset times and azimuths
94
142
 
95
143
  ```rb
96
- date = Date.new(2015, 2, 5)
97
- epoch = Astronoby::Epoch.from_time(date)
144
+ time = Time.new(2015, 2, 5)
98
145
  observer = Astronoby::Observer.new(
99
146
  latitude: Astronoby::Angle.from_degrees(38),
100
147
  longitude: Astronoby::Angle.from_degrees(-78)
101
148
  )
102
- sun = Astronoby::Sun.new(epoch: epoch)
149
+ sun = Astronoby::Sun.new(time: time)
150
+ observation_events = sun.observation_events(observer: observer)
151
+
152
+ observation_events.rising_time
153
+ # => 2015-02-05 12:12:59 UTC
103
154
 
104
- sun.rising_time(observer: observer)
105
- # => 2015-02-05 12:13:26 UTC
155
+ observation_events.rising_azimuth.str(:dms)
156
+ # => "+109° 29′ 34.3674″"
106
157
 
107
- sun.rising_azimuth(observer: observer).str(:dms)
108
- # => "+109° 41′ 22.2585″"
158
+ observation_events.transit_time
159
+ # => 2015-02-05 17:25:59 UTC
109
160
 
110
- sun.setting_time(observer: observer)
111
- # => 2015-02-05 22:35:12 UTC
161
+ observation_events.transit_altitude.str(:dms)
162
+ # => "+36° 8′ 15.8197″"
112
163
 
113
- sun.setting_azimuth(observer: observer).str(:dms)
114
- # => "+250° 18′ 37.7414″"
164
+ observation_events.setting_time
165
+ # => 2015-02-05 22:39:27 UTC
166
+
167
+ observation_events.setting_azimuth.str(:dms)
168
+ # => "+250° 40′ 42.8609″"
169
+ ```
170
+
171
+ #### Twilight times
172
+
173
+ ```rb
174
+ time = Time.new(2024, 1, 1)
175
+ sun = Astronoby::Sun.new(time: time)
176
+ observer = Astronoby::Observer.new(
177
+ latitude: Astronoby::Angle.from_degrees(48.8566),
178
+ longitude: Astronoby::Angle.from_degrees(2.3522)
179
+ )
180
+ twilight_events = sun.twilight_events(observer: observer)
181
+
182
+ twilight_events.morning_astronomical_twilight_time
183
+ # => 2024-01-01 05:49:25 UTC
184
+
185
+ twilight_events.morning_nautical_twilight_time
186
+ # => 2024-01-01 06:27:42 UTC
187
+
188
+ twilight_events.morning_civil_twilight_time
189
+ # => 2024-01-01 07:07:50 UTC
190
+
191
+ twilight_events.evening_civil_twilight_time
192
+ # => 2024-01-01 16:40:01 UTC
193
+
194
+ twilight_events.evening_nautical_twilight_time
195
+ # => 2024-01-01 17:20:10 UTC
196
+
197
+ twilight_events.evening_astronomical_twilight_time
198
+ # => 2024-01-01 17:58:26 UTC
115
199
  ```
116
200
 
117
201
  ### Solstice and Equinox times
@@ -126,6 +210,92 @@ Astronoby::EquinoxSolstice.june_solstice(year)
126
210
  # => 2024-06-20 20:50:18 UTC
127
211
  ```
128
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
+
129
299
  ## Precision
130
300
 
131
301
  The current precision for the Sun's apparent location in the sky, compared
data/UPGRADING.md CHANGED
@@ -7,6 +7,78 @@ 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
+
58
+ ## Upgrading from 0.3.0 to 0.4.0
59
+
60
+ ### `Body` class removed ([#50])
61
+
62
+ The different behaviors from `Body` have been moved to other classes like
63
+ `Events::ObservationEvents`.
64
+
65
+ [#50]: https://github.com/rhannequin/astronoby/pull/50
66
+
67
+ ### Rising and setting times and azimuths removed from `Sun` ([#60])
68
+
69
+ `#rising_time`, `#rising_azimuth`, `#setting_time` and `#setting_azimuth`
70
+ have been removed from `Astronoby::Sun` and moved to
71
+ `Astronoby::Events::ObservationEvents`.
72
+
73
+ [#60]: https://github.com/rhannequin/astronoby/pull/60
74
+
75
+ ### `Sun` constructor changed ([#64])
76
+
77
+ The `Sun` constructor now doesn't accept the `epoch` key argument anymore,
78
+ but only a new `time` key argument.
79
+
80
+ [#64]: https://github.com/rhannequin/astronoby/pull/64
81
+
10
82
  ## Upgrading from 0.2.0 to 0.3.0
11
83
 
12
84
  ### `Sun#ecliptic_coordinates` method removed (#41)
@@ -2,6 +2,8 @@
2
2
 
3
3
  module Astronoby
4
4
  class Aberration
5
+ MAXIMUM_SHIFT = Angle.from_degrees(20.5)
6
+
5
7
  def self.for_ecliptic_coordinates(coordinates:, epoch:)
6
8
  new(coordinates, epoch).apply
7
9
  end
@@ -18,15 +20,15 @@ module Astronoby
18
20
  # Chapter: 36 - Aberration
19
21
  def apply
20
22
  delta_longitude = Angle.from_degrees(
21
- -20.5 * (
23
+ -MAXIMUM_SHIFT.degrees * (
22
24
  sun_longitude - @coordinates.longitude
23
- ).cos / @coordinates.latitude.cos / 3600
25
+ ).cos / @coordinates.latitude.cos / Constants::SECONDS_PER_DEGREE
24
26
  )
25
27
 
26
28
  delta_latitude = Angle.from_degrees(
27
- -20.5 *
29
+ -MAXIMUM_SHIFT.degrees *
28
30
  (sun_longitude - @coordinates.longitude).sin *
29
- @coordinates.latitude.sin / 3600
31
+ @coordinates.latitude.sin / Constants::SECONDS_PER_DEGREE
30
32
  )
31
33
 
32
34
  Coordinates::Ecliptic.new(
@@ -37,7 +39,7 @@ module Astronoby
37
39
 
38
40
  def sun_longitude
39
41
  @_sun_longitude ||= Sun
40
- .new(epoch: @epoch)
42
+ .new(time: Epoch.to_utc(@epoch))
41
43
  .true_ecliptic_coordinates
42
44
  .longitude
43
45
  end