astronoby 0.8.0 → 0.10.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 (108) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/CHANGELOG.md +159 -0
  4. data/README.md +12 -5
  5. data/UPGRADING.md +109 -0
  6. data/docs/README.md +109 -16
  7. data/docs/angles.md +2 -1
  8. data/docs/configuration.md +20 -17
  9. data/docs/coordinates.md +73 -13
  10. data/docs/deep_sky_bodies.md +101 -0
  11. data/docs/ephem.md +6 -3
  12. data/docs/equinoxes_solstices_times.md +4 -3
  13. data/docs/glossary.md +97 -1
  14. data/docs/iers.md +40 -0
  15. data/docs/instant.md +21 -16
  16. data/docs/lunar_eclipses.md +93 -0
  17. data/docs/lunar_observation.md +87 -0
  18. data/docs/moon_phases.md +5 -2
  19. data/docs/observer.md +21 -7
  20. data/docs/planetary_phenomena.md +78 -0
  21. data/docs/reference_frames.md +193 -35
  22. data/docs/rise_transit_set_times.md +10 -8
  23. data/docs/{celestial_bodies.md → solar_system_bodies.md} +27 -5
  24. data/docs/twilight_times.md +25 -21
  25. data/lib/astronoby/angle.rb +69 -4
  26. data/lib/astronoby/angles/dms.rb +18 -1
  27. data/lib/astronoby/angles/hms.rb +14 -1
  28. data/lib/astronoby/angular_velocity.rb +97 -0
  29. data/lib/astronoby/bodies/deep_sky_object.rb +49 -0
  30. data/lib/astronoby/bodies/deep_sky_object_position.rb +142 -0
  31. data/lib/astronoby/bodies/earth.rb +9 -42
  32. data/lib/astronoby/bodies/jupiter.rb +10 -0
  33. data/lib/astronoby/bodies/mars.rb +10 -0
  34. data/lib/astronoby/bodies/mercury.rb +10 -0
  35. data/lib/astronoby/bodies/moon.rb +162 -15
  36. data/lib/astronoby/bodies/neptune.rb +10 -0
  37. data/lib/astronoby/bodies/saturn.rb +10 -0
  38. data/lib/astronoby/bodies/solar_system_body.rb +257 -53
  39. data/lib/astronoby/bodies/sun.rb +79 -4
  40. data/lib/astronoby/bodies/uranus.rb +10 -0
  41. data/lib/astronoby/bodies/venus.rb +10 -0
  42. data/lib/astronoby/body.rb +6 -0
  43. data/lib/astronoby/cache.rb +1 -0
  44. data/lib/astronoby/center.rb +84 -0
  45. data/lib/astronoby/constants.rb +7 -2
  46. data/lib/astronoby/constellation.rb +9 -1
  47. data/lib/astronoby/coordinates/ecliptic.rb +10 -1
  48. data/lib/astronoby/coordinates/equatorial.rb +66 -13
  49. data/lib/astronoby/coordinates/geodetic.rb +102 -0
  50. data/lib/astronoby/coordinates/horizontal.rb +13 -1
  51. data/lib/astronoby/distance.rb +41 -0
  52. data/lib/astronoby/duration.rb +116 -0
  53. data/lib/astronoby/earth_rotation.rb +70 -0
  54. data/lib/astronoby/equinox_solstice.rb +31 -8
  55. data/lib/astronoby/errors.rb +11 -0
  56. data/lib/astronoby/events/conjunction.rb +51 -0
  57. data/lib/astronoby/events/conjunction_opposition_calculator.rb +84 -0
  58. data/lib/astronoby/events/eclipse_phase.rb +27 -0
  59. data/lib/astronoby/events/extremum_calculator.rb +80 -0
  60. data/lib/astronoby/events/extremum_event.rb +15 -0
  61. data/lib/astronoby/events/greatest_elongation.rb +58 -0
  62. data/lib/astronoby/events/greatest_elongation_calculator.rb +56 -0
  63. data/lib/astronoby/events/lunar_eclipse.rb +99 -0
  64. data/lib/astronoby/events/lunar_eclipse_calculator.rb +285 -0
  65. data/lib/astronoby/events/opposition.rb +19 -0
  66. data/lib/astronoby/events/rise_transit_set_calculator.rb +9 -6
  67. data/lib/astronoby/events/rise_transit_set_event.rb +12 -1
  68. data/lib/astronoby/events/rise_transit_set_events.rb +12 -1
  69. data/lib/astronoby/events/twilight_calculator.rb +1 -1
  70. data/lib/astronoby/events/twilight_event.rb +24 -6
  71. data/lib/astronoby/events/twilight_events.rb +26 -6
  72. data/lib/astronoby/extremum_finder.rb +148 -0
  73. data/lib/astronoby/instant.rb +35 -9
  74. data/lib/astronoby/libration.rb +25 -0
  75. data/lib/astronoby/mean_obliquity.rb +8 -0
  76. data/lib/astronoby/moon_orientation_ephemeris.rb +69 -0
  77. data/lib/astronoby/moon_physical_ephemeris.rb +263 -0
  78. data/lib/astronoby/nutation.rb +10 -20
  79. data/lib/astronoby/observer.rb +67 -49
  80. data/lib/astronoby/orientation.rb +107 -0
  81. data/lib/astronoby/position.rb +16 -0
  82. data/lib/astronoby/precession.rb +61 -60
  83. data/lib/astronoby/reference_frame.rb +73 -7
  84. data/lib/astronoby/reference_frames/apparent.rb +25 -16
  85. data/lib/astronoby/reference_frames/astrometric.rb +14 -1
  86. data/lib/astronoby/reference_frames/geometric.rb +7 -1
  87. data/lib/astronoby/reference_frames/mean_of_date.rb +13 -1
  88. data/lib/astronoby/reference_frames/teme.rb +153 -0
  89. data/lib/astronoby/reference_frames/topocentric.rb +31 -5
  90. data/lib/astronoby/refraction.rb +26 -5
  91. data/lib/astronoby/root_finder.rb +83 -0
  92. data/lib/astronoby/rotation.rb +49 -0
  93. data/lib/astronoby/stellar_propagation.rb +162 -0
  94. data/lib/astronoby/time/greenwich_apparent_sidereal_time.rb +31 -0
  95. data/lib/astronoby/time/greenwich_mean_sidereal_time.rb +101 -0
  96. data/lib/astronoby/time/greenwich_sidereal_time.rb +41 -58
  97. data/lib/astronoby/time/local_apparent_sidereal_time.rb +63 -0
  98. data/lib/astronoby/time/local_mean_sidereal_time.rb +63 -0
  99. data/lib/astronoby/time/local_sidereal_time.rb +59 -26
  100. data/lib/astronoby/time/sidereal_time.rb +64 -0
  101. data/lib/astronoby/true_obliquity.rb +4 -0
  102. data/lib/astronoby/util/maths.rb +8 -0
  103. data/lib/astronoby/util/time.rb +10 -467
  104. data/lib/astronoby/vector.rb +10 -0
  105. data/lib/astronoby/velocity.rb +44 -0
  106. data/lib/astronoby/version.rb +1 -1
  107. data/lib/astronoby.rb +33 -0
  108. metadata +58 -6
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Astronoby
4
+ # Base class for sidereal time representations. Sidereal time measures the
5
+ # rotation of the Earth relative to the vernal equinox.
6
+ class SiderealTime
7
+ TYPES = [
8
+ MEAN = :mean,
9
+ APPARENT = :apparent
10
+ ].freeze
11
+
12
+ # @return [Date] the calendar date
13
+ attr_reader :date
14
+
15
+ # @return [Numeric] the sidereal time in hours
16
+ attr_reader :time
17
+
18
+ # @return [Symbol] :mean or :apparent
19
+ attr_reader :type
20
+
21
+ # Normalizes a time value to the range [0, 24) hours.
22
+ #
23
+ # @param time [Numeric] time in hours
24
+ # @return [Numeric] normalized time in hours
25
+ def self.normalize_time(time)
26
+ time += Constants::HOURS_PER_DAY if time.negative?
27
+ time -= Constants::HOURS_PER_DAY if time > Constants::HOURS_PER_DAY
28
+ time
29
+ end
30
+
31
+ # @param type [Symbol] :mean or :apparent
32
+ # @raise [ArgumentError] if type is invalid
33
+ def self.validate_type!(type)
34
+ unless TYPES.include?(type)
35
+ raise ArgumentError, "Invalid type: #{type}. Must be one of #{TYPES}"
36
+ end
37
+ end
38
+
39
+ # @param date [Date] the calendar date
40
+ # @param time [Numeric] the sidereal time in hours
41
+ # @param type [Symbol] :mean or :apparent
42
+ def initialize(date:, time:, type: MEAN)
43
+ @date = date
44
+ @time = time
45
+ @type = type
46
+ end
47
+
48
+ # @return [Boolean] true if this is mean sidereal time
49
+ def mean?
50
+ @type == MEAN
51
+ end
52
+
53
+ # @return [Boolean] true if this is apparent sidereal time
54
+ def apparent?
55
+ @type == APPARENT
56
+ end
57
+
58
+ # @param time [Numeric] time in hours
59
+ # @return [Numeric] normalized time in hours
60
+ def normalize_time(time)
61
+ self.class.normalize_time(time)
62
+ end
63
+ end
64
+ end
@@ -1,7 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Astronoby
4
+ # Computes the true obliquity of the ecliptic (mean obliquity + nutation
5
+ # in obliquity).
4
6
  class TrueObliquity
