lunation 0.1.5 → 0.1.6

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.
@@ -1,360 +1,60 @@
1
- - moon_mean_elongation: 0
2
- sun_mean_anomaly: 0
3
- moon_mean_anomaly: 1
4
- moon_argument_of_latitude: 0
5
- sine_coefficient: 6288774
6
- cosine_coefficient: -20905355
7
- - moon_mean_elongation: 2
8
- sun_mean_anomaly: 0
9
- moon_mean_anomaly: -1
10
- moon_argument_of_latitude: 0
11
- sine_coefficient: 1274027
12
- cosine_coefficient: -3699111
13
- - moon_mean_elongation: 2
14
- sun_mean_anomaly: 0
15
- moon_mean_anomaly: 0
16
- moon_argument_of_latitude: 0
17
- sine_coefficient: 658314
18
- cosine_coefficient: -2955968
19
- - moon_mean_elongation: 0
20
- sun_mean_anomaly: 0
21
- moon_mean_anomaly: 2
22
- moon_argument_of_latitude: 0
23
- sine_coefficient: 213618
24
- cosine_coefficient: -569925
25
- - moon_mean_elongation: 0
26
- sun_mean_anomaly: 1
27
- moon_mean_anomaly: 0
28
- moon_argument_of_latitude: 0
29
- sine_coefficient: -185116
30
- cosine_coefficient: 48888
31
- - moon_mean_elongation: 0
32
- sun_mean_anomaly: 0
33
- moon_mean_anomaly: 0
34
- moon_argument_of_latitude: 2
35
- sine_coefficient: -114332
36
- cosine_coefficient: -3149
37
- - moon_mean_elongation: 2
38
- sun_mean_anomaly: 0
39
- moon_mean_anomaly: -2
40
- moon_argument_of_latitude: 0
41
- sine_coefficient: 58793
42
- cosine_coefficient: 246158
43
- - moon_mean_elongation: 2
44
- sun_mean_anomaly: -1
45
- moon_mean_anomaly: -1
46
- moon_argument_of_latitude: 0
47
- sine_coefficient: 57066
48
- cosine_coefficient: -152138
49
- - moon_mean_elongation: 2
50
- sun_mean_anomaly: 0
51
- moon_mean_anomaly: 1
52
- moon_argument_of_latitude: 0
53
- sine_coefficient: 53322
54
- cosine_coefficient: -170733
55
- - moon_mean_elongation: 2
56
- sun_mean_anomaly: -1
57
- moon_mean_anomaly: 0
58
- moon_argument_of_latitude: 0
59
- sine_coefficient: 45758
60
- cosine_coefficient: -204586
61
- - moon_mean_elongation: 0
62
- sun_mean_anomaly: 1
63
- moon_mean_anomaly: -1
64
- moon_argument_of_latitude: 0
65
- sine_coefficient: -40923
66
- cosine_coefficient: -129620
67
- - moon_mean_elongation: 1
68
- sun_mean_anomaly: 0
69
- moon_mean_anomaly: 0
70
- moon_argument_of_latitude: 0
71
- sine_coefficient: -34720
72
- cosine_coefficient: 108743
73
- - moon_mean_elongation: 0
74
- sun_mean_anomaly: 1
75
- moon_mean_anomaly: 1
76
- moon_argument_of_latitude: 0
77
- sine_coefficient: -30383
78
- cosine_coefficient: 104755
79
- - moon_mean_elongation: 2
80
- sun_mean_anomaly: 0
81
- moon_mean_anomaly: 0
82
- moon_argument_of_latitude: -2
83
- sine_coefficient: 15327
84
- cosine_coefficient: 10321
85
- - moon_mean_elongation: 0
86
- sun_mean_anomaly: 0
87
- moon_mean_anomaly: 1
88
- moon_argument_of_latitude: 2
89
- sine_coefficient: -12528
90
- cosine_coefficient: null
91
- - moon_mean_elongation: 0
92
- sun_mean_anomaly: 0
93
- moon_mean_anomaly: 1
94
- moon_argument_of_latitude: -2
95
- sine_coefficient: 10980
96
- cosine_coefficient: 79661
97
- - moon_mean_elongation: 4
98
- sun_mean_anomaly: 0
99
- moon_mean_anomaly: -1
100
- moon_argument_of_latitude: 0
101
- sine_coefficient: 10675
102
- cosine_coefficient: -34782
103
- - moon_mean_elongation: 0
104
- sun_mean_anomaly: 0
105
- moon_mean_anomaly: 3
106
- moon_argument_of_latitude: 0
107
- sine_coefficient: 10034
108
- cosine_coefficient: -23210
109
- - moon_mean_elongation: 4
110
- sun_mean_anomaly: 0
111
- moon_mean_anomaly: -2
112
- moon_argument_of_latitude: 0
113
- sine_coefficient: 8548
114
- cosine_coefficient: -21636
115
- - moon_mean_elongation: 2
116
- sun_mean_anomaly: 1
117
- moon_mean_anomaly: -1
118
- moon_argument_of_latitude: 0
119
- sine_coefficient: -7888
120
- cosine_coefficient: 24208
121
- - moon_mean_elongation: 2
122
- sun_mean_anomaly: 1
123
- moon_mean_anomaly: 0
124
- moon_argument_of_latitude: 0
125
- sine_coefficient: -6766
126
- cosine_coefficient: 30824
127
- - moon_mean_elongation: 1
128
- sun_mean_anomaly: 0
129
- moon_mean_anomaly: -1
130
- moon_argument_of_latitude: 0
131
- sine_coefficient: -5163
132
- cosine_coefficient: -8379
133
- - moon_mean_elongation: 1
134
- sun_mean_anomaly: 1
135
- moon_mean_anomaly: 0
136
- moon_argument_of_latitude: 0
137
- sine_coefficient: 4987
138
- cosine_coefficient: -16675
139
- - moon_mean_elongation: 2
140
- sun_mean_anomaly: -1
141
- moon_mean_anomaly: 1
142
- moon_argument_of_latitude: 0
143
- sine_coefficient: 4036
144
- cosine_coefficient: -12831
145
- - moon_mean_elongation: 2
146
- sun_mean_anomaly: 0
147
- moon_mean_anomaly: 2
148
- moon_argument_of_latitude: 0
149
- sine_coefficient: 3994
150
- cosine_coefficient: -10445
151
- - moon_mean_elongation: 4
152
- sun_mean_anomaly: 0
153
- moon_mean_anomaly: 0
154
- moon_argument_of_latitude: 0
155
- sine_coefficient: 3861
156
- cosine_coefficient: -11650
157
- - moon_mean_elongation: 2
158
- sun_mean_anomaly: 0
159
- moon_mean_anomaly: -3
160
- moon_argument_of_latitude: 0
161
- sine_coefficient: 3665
162
- cosine_coefficient: 14403
163
- - moon_mean_elongation: 0
164
- sun_mean_anomaly: 1
165
- moon_mean_anomaly: -2
166
- moon_argument_of_latitude: 0
167
- sine_coefficient: -2689
168
- cosine_coefficient: -7003
169
- - moon_mean_elongation: 2
170
- sun_mean_anomaly: 0
171
- moon_mean_anomaly: -1
172
- moon_argument_of_latitude: 2
173
- sine_coefficient: -2602
174
- cosine_coefficient: null
175
- - moon_mean_elongation: 2
176
- sun_mean_anomaly: -1
177
- moon_mean_anomaly: -2
178
- moon_argument_of_latitude: 0
179
- sine_coefficient: 2390
180
- cosine_coefficient: 10056
181
- - moon_mean_elongation: 1
182
- sun_mean_anomaly: 0
183
- moon_mean_anomaly: 1
184
- moon_argument_of_latitude: 0
185
- sine_coefficient: -2348
186
- cosine_coefficient: 6322
187
- - moon_mean_elongation: 2
188
- sun_mean_anomaly: -2
189
- moon_mean_anomaly: 0
190
- moon_argument_of_latitude: 0
191
- sine_coefficient: 2236
192
- cosine_coefficient: -9884
193
- - moon_mean_elongation: 0
194
- sun_mean_anomaly: 1
195
- moon_mean_anomaly: 2
196
- moon_argument_of_latitude: 0
197
- sine_coefficient: -2120
198
- cosine_coefficient: 5751
199
- - moon_mean_elongation: 0
200
- sun_mean_anomaly: 2
201
- moon_mean_anomaly: 0
202
- moon_argument_of_latitude: 0
203
- sine_coefficient: -2069
204
- cosine_coefficient: null
205
- - moon_mean_elongation: 2
206
- sun_mean_anomaly: -2
207
- moon_mean_anomaly: -1
208
- moon_argument_of_latitude: 0
209
- sine_coefficient: 2048
210
- cosine_coefficient: -4950
211
- - moon_mean_elongation: 2
212
- sun_mean_anomaly: 0
213
- moon_mean_anomaly: 1
214
- moon_argument_of_latitude: -2
215
- sine_coefficient: -1773
216
- cosine_coefficient: 4130
217
- - moon_mean_elongation: 2
218
- sun_mean_anomaly: 0
219
- moon_mean_anomaly: 0
220
- moon_argument_of_latitude: 2
221
- sine_coefficient: -1595
222
- cosine_coefficient: null
223
- - moon_mean_elongation: 4
224
- sun_mean_anomaly: -1
225
- moon_mean_anomaly: -1
226
- moon_argument_of_latitude: 0
227
- sine_coefficient: 1215
228
- cosine_coefficient: -3958
229
- - moon_mean_elongation: 0
230
- sun_mean_anomaly: 0
231
- moon_mean_anomaly: 2
232
- moon_argument_of_latitude: 2
233
- sine_coefficient: -1110
234
- cosine_coefficient: null
235
- - moon_mean_elongation: 3
236
- sun_mean_anomaly: 0
237
- moon_mean_anomaly: -1
238
- moon_argument_of_latitude: 0
239
- sine_coefficient: -892
240
- cosine_coefficient: 3258
241
- - moon_mean_elongation: 2
242
- sun_mean_anomaly: 1
243
- moon_mean_anomaly: 1
244
- moon_argument_of_latitude: 0
245
- sine_coefficient: -810
246
- cosine_coefficient: 2616
247
- - moon_mean_elongation: 4
248
- sun_mean_anomaly: -1
249
- moon_mean_anomaly: -2
250
- moon_argument_of_latitude: 0
251
- sine_coefficient: 759
252
- cosine_coefficient: -1897
253
- - moon_mean_elongation: 0
254
- sun_mean_anomaly: 2
255
- moon_mean_anomaly: -1
256
- moon_argument_of_latitude: 0
257
- sine_coefficient: -713
258
- cosine_coefficient: -2117
259
- - moon_mean_elongation: 2
260
- sun_mean_anomaly: 2
261
- moon_mean_anomaly: -1
262
- moon_argument_of_latitude: 0
263
- sine_coefficient: -700
264
- cosine_coefficient: 2354
265
- - moon_mean_elongation: 2
266
- sun_mean_anomaly: 1
267
- moon_mean_anomaly: -2
268
- moon_argument_of_latitude: 0
269
- sine_coefficient: 691
270
- cosine_coefficient: null
271
- - moon_mean_elongation: 2
272
- sun_mean_anomaly: -1
273
- moon_mean_anomaly: 0
274
- moon_argument_of_latitude: -2
275
- sine_coefficient: 596
276
- cosine_coefficient: null
277
- - moon_mean_elongation: 4
278
- sun_mean_anomaly: 0
279
- moon_mean_anomaly: 1
280
- moon_argument_of_latitude: 0
281
- sine_coefficient: 549
282
- cosine_coefficient: -1423
283
- - moon_mean_elongation: 0
284
- sun_mean_anomaly: 0
285
- moon_mean_anomaly: 4
286
- moon_argument_of_latitude: 0
287
- sine_coefficient: 537
288
- cosine_coefficient: -1117
289
- - moon_mean_elongation: 4
290
- sun_mean_anomaly: -1
291
- moon_mean_anomaly: 0
292
- moon_argument_of_latitude: 0
293
- sine_coefficient: 520
294
- cosine_coefficient: -1571
295
- - moon_mean_elongation: 1
296
- sun_mean_anomaly: 0
297
- moon_mean_anomaly: -2
298
- moon_argument_of_latitude: 0
299
- sine_coefficient: -487
300
- cosine_coefficient: -1739
301
- - moon_mean_elongation: 2
302
- sun_mean_anomaly: 1
303
- moon_mean_anomaly: 0
304
- moon_argument_of_latitude: -2
305
- sine_coefficient: -399
306
- cosine_coefficient: null
307
- - moon_mean_elongation: 0
308
- sun_mean_anomaly: 0
309
- moon_mean_anomaly: 2
310
- moon_argument_of_latitude: -2
311
- sine_coefficient: -381
312
- cosine_coefficient: -4421
313
- - moon_mean_elongation: 1
314
- sun_mean_anomaly: 1
315
- moon_mean_anomaly: 1
316
- moon_argument_of_latitude: 0
317
- sine_coefficient: 351
318
- cosine_coefficient: null
319
- - moon_mean_elongation: 3
320
- sun_mean_anomaly: 0
321
- moon_mean_anomaly: -2
322
- moon_argument_of_latitude: 0
323
- sine_coefficient: -340
324
- cosine_coefficient: null
325
- - moon_mean_elongation: 4
326
- sun_mean_anomaly: 0
327
- moon_mean_anomaly: -3
328
- moon_argument_of_latitude: 0
329
- sine_coefficient: 330
330
- cosine_coefficient: null
331
- - moon_mean_elongation: 2
332
- sun_mean_anomaly: -1
333
- moon_mean_anomaly: 2
334
- moon_argument_of_latitude: 0
335
- sine_coefficient: 327
336
- cosine_coefficient: null
337
- - moon_mean_elongation: 0
338
- sun_mean_anomaly: 2
339
- moon_mean_anomaly: 1
340
- moon_argument_of_latitude: 0
341
- sine_coefficient: -323
342
- cosine_coefficient: 1165
343
- - moon_mean_elongation: 1
344
- sun_mean_anomaly: 1
345
- moon_mean_anomaly: -1
346
- moon_argument_of_latitude: 0
347
- sine_coefficient: 299
348
- cosine_coefficient: null
349
- - moon_mean_elongation: 2
350
- sun_mean_anomaly: 0
351
- moon_mean_anomaly: 3
352
- moon_argument_of_latitude: 0
353
- sine_coefficient: 294
354
- cosine_coefficient: null
355
- - moon_mean_elongation: 2
356
- sun_mean_anomaly: 0
357
- moon_mean_anomaly: -1
358
- moon_argument_of_latitude: -2
359
- sine_coefficient: null
360
- cosine_coefficient: 8752
1
+ - [0, 0, 1, 0, 6288774, -20905355]
2
+ - [2, 0, -1, 0, 1274027, -3699111]
3
+ - [2, 0, 0, 0, 658314, -2955968]
4
+ - [0, 0, 2, 0, 213618, -569925]
5
+ - [0, 1, 0, 0, -185116, 48888]
6
+ - [0, 0, 0, 2, -114332, -3149]
7
+ - [2, 0, -2, 0, 58793, 246158]
8
+ - [2, -1, -1, 0, 57066, -152138]
9
+ - [2, 0, 1, 0, 53322, -170733]
10
+ - [2, -1, 0, 0, 45758, -204586]
11
+ - [0, 1, -1, 0, -40923, -129620]
12
+ - [1, 0, 0, 0, -34720, 108743]
13
+ - [0, 1, 1, 0, -30383, 104755]
14
+ - [2, 0, 0, -2, 15327, 10321]
15
+ - [0, 0, 1, 2, -12528, null]
16
+ - [0, 0, 1, -2, 10980, 79661]
17
+ - [4, 0, -1, 0, 10675, -34782]
18
+ - [0, 0, 3, 0, 10034, -23210]
19
+ - [4, 0, -2, 0, 8548, -21636]
20
+ - [2, 1, -1, 0, -7888, 24208]
21
+ - [2, 1, 0, 0, -6766, 30824]
22
+ - [1, 0, -1, 0, -5163, -8379]
23
+ - [1, 1, 0, 0, 4987, -16675]
24
+ - [2, -1, 1, 0, 4036, -12831]
25
+ - [2, 0, 2, 0, 3994, -10445]
26
+ - [4, 0, 0, 0, 3861, -11650]
27
+ - [2, 0, -3, 0, 3665, 14403]
28
+ - [0, 1, -2, 0, -2689, -7003]
29
+ - [2, 0, -1, 2, -2602, null]
30
+ - [2, -1, -2, 0, 2390, 10056]
31
+ - [1, 0, 1, 0, -2348, 6322]
32
+ - [2, -2, 0, 0, 2236, -9884]
33
+ - [0, 1, 2, 0, -2120, 5751]
34
+ - [0, 2, 0, 0, -2069, null]
35
+ - [2, -2, -1, 0, 2048, -4950]
36
+ - [2, 0, 1, -2, -1773, 4130]
37
+ - [2, 0, 0, 2, -1595, null]
38
+ - [4, -1, -1, 0, 1215, -3958]
39
+ - [0, 0, 2, 2, -1110, null]
40
+ - [3, 0, -1, 0, -892, 3258]
41
+ - [2, 1, 1, 0, -810, 2616]
42
+ - [4, -1, -2, 0, 759, -1897]
43
+ - [0, 2, -1, 0, -713, -2117]
44
+ - [2, 2, -1, 0, -700, 2354]
45
+ - [2, 1, -2, 0, 691, null]
46
+ - [2, -1, 0, -2, 596, null]
47
+ - [4, 0, 1, 0, 549, -1423]
48
+ - [0, 0, 4, 0, 537, -1117]
49
+ - [4, -1, 0, 0, 520, -1571]
50
+ - [1, 0, -2, 0, -487, -1739]
51
+ - [2, 1, 0, -2, -399, null]
52
+ - [0, 0, 2, -2, -381, -4421]
53
+ - [1, 1, 1, 0, 351, null]
54
+ - [3, 0, -2, 0, -340, null]
55
+ - [4, 0, -3, 0, 330, null]
56
+ - [2, -1, 2, 0, 327, null]
57
+ - [0, 2, 1, 0, -323, 1165]
58
+ - [1, 1, -1, 0, 299, null]
59
+ - [2, 0, 3, 0, 294, null]
60
+ - [2, 0, -1, -2, null, 8752]
@@ -40,7 +40,7 @@ module Lunation
40
40
  end
