astronoby 0.6.0 → 0.7.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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -0
  3. data/.standard.yml +1 -0
  4. data/CHANGELOG.md +116 -0
  5. data/Gemfile.lock +45 -23
  6. data/README.md +42 -285
  7. data/UPGRADING.md +238 -0
  8. data/lib/astronoby/aberration.rb +56 -31
  9. data/lib/astronoby/angle.rb +20 -16
  10. data/lib/astronoby/angles/dms.rb +2 -2
  11. data/lib/astronoby/angles/hms.rb +2 -2
  12. data/lib/astronoby/bodies/earth.rb +56 -0
  13. data/lib/astronoby/bodies/jupiter.rb +11 -0
  14. data/lib/astronoby/bodies/mars.rb +11 -0
  15. data/lib/astronoby/bodies/mercury.rb +11 -0
  16. data/lib/astronoby/bodies/moon.rb +50 -290
  17. data/lib/astronoby/bodies/neptune.rb +11 -0
  18. data/lib/astronoby/bodies/saturn.rb +11 -0
  19. data/lib/astronoby/bodies/solar_system_body.rb +122 -0
  20. data/lib/astronoby/bodies/sun.rb +16 -220
  21. data/lib/astronoby/bodies/uranus.rb +11 -0
  22. data/lib/astronoby/bodies/venus.rb +11 -0
  23. data/lib/astronoby/constants.rb +13 -1
  24. data/lib/astronoby/coordinates/ecliptic.rb +2 -37
  25. data/lib/astronoby/coordinates/equatorial.rb +25 -7
  26. data/lib/astronoby/coordinates/horizontal.rb +0 -46
  27. data/lib/astronoby/corrections/light_time_delay.rb +90 -0
  28. data/lib/astronoby/deflection.rb +187 -0
  29. data/lib/astronoby/distance.rb +9 -0
  30. data/lib/astronoby/ephem.rb +39 -0
  31. data/lib/astronoby/equinox_solstice.rb +21 -18
  32. data/lib/astronoby/errors.rb +4 -0
  33. data/lib/astronoby/events/moon_phases.rb +2 -1
  34. data/lib/astronoby/events/rise_transit_set_calculator.rb +352 -0
  35. data/lib/astronoby/events/rise_transit_set_event.rb +13 -0
  36. data/lib/astronoby/events/rise_transit_set_events.rb +13 -0
  37. data/lib/astronoby/events/twilight_calculator.rb +166 -0
  38. data/lib/astronoby/events/twilight_event.rb +28 -0
  39. data/lib/astronoby/instant.rb +171 -0
  40. data/lib/astronoby/mean_obliquity.rb +23 -10
  41. data/lib/astronoby/nutation.rb +227 -42
  42. data/lib/astronoby/observer.rb +55 -0
  43. data/lib/astronoby/precession.rb +91 -17
  44. data/lib/astronoby/reference_frame.rb +49 -0
  45. data/lib/astronoby/reference_frames/apparent.rb +60 -0
  46. data/lib/astronoby/reference_frames/astrometric.rb +21 -0
  47. data/lib/astronoby/reference_frames/geometric.rb +20 -0
  48. data/lib/astronoby/reference_frames/mean_of_date.rb +38 -0
  49. data/lib/astronoby/reference_frames/topocentric.rb +82 -0
  50. data/lib/astronoby/true_obliquity.rb +2 -1
  51. data/lib/astronoby/util/maths.rb +70 -73
  52. data/lib/astronoby/util/time.rb +454 -31
  53. data/lib/astronoby/vector.rb +36 -0
  54. data/lib/astronoby/velocity.rb +116 -0
  55. data/lib/astronoby/version.rb +1 -1
  56. data/lib/astronoby.rb +26 -5
  57. metadata +61 -16
  58. data/.tool-versions +0 -1
  59. data/lib/astronoby/astronomical_models/ephemeride_lunaire_parisienne.rb +0 -143
  60. data/lib/astronoby/events/observation_events.rb +0 -285
  61. data/lib/astronoby/events/rise_transit_set_iteration.rb +0 -218
  62. data/lib/astronoby/events/twilight_events.rb +0 -121
  63. data/lib/astronoby/util/astrodynamics.rb +0 -60
@@ -3,6 +3,450 @@
3
3
  module Astronoby
4
4
  module Util
5
5
  module Time