7
+ # @param instant [Astronoby::Instant] the time instant
8
+ # @return [Astronoby::Angle] the true obliquity
5
9
  def self.at(instant)
6
10
  mean_obliquity = MeanObliquity.at(instant)
7
11
  nutation = Nutation.new(instant: instant).nutation_in_obliquity
@@ -9,6 +9,14 @@ module Astronoby
9
9
  a.zip(b).sum { |x, y| x * y }
10
10
  end
11
11
 
12
+ def cross_product(a, b)
13
+ [
14
+ a[1] * b[2] - a[2] * b[1],
15
+ a[2] * b[0] - a[0] * b[2],
16
+ a[0] * b[1] - a[1] * b[0]
17
+ ]
18
+ end
19
+
12
20
  # Find maximum altitude using quadratic interpolation
13
21
  # @param t1, t2, t3 [Time] Three consecutive times
14
22
  # @param alt1, alt2, alt3 [Float] Corresponding altitudes
@@ -1,452 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "iers"
4
+
3
5
  module Astronoby
4
6
  module Util
5
7
  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
-
450
8
  # @param date [Date]
451
9
  # @param decimal [Numeric] Hour of the day, in decimal hours
452
10
  # @return [::Time] Date and time
@@ -484,38 +42,23 @@ module Astronoby
484
42
  end