41
41
 
42
42
  def decimal_hours
43
- @decimal_hours ||= decimal_degrees / 15.0
43
+ @decimal_hours ||= decimal_degrees.fdiv(15)
44
44
  end
45
45
 
46
46
  def decimal_minutes
@@ -95,7 +95,9 @@ module Lunation
95
95
 
96
96
  def from_decimal_degrees(decimal_degrees, normalize: true)
97
97
  new(
98
- decimal_degrees: (normalize ? decimal_degrees % 360 : decimal_degrees).round(9),
98
+ decimal_degrees: (
99
+ normalize ? decimal_degrees % 360 : decimal_degrees
100
+ ).round(9),
99
101
  radians: decimal_degrees_to_radians(decimal_degrees, normalize: normalize)
100
102
  )
101
103
  end
@@ -149,7 +151,8 @@ module Lunation
149
151
  end
150
152
 
151
153
  private def decimal_degrees_to_radians(decimal_degrees, normalize: true)
152
- result = (normalize ? decimal_degrees % 360 : decimal_degrees) * Math::PI / 180.0
154
+ result = (normalize ? decimal_degrees % 360 : decimal_degrees) *
155
+ Math::PI / 180.0
153
156
  result.round(9)
154
157
  end
155
158
 
@@ -159,7 +162,7 @@ module Lunation
159
162
  decimal_arcseconds,