6
+ OLD_LEAP_SECONDS = {
7
+ 2378496.5 => 13.188148343557259,
8
+ 2378677.5 => 12.977779959648615,
9
+ 2378861.5 => 12.789307379498496,
10
+ 2379042.5 => 12.627219619724201,
11
+ 2379226.5 => 12.484534330869792,
12
+ 2379407.5 => 12.364396579316235,
13
+ 2379591.5 => 12.261337343137711,
14
+ 2379772.5 => 12.1773053980869,
15
+ 2379956.5 => 12.108106397237862,
16
+ 2380138.5 => 12.054387758878875,
17
+ 2380322.5 => 12.013603253144538,
18
+ 2380503.5 => 11.98543684683682,
19
+ 2380687.5 => 11.96762962192588,
20
+ 2380868.5 => 11.959480197547236,
21
+ 2381052.5 => 11.959422685911704,
22
+ 2381233.5 => 11.966206580204016,
23
+ 2381417.5 => 11.978793920316093,
24
+ 2381599.5 => 11.99566047854023,
25
+ 2381783.5 => 12.015950798828271,
26
+ 2381964.5 => 12.037916332170425,
27
+ 2382148.5 => 12.061120228798245,
28
+ 2382329.5 => 12.083698914131674,
29
+ 2382513.5 => 12.10530703765835,
30
+ 2382694.5 => 12.12421078250918,
31
+ 2382878.5 => 12.140030777663924,
32
+ 2383060.5 => 12.151364887780801,
33
+ 2383244.5 => 12.157556479887717,
34
+ 2383425.5 => 12.15765329658825,
35
+ 2383609.5 => 12.150876665651595,
36
+ 2383790.5 => 12.136746181382478,
37
+ 2383974.5 => 12.114144526847667,
38
+ 2384155.5 => 12.083243093009514,
39
+ 2384339.5 => 12.042512500593148,
40
+ 2384521.5 => 11.992558943176846,
41
+ 2384705.5 => 11.931929977163236,
42
+ 2384886.5 => 11.862085932760237,
43
+ 2385070.5 => 11.78051543343463,
44
+ 2385251.5 => 11.689763871143441,
45
+ 2385435.5 => 11.586784825234645,
46
+ 2385616.5 => 11.474975813831406,
47
+ 2385800.5 => 11.350748372411545,
48
+ 2385982.5 => 11.21758410586699,
49
+ 2386166.5 => 11.072826269341022,
50
+ 2386347.5 => 10.920825074952518,
51
+ 2386531.5 => 10.756952695481232,
52
+ 2386712.5 => 10.587020134840714,
53
+ 2386896.5 => 10.405935512304495,
54
+ 2387077.5 => 10.22019193469896,
55
+ 2387261.5 => 10.024289426956784,
56
+ 2387443.5 => 9.824194633200023,
57
+ 2387627.5 => 9.616270032883222,
58
+ 2387808.5 => 9.406995099559936,
59
+ 2387992.5 => 9.190269937098492,
60
+ 2388173.5 => 8.974012950570796,
61
+ 2388357.5 => 8.751953043760295,
62
+ 2388538.5 => 8.532231137086455,
63
+ 2388722.5 => 8.308500055015429,
64
+ 2388904.5 => 8.087772834055613,
65
+ 2389088.5 => 7.866155700010495,
66
+ 2389269.5 => 7.650592317289465,
67
+ 2389453.5 => 7.434884049415814,
68
+ 2389634.5 => 7.226980347727022,
69
+ 2389818.5 => 7.020908291692649,
70
+ 2389999.5 => 6.824264827564548,
71
+ 2390183.5 => 6.631400447266969,
72
+ 2390365.5 => 6.448439782438527,
73
+ 2390549.5 => 6.272163832553815,
74
+ 2390730.5 => 6.1080329005421845,
75
+ 2390914.5 => 5.951314816355762,
76
+ 2391095.5 => 5.807762833132756,
77
+ 2391279.5 => 5.67321983816305,
78
+ 2391460.5 => 5.552603443019962,
79
+ 2391644.5 => 5.442394451603377,
80
+ 2391826.5 => 5.346096742151303,
81
+ 2392010.5 => 5.261939180030367,
82
+ 2392191.5 => 5.192368075351851,
83
+ 2392375.5 => 5.135275347080096,
84
+ 2392556.5 => 5.092642595328925,
85
+ 2392740.5 => 5.0631020675593845,
86
+ 2392921.5 => 5.047585133826715,
87
+ 2393105.5 => 5.045466038021345,
88
+ 2393287.5 => 5.056725300162157,
89
+ 2393471.5 => 5.0813396174220316,
90
+ 2393652.5 => 5.118191578710935,
91
+ 2393836.5 => 5.168077283418484,
92
+ 2394017.5 => 5.228879316252119,
93
+ 2394201.5 => 5.302037309391551,
94
+ 2394382.5 => 5.384531632259211,
95
+ 2394566.5 => 5.478379147577186,
96
+ 2394748.5 => 5.580335613932505,
97
+ 2394932.5 => 5.691789788972983,
98
+ 2395113.5 => 5.80875494138661,
99
+ 2395297.5 => 5.934144330408458,
100
+ 2395478.5 => 6.062875593983534,
101
+ 2395662.5 => 6.198153542957755,
102
+ 2395843.5 => 6.334486342631209,
103
+ 2396027.5 => 6.475251951900248,
104
+ 2396209.5 => 6.615483952215641,
105
+ 2396393.5 => 6.757060416676296,
106
+ 2396574.5 => 6.894941705629094,
107
+ 2396758.5 => 7.032466496923803,
108
+ 2396939.5 => 7.163937749348335,
109
+ 2397123.5 => 7.292473172750462,
110
+ 2397304.5 => 7.412673143453404,
111
+ 2397488.5 => 7.527299162998588,
112
+ 2397670.5 => 7.631984548218753,
113
+ 2397854.5 => 7.727845571025242,
114
+ 2398035.5 => 7.811233918589153,
115
+ 2398219.5 => 7.883805096017731,
116
+ 2398400.5 => 7.942151870516433,
117
+ 2398584.5 => 7.9871958259539895,
118
+ 2398765.5 => 8.016533772126351,
119
+ 2398949.5 => 8.030246708433822,
120
+ 2399131.5 => 8.02701838727982,
121
+ 2399315.5 => 8.00602743589197,
122
+ 2399496.5 => 7.967334857492741,
123
+ 2399680.5 => 7.909076736075594,
124
+ 2399861.5 => 7.832672030889775,
125
+ 2400045.5 => 7.73519070466137,
126
+ 2400226.5 => 7.619518664506842,
127
+ 2400410.5 => 7.4816235218118,
128
+ 2400592.5 => 7.324994613580456,
129
+ 2400776.5 => 7.146202934871676,
130
+ 2400957.5 => 6.9503926382285375,
131
+ 2401141.5 => 6.73130493384776,
132
+ 2401322.5 => 6.496419397354267,
133
+ 2401506.5 => 6.238403444540144,
134
+ 2401687.5 => 5.966222444405794,
135
+ 2401871.5 => 5.671527091411464,
136
+ 2402053.5 => 5.362950462274329,
137
+ 2402237.5 => 5.034600715553276,
138
+ 2402418.5 => 4.6965018330360175,
139
+ 2402602.5 => 4.3385322957757895,
140
+ 2402783.5 => 3.973519127096933,
141
+ 2402967.5 => 3.5906303869208167,
142
+ 2403148.5 => 3.2036725995868243,
143
+ 2403332.5 => 2.8012444581490232,
144
+ 2403514.5 => 2.3956847018984218,
145
+ 2403698.5 => 1.9796421127117891,
146
+ 2403879.5 => 1.5660461742034346,
147
+ 2404063.5 => 1.1428361434845933,
148
+ 2404244.5 => 0.7254582284581174,
149
+ 2404428.5 => 0.30178135991199984,
150
+ 2404609.5 => -0.11270006148430323,
151
+ 2404793.5 => -0.5300097435221406,
152
+ 2404975.5 => -0.9370907950094551,
153
+ 2405159.5 => -1.3412024731958803,
154
+ 2405340.5 => -1.7298134540480932,
155
+ 2405524.5 => -2.1142122995718458,
156
+ 2405705.5 => -2.480366366734088,
157
+ 2405889.5 => -2.83895781510422,
158
+ 2406070.5 => -3.176956105380124,
159
+ 2406254.5 => -3.504300154151409,
160
+ 2406436.5 => -3.8108248494746757,
161
+ 2406620.5 => -4.10223814009868,
162
+ 2406801.5 => -4.3699035350160695,
163
+ 2406985.5 => -4.621958792228032,
164
+ 2407166.5 => -4.849622707292203,
165
+ 2407350.5 => -5.060038124929611,
166
+ 2407531.5 => -5.2461236702027385,
167
+ 2407715.5 => -5.414009715942285,
168
+ 2407897.5 => -5.559113801802489,
169
+ 2408081.5 => -5.684979055402733,
170
+ 2408262.5 => -5.788896181101112,
171
+ 2408446.5 => -5.875063703703072,
172
+ 2408627.5 => -5.941604136061755,
173
+ 2408811.5 => -5.99187142911113,
174
+ 2408992.5 => -6.025534115559931,
175
+ 2409176.5 => -6.045223454604344,
176
+ 2409358.5 => -6.051947540372789,
177
+ 2409542.5 => -6.047693019280377,
178
+ 2409723.5 => -6.034585530924514,
179
+ 2409907.5 => -6.014253694220111,
180
+ 2410088.5 => -5.989451801657724,
181
+ 2410272.5 => -5.9615356388374785,
182
+ 2410453.5 => -5.933547174681333,
183
+ 2410637.5 => -5.9066933163237305,
184
+ 2410819.5 => -5.883732076789566,
185
+ 2411003.5 => -5.866053442239031,
186
+ 2411184.5 => -5.855727871403548,
187
+ 2411368.5 => -5.8537912883455165,
188
+ 2411549.5 => -5.861293927323844,
189
+ 2411733.5 => -5.879036033749507,
190
+ 2411914.5 => -5.906436546760297,
191
+ 2412098.5 => -5.9437407187970415,
192
+ 2412280.5 => -5.988588134352584,
193
+ 2412464.5 => -6.039608414140064,
194
+ 2412645.5 => -6.092048605632098,
195
+ 2412829.5 => -6.143066911075388,
196
+ 2413010.5 => -6.18519588086268,
197
+ 2413194.5 => -6.212372490839427,
198
+ 2413375.5 => -6.214734852478125,
199
+ 2413559.5 => -6.1812687926510375,
200
+ 2413741.5 => -6.0995165979128165,
201
+ 2413925.5 => -5.95200691711783,
202
+ 2414106.5 => -5.725411356266838,
203
+ 2414290.5 => -5.391101186767492,
204
+ 2414471.5 => -4.936214592188059,
205
+ 2414655.5 => -4.31790503046886,
206
+ 2414836.5 => -3.52545025806083,
207
+ 2415020.5 => -2.4388055967284674,
208
+ 2415201.5 => -1.9866921101473605,
209
+ 2415385.5 => -1.4881903065314066,
210
+ 2415566.5 => -0.9618691218134782,
211
+ 2415750.5 => -0.39284264593890794,
212
+ 2415931.5 => 0.19767418413824753,
213
+ 2416115.5 => 0.8264165244917904,
214
+ 2416296.5 => 1.4700172355479844,
215
+ 2416480.5 => 2.1468253465826375,
216
+ 2416662.5 => 2.835652766092306,
217
+ 2416846.5 => 3.5486047317343434,
218
+ 2417027.5 => 4.263231363098808,
219
+ 2417211.5 => 5.000259983924892,
220
+ 2417392.5 => 5.732816046006328,
221
+ 2417576.5 => 6.482353812962369,
222
+ 2417757.5 => 7.221751119829495,
223
+ 2417941.5 => 7.972880371561444,
224
+ 2418123.5 => 8.712831317161704,
225
+ 2418307.5 => 9.455454046423558,
226
+ 2418488.5 => 10.178387509185434,
227
+ 2418672.5 => 10.903463404820002,
228
+ 2418853.5 => 11.605090872859282,
229
+ 2419037.5 => 12.304684798828276,
230
+ 2419218.5 => 12.977775178916021,
231
+ 2419402.5 => 13.64513190798989,
232
+ 2419584.5 => 14.287108978143385,
233
+ 2419768.5 => 14.916572237369076,
234
+ 2419949.5 => 15.515510607554367,
235
+ 2420133.5 => 16.10284118737613,
236
+ 2420314.5 => 16.65863855961404,
237
+ 2420498.5 => 17.20068006434343,
238
+ 2420679.5 => 17.710794402822042,
239
+ 2420863.5 => 18.205520004226692,
240
+ 2421045.5 => 18.67098146138676,
241
+ 2421229.5 => 19.11729362430148,
242
+ 2421410.5 => 19.53253120288024,
243
+ 2421594.5 => 19.930579247056528,
244
+ 2421775.5 => 20.29868147462184,
245
+ 2421959.5 => 20.649370571074524,
246
+ 2422140.5 => 20.971627610669987,
247
+ 2422324.5 => 21.276649743274778,
248
+ 2422506.5 => 21.55655418126106,
249
+ 2422690.5 => 21.818167846062344,
250
+ 2422871.5 => 22.055281124221217,
251
+ 2423055.5 => 22.27655644857247,
252
+ 2423236.5 => 22.47561690120095,
253
+ 2423420.5 => 22.65996646290686,
254
+ 2423601.5 => 22.82452002838678,
255
+ 2423785.5 => 22.97571425952653,
256
+ 2423967.5 => 23.110308267157464,
257
+ 2424151.5 => 23.23229795912879,
258
+ 2424332.5 => 23.339511501395894,
259
+ 2424516.5 => 23.436563200676833,
260
+ 2424697.5 => 23.52133058525957,
261
+ 2424881.5 => 23.597688707429405,
262
+ 2425062.5 => 23.664184372246805,
263
+ 2425246.5 => 23.72407135482779,
264
+ 2425428.5 => 23.776681991877023,
265
+ 2425612.5 => 23.82419274912977,
266
+ 2425793.5 => 23.866331353902197,
267
+ 2425977.5 => 23.905460169259943,
268
+ 2426158.5 => 23.941218197004247,
269
+ 2426342.5 => 23.975692579033176,
270
+ 2426523.5 => 24.008605928439557,
271
+ 2426707.5 => 24.04187605377498,
272
+ 2426889.5 => 24.07537378002682,
273
+ 2427073.5 => 24.11058140261558,
274
+ 2427254.5 => 24.14721547072987,
275
+ 2427438.5 => 24.187142464135416,
276
+ 2427619.5 => 24.229652439984108,
277
+ 2427803.5 => 24.276712008407983,
278
+ 2427984.5 => 24.327284837979363,
279
+ 2428168.5 => 24.38350825339512,
280
+ 2428350.5 => 24.44430127350479,
281
+ 2428534.5 => 24.511366094895674,
282
+ 2428715.5 => 24.583145405760572,
283
+ 2428899.5 => 24.662288857343256,
284
+ 2429080.5 => 24.74643544094861,
285
+ 2429264.5 => 24.838554819441654,
286
+ 2429445.5 => 24.935777490385995,
287
+ 2429629.5 => 25.041422412562163,
288
+ 2429811.5 => 25.15273021858507,
289
+ 2429995.5 => 25.27216643328502,
290
+ 2430176.5 => 25.39641349476654,
291
+ 2430360.5 => 25.529540768204548,
292
+ 2430541.5 => 25.667128929194487,
293
+ 2430725.5 => 25.81363084582551,
294
+ 2430906.5 => 25.96413859864814,
295
+ 2431090.5 => 26.123484991687462,
296
+ 2431272.5 => 26.287217201519887,
297
+ 2431456.5 => 26.458739053598578,
298
+ 2431637.5 => 26.63313685630417,
299
+ 2431821.5 => 26.815971902751684,
300
+ 2432002.5 => 27.00105856424981,
301
+ 2432186.5 => 27.19429786593409,
302
+ 2432367.5 => 27.38915617204269,
303
+ 2432551.5 => 27.591855093366206,
304
+ 2432733.5 => 27.796691496947233,
305
+ 2432917.5 => 28.007936001208634,
306
+ 2433098.5 => 28.219596370060827,
307
+ 2433282.5 => 28.4384765624998,
308
+ 2433463.5 => 28.65724359589477,
309
+ 2433647.5 => 28.882964215782437,
310
+ 2433828.5 => 29.108113222396952,
311
+ 2434012.5 => 29.34000446979161,
312
+ 2434194.5 => 29.57223350574489,
313
+ 2434378.5 => 29.809796836408253,
314
+ 2434559.5 => 30.046134632450332,
315
+ 2434743.5 => 30.289022739879897,
316
+ 2434924.5 => 30.53050884062472,
317
+ 2435108.5 => 30.778591836086775,
318
+ 2435289.5 => 31.025202633417564,
319
+ 2435473.5 => 31.27856475284625,
320
+ 2435655.5 => 31.53189044630176,
321
+ 2435839.5 => 31.79085168727164,
322
+ 2436020.5 => 32.04851687044061,
323
+ 2436204.5 => 32.31358519491181,
324
+ 2436385.5 => 32.57759273374779,
325
+ 2436569.5 => 32.84949938063994,
326
+ 2436750.5 => 33.12066519162579,
327
+ 2436934.5 => 33.40033242784773,
328
+ 2437116.5 => 33.68120412544363,
329
+ 2437300.5 => 33.96974573155137,
330
+ 2437481.5 => 34.258379750810946,
331
+ 2437665.5 => 34.5569937600327,
332
+ 2437846.5 => 34.85617296641749,
333
+ 2438030.5 => 35.16617185935229,
334
+ 2438211.5 => 35.47721532145181,
335
+ 2438395.5 => 35.799955711962184,
336
+ 2438577.5 => 36.12601075254611,
337
+ 2438761.5 => 36.46287982255012,
338
+ 2438942.5 => 36.801664953153704,
339
+ 2439126.5 => 37.1539031471541,
340
+ 2439307.5 => 37.50838994184596,
341
+ 2439491.5 => 37.877141110449884,
342
+ 2439672.5 => 38.24836458592608,
343
+ 2439856.5 => 38.634572113308195,
344
+ 2440038.5 => 39.02550887261282,
345
+ 2440222.5 => 39.42989718222407,
346
+ 2440403.5 => 39.83675728105027,
347
+ 2440587.5 => 40.25961253333708,
348
+ 2440768.5 => 40.68465798505122,
349
+ 2440952.5 => 41.12591019247293,
350
+ 2441133.5 => 41.568849508274525,
351
+ 2441317.5 => 42.02796103684432,
352
+ 2441499.5 => 42.49057858125434,
353
+ 2441683.5 => 42.966532268043466,
354
+ 2441864.5 => 43.442420967015096,
355
+ 2442048.5 => 43.93353617862613,
356
+ 2442229.5 => 44.42331491540972,
357
+ 2442413.5 => 44.92735455766797,
358
+ 2442594.5 => 45.428517738630035,
359
+ 2442778.5 => 45.942622367844706,
360
+ 2442960.5 => 46.454873246740135,
361
+ 2443144.5 => 46.97557507852889,
362
+ 2443325.5 => 47.489552682778594,
363
+ 2443509.5 => 48.012750281605804,
364
+ 2443690.5 => 48.52697224120766,
365
+ 2443874.5 => 49.048043614533526,
366
+ 2444055.5 => 49.557725033980205,
367
+ 2444239.5 => 50.0715895041767,
368
+ 2444421.5 => 50.574294001573435,
369
+ 2444605.5 => 51.0754922955166,
370
+ 2444786.5 => 51.56024559759862,
371
+ 2444970.5 => 52.04321620585506,
372
+ 2445151.5 => 52.50729086053434,
373
+ 2445335.5 => 52.966488008352826,
374
+ 2445516.5 => 53.4045449379355,
375
+ 2445700.5 => 53.83473382284683,
376
+ 2445882.5 => 54.24409727758939,
377
+ 2446066.5 => 54.64058576938987,
378
+ 2446247.5 => 55.01268563318263,
379
+ 2446431.5 => 55.37200611165099,
380
+ 2446612.5 => 55.706320752291504,
381
+ 2446796.5 => 56.02643064426229,
382
+ 2446977.5 => 56.321893441388966,
383
+ 2447161.5 => 56.602817056686035,
384
+ 2447343.5 => 56.8620766468739,
385
+ 2447527.5 => 57.106458937032585,
386
+ 2447708.5 => 57.330978845137,
387
+ 2447892.5 => 57.54513390577631,
388
+ 2448073.5 => 57.744507716448425,
389
+ 2448257.5 => 57.93896314871017,
390
+ 2448438.5 => 58.126022272994305,
391
+ 2448622.5 => 58.316598521993,
392
+ 2448804.5 => 58.51100219137879,
393
+ 2448988.5 => 58.72000281988949,
394
+ 2449169.5 => 58.94513761608323,
395
+ 2449353.5 => 59.20242227252311,
396
+ 2449534.5 => 59.492985772485554,
397
+ 2449718.5 => 59.83746411076572,
398
+ 2449899.5 => 60.236736812592426,
399
+ 2450083.5 => 60.717905576806515,
400
+ 2450265.5 => 61.2837935622083,
401
+ 2450449.5 => 61.96410528309934,
402
+ 2450630.5 => 62.7581330776884,
403
+ 2450814.5 => 63,
404
+ 2450995.5 => 63,
405
+ 2451179.5 => 64
406
+ }.freeze
407
+
408
+ RECENT_LEAP_SECONDS = {
409
+ 2451360.5 => 64,
410
+ 2451544.5 => 64,
411
+ 2451726.5 => 64,
412
+ 2451910.5 => 64,
413
+ 2452091.5 => 64,
414
+ 2452275.5 => 64,
415
+ 2452456.5 => 64,
416
+ 2452640.5 => 64,
417
+ 2452821.5 => 64,
418
+ 2453005.5 => 64,
419
+ 2453187.5 => 64,
420
+ 2453371.5 => 64,
421
+ 2453552.5 => 64,
422
+ 2453736.5 => 65,
423
+ 2453917.5 => 65,
424
+ 2454101.5 => 65,
425
+ 2454282.5 => 65,
426
+ 2454466.5 => 65,
427
+ 2454648.5 => 65,
428
+ 2454832.5 => 66,
429
+ 2455013.5 => 66,
430
+ 2455197.5 => 66,
431
+ 2455378.5 => 66,
432
+ 2455562.5 => 66,
433
+ 2455743.5 => 66,
434
+ 2455927.5 => 66,
435
+ 2456109.5 => 67,
436
+ 2456293.5 => 67,
437
+ 2456474.5 => 67,
438
+ 2456658.5 => 67,
439
+ 2456839.5 => 67,
440
+ 2457023.5 => 67,
441
+ 2457204.5 => 68,
442
+ 2457388.5 => 68,
443
+ 2457570.5 => 68,
444
+ 2457754.5 => 69
445
+ }.freeze
446
+
447
+ OLDEST_JD = 2378496.5
448
+ MOST_RECENT_JD = 2457754.5
449
+
6
450
  # @param date [Date]