485
43
 
486
44
  # @param instant [Numeric, Time, Date, DateTime]
487
- # @return [Integer, Float] Number of leap seconds for the given instant
45
+ # @return [Numeric] Delta T (TT - UT1) in seconds for the given instant
488
46
  def self.terrestrial_universal_time_delta(instant)
489
- # Source:
490
- # Title: Astronomical Algorithms
491
- # Author: Jean Meeus
492
- # Edition: 2nd edition
493
- # Chapter: 10 - Dynamical Time and Universal Time
494
-
495
- jd = case instant
47
+ case instant
496
48
  when Numeric
497
- instant
49
+ IERS::DeltaT.at(jd: instant).delta_t
498
50
  when ::Time, ::Date, ::DateTime
499
- JulianDate.from_time(instant)
51
+ IERS::DeltaT.at(instant).delta_t
500
52
  else
501
53
  raise IncompatibleArgumentsError,
502
54
  "Expected a Numeric, Time, Date or DateTime object, got #{instant.class}"
503
55
  end
504
-
505
- return RECENT_LEAP_SECONDS[MOST_RECENT_JD] if jd >= 2457754.5
506
- return 0 if jd < OLDEST_JD
507
-
508
- if jd >= 2451360.5
509
- closest_jd = RECENT_LEAP_SECONDS.keys.bsearch { |key| key >= jd }
510
- leap_seconds = RECENT_LEAP_SECONDS[closest_jd]
56
+ rescue IERS::OutOfRangeError => e
57
+ if e.available_range
58
+ IERS::DeltaT.at(mjd: e.available_range.end).delta_t
511
59
  else
512
- closest_jd = OLD_LEAP_SECONDS.keys.bsearch { |key| key >= jd }
513
- leap_seconds = OLD_LEAP_SECONDS[closest_jd]
60
+ 0
514
61
  end
515
-
516
- return leap_seconds if leap_seconds
517
-
518
- 0.0
519
62
  end
520
63
  end
521
64
  end
@@ -3,24 +3,34 @@
3
3
  require "matrix"
4
4
 
5
5
  module Astronoby
6
+ # A 3D vector extending Ruby's Vector class. Provides named component
7
+ # accessors and type-aware magnitude computation for Distance and Velocity
8
+ # vectors.
6
9
  class Vector < ::Vector
7
10
  def initialize(...)
8
11
  super
9
12
  freeze
10
13
  end
11
14
 
15
+ # @return [Object] the first component (x-axis)
12
16
  def x
13
17
  self[0]
14
18
  end
15
19
 
20
+ # @return [Object] the second component (y-axis)
16
21
  def y
17
22
  self[1]
18
23
  end
19
24
 
25
+ # @return [Object] the third component (z-axis)
20
26
  def z
21
27
  self[2]
22
28
  end
23
29
 
30
+ # Returns the Euclidean magnitude of the vector. If all elements are
31
+ # Distance or Velocity instances, the result is wrapped in the same type.
32
+ #
33
+ # @return [Astronoby::Distance, Astronoby::Velocity, Numeric] the magnitude
24
34
  def magnitude
25
35
  if all? { _1.is_a?(Astronoby::Distance) }
26
36
  Astronoby::Distance.new(super)