160
163
  normalize: true
161
164
  )
162
- result = degrees + arcminutes / 60.0 + decimal_arcseconds / 3600.0
165
+ result = degrees + arcminutes.fdiv(60) + decimal_arcseconds.fdiv(3600)
163
166
  (normalize ? result % 360 : result).round(9)
164
167
  end
165
168
 
@@ -169,7 +172,7 @@ module Lunation
169
172
  decimal_seconds,
170
173
  normalize: true
171
174
  )
172
- result = hours * 15.0 + minutes / 4.0 + decimal_seconds / 240.0
175
+ result = hours * 15.0 + minutes.fdiv(4.0) + decimal_seconds.fdiv(240.0)
173
176
  (normalize ? result % 360 : result).round(9)
174
177
  end
175
178
 
@@ -177,7 +180,7 @@ module Lunation
177
180
  decimal_arcseconds,
178
181
  normalize: true
179
182
  )
180
- result = decimal_arcseconds / 3600.0
183
+ result = decimal_arcseconds.fdiv(3600.0)
181
184
  (normalize ? result % 360 : result).round(9)
182
185
  end
183
186
  end
@@ -58,7 +58,7 @@ module Lunation
58
58
  second_series = reduce_periodic_terms(PERIODIC_TERMS_B1)
59
59
 