7
451
  # @param decimal [Numeric] Hour of the day, in decimal hours
8
452
  # @return [::Time] Date and time
@@ -58,40 +502,19 @@ module Astronoby
58
502
  "Expected a Numeric, Time, Date or DateTime object, got #{instant.class}"
59
503
  end
60
504
 
61
- return 69 if jd >= 2457754.5
62
- return 68 if jd >= 2457204.5
63
- return 67 if jd >= 2456109.5
64
- return 66 if jd >= 2454832.5
65
- return 65 if jd >= 2453736.5
66
- return 64 if jd >= 2451179.5
67
- return 63 if jd >= 2450814.5
505
+ return RECENT_LEAP_SECONDS[MOST_RECENT_JD] if jd >= 2457754.5
506
+ return 0 if jd < OLDEST_JD
68
507
 
69
- theta = ((jd - Epoch::J1900) / 365.25) / 100.0
70
- if (2415020.5...2450814.5).cover?(jd) # 1900 - 1997
71
- return -2.44 +
72
- 87.24 * theta +
73
- 815.20 * theta**2 -
74
- 2_637.80 * theta**3 -
75
- 18_756.33 * theta**4 +
76
- 124_906.15 * theta**5 -
77
- 303_191.19 * theta**6 +
78
- 372_919.88 * theta**7 -
79
- 232_424.66 * theta**8 +
80
- 58_353.42 * theta**9
81
- elsif (2378496.5...2415020.5).cover?(jd) # 1800 - 1899
82
- return -2.5 +
83
- 228.95 * theta +
84
- 5_218.61 * theta**2 +
85
- 56_282.84 * theta**3 +
86
- 324_011.78 * theta**4 +
87
- 1_061_660.75 * theta**5 +
88
- 2_087_298.89 * theta**6 +
89
- 2_513_807.78 * theta**7 +
90
- 1_818_961.41 * theta**8 +
91
- 727_058.63 * theta**9 +
92
- 123_563.95 * theta**10
508
+ if jd >= 2451360.5
509
+ closest_jd = RECENT_LEAP_SECONDS.keys.bsearch { |key| key >= jd }
510
+ leap_seconds = RECENT_LEAP_SECONDS[closest_jd]
511
+ else
512
+ closest_jd = OLD_LEAP_SECONDS.keys.bsearch { |key| key >= jd }
513
+ leap_seconds = OLD_LEAP_SECONDS[closest_jd]
93
514
  end