60
60
  Angle.from_radians(
61
- (first_series + second_series * time_millennia) / 100_000_000.0,
61
+ (first_series + second_series * time_millennia).fdiv(100_000_000),
62
62
  normalize: false
63
63
  )
64
64
  end
@@ -5,14 +5,15 @@ module Lunation
5
5
  # UNIT: fraction (decimal)
6
6
  def moon_illuminated_fraction
7
7
  @moon_illuminated_fraction ||=
8
- ((1 + moon_phase_angle.cos) / 2.0).round(4)
8
+ (1 + moon_phase_angle.cos).fdiv(2).round(4)
9
9
  end
10
10
 
11
11
  # (i) phase angle of the moon (48.3, A.A. p. 346)
12
12
  # UNIT: Angle
13
13
  def moon_phase_angle
14
14
  @moon_phase_angle ||= begin
15
- numerator = distance_between_earth_and_sun_in_kilometers * moon_elongation_from_sun.sin
15
+ numerator = distance_between_earth_and_sun_in_kilometers *
16
+ moon_elongation_from_sun.sin
16
17
  denominator = distance_between_earth_and_moon -
17
18
  distance_between_earth_and_sun_in_kilometers * moon_elongation_from_sun.cos
18
19
  Angle.from_radians(Math.atan2(numerator, denominator))
@@ -4,14 +4,14 @@ module Lunation
4
4
  class Calculation
5
5
  module MoonPosition
6
6
  # rubocop:disable Layout/LineLength
7
- LONGITUDE_AND_DISTANCE_OF_MOON_PERIODIC_TERMS_PATH = File.expand_path("../../../config/periodic_terms_moon_longitude_distance.yml", __dir__).freeze
8
- LATITUDE_OF_MOON_PERIODIC_TERMS_PATH = File.expand_path("../../../config/periodic_terms_moon_latitude.yml", __dir__).freeze
9
- LONGITUDE_AND_DISTANCE_OF_MOON_PERIODIC_TERMS = YAML.load_file(LONGITUDE_AND_DISTANCE_OF_MOON_PERIODIC_TERMS_PATH).freeze
10
- LATITUDE_OF_MOON_PERIODIC_TERMS = YAML.load_file(LATITUDE_OF_MOON_PERIODIC_TERMS_PATH).freeze
11
- MOON_MEAN_LONGITUDE_CONSTANTS = [218.3164477, 481_267.88123421, -0.0015786, 1 / 538_841.0, -1 / 65_194_000.0].freeze
12
- MOON_MEAN_ELONGATION_CONSTANTS = [297.8501921, 445_267.1114034, -0.0018819, 1 / 545_868.0, -1 / 113_065_000.0].freeze
13
- MOON_MEAN_ANOMALY_CONSTANTS = [134.9633964, 477_198.8675055, 0.0087414, 1 / 69_699.0, -1 / 14_712_000.0].freeze
14
- MOON_ARGUMENT_OF_LATITUDE_CONSTANTS = [93.2720950, 483_202.0175233, -0.0036539, -1 / 3_526_000.0, 1 / 863_310_000.0].freeze
7
+ MOON_LONGITUDE_AND_DISTANCE_PERIOD_TERMS_PATH = File.expand_path("../../../config/periodic_terms_moon_longitude_distance.yml", __dir__).freeze
8
+ MOON_LATITUDE_PERIOD_TERMS_PATH = File.expand_path("../../../config/periodic_terms_moon_latitude.yml", __dir__).freeze
9
+ MOON_LONGITUDE_AND_DISTANCE_PERIOD_TERMS = YAML.load_file(MOON_LONGITUDE_AND_DISTANCE_PERIOD_TERMS_PATH).freeze
10
+ MOON_LATITUDE_PERIOD_TERMS = YAML.load_file(MOON_LATITUDE_PERIOD_TERMS_PATH).freeze
11
+ MOON_MEAN_LONGITUDE_CONSTANTS = [218.3164477, 481_267.88123421, -0.0015786, 1.fdiv(538_841), -1.fdiv(65_194_000)].freeze
12
+ MOON_MEAN_ELONGATION_CONSTANTS = [297.8501921, 445_267.1114034, -0.0018819, 1.fdiv(545_868), -1.fdiv(113_065_000)].freeze
13
+ MOON_MEAN_ANOMALY_CONSTANTS = [134.9633964, 477_198.8675055, 0.0087414, 1.fdiv(69_699), -1.fdiv(14_712_000)].freeze
14
+ MOON_ARGUMENT_OF_LATITUDE_CONSTANTS = [93.2720950, 483_202.0175233, -0.0036539, -1.fdiv(3_526_000), 1.fdiv(863_310_000)].freeze
15
15
  CORRECTION_ECCENTRICITY_OF_EARTH_CONSTANTS = [1, -0.002516, -0.0000074].freeze