94
515
 
516
+ return leap_seconds if leap_seconds
517
+
95
518
  0.0
96
519
  end
97
520
  end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "matrix"
4
+
5
+ module Astronoby
6
+ class Vector < ::Vector
7
+ def initialize(...)
8
+ super
9
+ freeze
10
+ end
11
+
12
+ def x
13
+ self[0]
14
+ end
15
+
16
+ def y
17
+ self[1]
18
+ end
19
+
20
+ def z
21
+ self[2]
22
+ end
23
+
24
+ def magnitude
25
+ if all? { _1.is_a?(Astronoby::Distance) }
26
+ Astronoby::Distance.new(super)
27
+ elsif all? { _1.is_a?(Astronoby::Velocity) }
28
+ Astronoby::Velocity.new(super)
29
+ else
30
+ super
31
+ end
32
+ end
33
+ alias_method :norm, :magnitude
34
+ alias_method :r, :magnitude
35
+ end
36
+ end
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Astronoby
4
+ class Velocity
5
+ include Comparable
6
+
7
+ class << self
8
+ def zero
9
+ new(0)
10
+ end
11
+
12
+ def from_meters_per_second(meters_per_second)
13
+ new(meters_per_second)
14
+ end
15
+ alias_method :from_mps, :from_meters_per_second
16
+
17
+ def from_kilometers_per_second(kilometers_per_second)
18
+ meters_per_second = kilometers_per_second *
19
+ Constants::KILOMETER_IN_METERS
20
+ from_meters_per_second(meters_per_second)
21
+ end
22
+ alias_method :from_kmps, :from_kilometers_per_second
23
+
24
+ def from_kilometers_per_day(kilometers_per_day)
25
+ meters_per_second = kilometers_per_day *
26
+ Constants::KILOMETER_IN_METERS / Constants::SECONDS_PER_DAY
27
+ from_meters_per_second(meters_per_second)
28
+ end
29
+ alias_method :from_kmpd, :from_kilometers_per_day
30
+
31
+ def from_astronomical_units_per_day(astronomical_units_per_day)
32
+ meters_per_second = astronomical_units_per_day *
33
+ Constants::ASTRONOMICAL_UNIT_IN_METERS / Constants::SECONDS_PER_DAY
34
+ from_meters_per_second(meters_per_second)
35
+ end
36
+ alias_method :from_aupd, :from_astronomical_units_per_day
37
+
38
+ def vector_from_meters_per_second(array)
39
+ Vector.elements(array.map { from_mps(_1) })
40
+ end
41
+ alias_method :vector_from_mps, :vector_from_meters_per_second
42
+
43
+ def light_speed
44
+ from_meters_per_second(Constants::LIGHT_SPEED_M_PER_S)
45
+ end
46
+ end
47
+
48
+ attr_reader :meters_per_second
49
+ alias_method :mps, :meters_per_second
50
+
51
+ def initialize(meters_per_second)
52
+ @meters_per_second = meters_per_second
53
+ freeze
54
+ end
55
+
56
+ def kilometers_per_second
57
+ @meters_per_second / Constants::KILOMETER_IN_METERS.to_f
58
+ end
59
+ alias_method :kmps, :kilometers_per_second
60
+
61
+ def kilometers_per_day
62
+ @meters_per_second * Constants::SECONDS_PER_DAY /
63
+ Constants::KILOMETER_IN_METERS
64
+ end
65
+ alias_method :kmpd, :kilometers_per_day
66
+
67
+ def astronomical_units_per_day
68
+ @meters_per_second * Constants::SECONDS_PER_DAY /
69
+ Constants::ASTRONOMICAL_UNIT_IN_METERS
70
+ end
71
+ alias_method :aupd, :astronomical_units_per_day
72
+
73
+ def +(other)
74
+ self.class.from_meters_per_second(
75
+ @meters_per_second + other.meters_per_second
76
+ )
77
+ end
78
+
79
+ def -(other)
80
+ self.class.from_meters_per_second(
81
+ @meters_per_second - other.meters_per_second
82
+ )
83
+ end
84
+
85
+ def -@
86
+ self.class.from_meters_per_second(-@meters_per_second)
87
+ end
88
+
89
+ def positive?
90
+ @meters_per_second > 0
91
+ end
92
+
93
+ def negative?
94
+ @meters_per_second < 0
95
+ end
96
+
97
+ def zero?
98
+ @meters_per_second.zero?
99
+ end
100
+
101
+ def abs2
102
+ @meters_per_second**2
103
+ end
104
+
105
+ def hash
106
+ [@meters_per_second, self.class].hash
107
+ end
108
+
109
+ def <=>(other)
110
+ return unless other.is_a?(self.class)
111
+
112
+ meters_per_second <=> other.meters_per_second
113
+ end
114
+ alias_method :eql?, :==
115
+ end
116
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Astronoby
4
- VERSION = "0.6.0"
4
+ VERSION = "0.7.0"
5
5
  end