16
16
  FIXED_DISTANCE_BETWEEN_EARTH_AND_MOON = 385_000.56
17
17
  RADIUS_OF_EARTH = 6378.14
@@ -77,22 +77,22 @@ module Lunation
77
77
  # UNIT: decimal degrees
78
78
  def moon_heliocentric_longitude
79
79
  @moon_heliocentric_longitude ||= begin
80
- result = LONGITUDE_AND_DISTANCE_OF_MOON_PERIODIC_TERMS.inject(0.0) do |acc, elem|
80
+ result = MOON_LONGITUDE_AND_DISTANCE_PERIOD_TERMS.inject(0.0) do |acc, elem|
81
81
  sine_argument = Angle.from_decimal_degrees(
82
- elem["moon_mean_elongation"] * moon_mean_elongation_from_sun_high_precision.decimal_degrees +
83
- elem["sun_mean_anomaly"] * sun_mean_anomaly2.decimal_degrees +
84
- elem["moon_mean_anomaly"] * moon_mean_anomaly_high_precision.decimal_degrees +
85
- elem["moon_argument_of_latitude"] * moon_argument_of_latitude_high_precision.decimal_degrees
82
+ elem[0] * moon_mean_elongation_from_sun_high_precision.decimal_degrees +
83
+ elem[1] * sun_mean_anomaly2.decimal_degrees +
84
+ elem[2] * moon_mean_anomaly_high_precision.decimal_degrees +
85
+ elem[3] * moon_argument_of_latitude_high_precision.decimal_degrees
86
86
  )
87
87
 
88
- if elem["sine_coefficient"].nil?
88
+ if elem[4].nil?
89
89
  next acc
90
- elsif [1, -1].include?(elem["sun_mean_anomaly"])
91
- acc + elem["sine_coefficient"] * correction_eccentricity_of_earth * sine_argument.sin
92
- elsif [-2, 2].include?(elem["sun_mean_anomaly"])
93
- acc + elem["sine_coefficient"] * correction_eccentricity_of_earth**2 * sine_argument.sin
90
+ elsif [1, -1].include?(elem[1])
91
+ acc + elem[4] * correction_eccentricity_of_earth * sine_argument.sin
92
+ elsif [-2, 2].include?(elem[1])
93
+ acc + elem[4] * correction_eccentricity_of_earth**2 * sine_argument.sin
94
94
  else
95
- acc + elem["sine_coefficient"] * sine_argument.sin
95
+ acc + elem[4] * sine_argument.sin
96
96
  end
97
97
  end + 3958 * correction_venus.sin +
98
98
  1962 * (moon_mean_longitude - moon_argument_of_latitude_high_precision).sin +
@@ -105,22 +105,22 @@ module Lunation
105
105
  # UNIT: decimal degrees
106
106
  def moon_heliocentric_latitude
107
107
  @moon_heliocentric_latitude ||= begin
108
- result = LATITUDE_OF_MOON_PERIODIC_TERMS.inject(0.0) do |acc, elem|
108
+ result = MOON_LATITUDE_PERIOD_TERMS.inject(0.0) do |acc, elem|
109
109
  sine_argument = Angle.from_decimal_degrees(
110
- elem["moon_mean_elongation"] * moon_mean_elongation_from_sun_high_precision.decimal_degrees +
111
- elem["sun_mean_anomaly"] * sun_mean_anomaly2.decimal_degrees +
112
- elem["moon_mean_anomaly"] * moon_mean_anomaly_high_precision.decimal_degrees +
113
- elem["moon_argument_of_latitude"] * moon_argument_of_latitude_high_precision.decimal_degrees
110
+ elem[0] * moon_mean_elongation_from_sun_high_precision.decimal_degrees +
111
+ elem[1] * sun_mean_anomaly2.decimal_degrees +
112
+ elem[2] * moon_mean_anomaly_high_precision.decimal_degrees +
113
+ elem[3] * moon_argument_of_latitude_high_precision.decimal_degrees
114
114
  )
115
115
 
116
- if elem["sine_coefficient"].nil?
116
+ if elem[4].nil?
117
117
  next acc
118
- elsif [1, -1].include?(elem["sun_mean_anomaly"])
119
- acc + elem["sine_coefficient"] * correction_eccentricity_of_earth * sine_argument.sin
120
- elsif [-2, 2].include?(elem["sun_mean_anomaly"])
121
- acc + elem["sine_coefficient"] * correction_eccentricity_of_earth**2 * sine_argument.sin
118
+ elsif [1, -1].include?(elem[1])
119
+ acc + elem[4] * correction_eccentricity_of_earth * sine_argument.sin
120
+ elsif [-2, 2].include?(elem[1])
121
+ acc + elem[4] * correction_eccentricity_of_earth**2 * sine_argument.sin
122
122
  else
123
- acc + elem["sine_coefficient"] * sine_argument.sin
123
+ acc + elem[4] * sine_argument.sin
124
124
  end
125
125
  end - 2235 * moon_mean_longitude.sin +
126
126
  382 * correction_latitude.sin +
@@ -136,22 +136,22 @@ module Lunation
136
136
  # UNIT: 1000 km
137
137
  def moon_heliocentric_distance
138
138
  @moon_heliocentric_distance ||= begin
139
- result = LONGITUDE_AND_DISTANCE_OF_MOON_PERIODIC_TERMS.inject(0.0) do |acc, elem|
139
+ result = MOON_LONGITUDE_AND_DISTANCE_PERIOD_TERMS.inject(0.0) do |acc, elem|
140
140
  cosine_argument = Angle.from_decimal_degrees(
141
- elem["moon_mean_elongation"] * moon_mean_elongation_from_sun_high_precision.decimal_degrees +
142
- elem["sun_mean_anomaly"] * sun_mean_anomaly2.decimal_degrees +
143
- elem["moon_mean_anomaly"] * moon_mean_anomaly_high_precision.decimal_degrees +
144
- elem["moon_argument_of_latitude"] * moon_argument_of_latitude_high_precision.decimal_degrees
141
+ elem[0] * moon_mean_elongation_from_sun_high_precision.decimal_degrees +
142
+ elem[1] * sun_mean_anomaly2.decimal_degrees +
143
+ elem[2] * moon_mean_anomaly_high_precision.decimal_degrees +
144
+ elem[3] * moon_argument_of_latitude_high_precision.decimal_degrees
145
145
  )
146
146
 
147
- if elem["cosine_coefficient"].nil?
147
+ if elem[5].nil?
148
148
  next acc
149
- elsif [1, -1].include?(elem["sun_mean_anomaly"])
150
- acc + elem["cosine_coefficient"] * correction_eccentricity_of_earth * cosine_argument.cos
151
- elsif [-2, 2].include?(elem["sun_mean_anomaly"])
152
- acc + elem["cosine_coefficient"] * correction_eccentricity_of_earth**2 * cosine_argument.cos
149
+ elsif [1, -1].include?(elem[1])
150
+ acc + elem[5] * correction_eccentricity_of_earth * cosine_argument.cos
151
+ elsif [-2, 2].include?(elem[1])
152
+ acc + elem[5] * correction_eccentricity_of_earth**2 * cosine_argument.cos
153
153
  else
154
- acc + elem["cosine_coefficient"] * cosine_argument.cos
154
+ acc + elem[5] * cosine_argument.cos
155
155
  end
156
156
  end
157
157
  result.round
@@ -162,7 +162,8 @@ module Lunation
162
162
  # UNIT: Angle
163
163
  def moon_ecliptic_longitude
164
164
  @moon_ecliptic_longitude ||= Angle.from_decimal_degrees(
165
- moon_mean_longitude.decimal_degrees + moon_heliocentric_longitude / 1_000_000.0
165
+ moon_mean_longitude.decimal_degrees +
166
+ moon_heliocentric_longitude.fdiv(1_000_000)
166
167
  )
167
168
  end
168
169
 
@@ -170,7 +171,7 @@ module Lunation
170
171
  # UNIT: Angle
171
172
  def moon_ecliptic_latitude
172
173
  @moon_ecliptic_latitude ||= Angle.from_decimal_degrees(
173
- moon_heliocentric_latitude / 1_000_000.0,
174
+ moon_heliocentric_latitude.fdiv(1_000_000),
174
175
  normalize: false
175
176
  )
176
177
  end
@@ -180,7 +181,7 @@ module Lunation
180
181
  def distance_between_earth_and_moon
181
182
  @distance_between_earth_and_moon ||= begin
182
183
  result = FIXED_DISTANCE_BETWEEN_EARTH_AND_MOON +
183
- (moon_heliocentric_distance / 1_000.0)
184
+ moon_heliocentric_distance.fdiv(1_000)
184
185
  result.round(1)
185
186
  end
186
187
  end
@@ -196,7 +197,8 @@ module Lunation
196
197
  # (apparent λ) Moon apparent longitude (A.A. p. 343)
197
198
  # UNIT: Angle
198
199
  def moon_apparent_ecliptic_longitude
199
- @moon_apparent_ecliptic_longitude ||= moon_ecliptic_longitude + nutation_in_longitude
200
+ @moon_apparent_ecliptic_longitude ||=
201
+ moon_ecliptic_longitude + nutation_in_longitude
200
202
  end
201
203
 
202
204
  # (α) geocentric (apparent) right ascension of the moon (13.3 A.A. p. 93)