astronoby 0.9.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 (102) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/CHANGELOG.md +101 -0
  4. data/README.md +6 -1
  5. data/UPGRADING.md +84 -0
  6. data/docs/README.md +80 -15
  7. data/docs/angles.md +1 -0
  8. data/docs/configuration.md +20 -17
  9. data/docs/coordinates.md +72 -12
  10. data/docs/deep_sky_bodies.md +1 -1
  11. data/docs/ephem.md +5 -2
  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 +20 -15
  16. data/docs/lunar_eclipses.md +93 -0
  17. data/docs/lunar_observation.md +87 -0
  18. data/docs/moon_phases.md +4 -1
  19. data/docs/observer.md +20 -6
  20. data/docs/planetary_phenomena.md +78 -0
  21. data/docs/reference_frames.md +192 -34
  22. data/docs/rise_transit_set_times.md +6 -4
  23. data/docs/solar_system_bodies.md +26 -4
  24. data/docs/twilight_times.md +25 -21
  25. data/lib/astronoby/angle.rb +63 -2
  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 +21 -0
  29. data/lib/astronoby/bodies/deep_sky_object.rb +6 -1
  30. data/lib/astronoby/bodies/deep_sky_object_position.rb +32 -17
  31. data/lib/astronoby/bodies/earth.rb +7 -44
  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 +158 -32
  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 +240 -61
  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/center.rb +84 -0
  44. data/lib/astronoby/constellation.rb +9 -1
  45. data/lib/astronoby/coordinates/ecliptic.rb +10 -1
  46. data/lib/astronoby/coordinates/equatorial.rb +64 -8
  47. data/lib/astronoby/coordinates/geodetic.rb +102 -0
  48. data/lib/astronoby/coordinates/horizontal.rb +13 -1
  49. data/lib/astronoby/distance.rb +35 -0
  50. data/lib/astronoby/duration.rb +116 -0
  51. data/lib/astronoby/earth_rotation.rb +70 -0
  52. data/lib/astronoby/equinox_solstice.rb +31 -8
  53. data/lib/astronoby/errors.rb +11 -0
  54. data/lib/astronoby/events/conjunction.rb +51 -0
  55. data/lib/astronoby/events/conjunction_opposition_calculator.rb +84 -0
  56. data/lib/astronoby/events/eclipse_phase.rb +27 -0
  57. data/lib/astronoby/events/extremum_calculator.rb +23 -176
  58. data/lib/astronoby/events/greatest_elongation.rb +58 -0
  59. data/lib/astronoby/events/greatest_elongation_calculator.rb +56 -0
  60. data/lib/astronoby/events/lunar_eclipse.rb +99 -0
  61. data/lib/astronoby/events/lunar_eclipse_calculator.rb +285 -0
  62. data/lib/astronoby/events/opposition.rb +19 -0
  63. data/lib/astronoby/events/rise_transit_set_event.rb +12 -1
  64. data/lib/astronoby/events/rise_transit_set_events.rb +12 -1
  65. data/lib/astronoby/events/twilight_event.rb +24 -6
  66. data/lib/astronoby/events/twilight_events.rb +26 -6
  67. data/lib/astronoby/extremum_finder.rb +148 -0
  68. data/lib/astronoby/instant.rb +10 -7
  69. data/lib/astronoby/libration.rb +25 -0
  70. data/lib/astronoby/mean_obliquity.rb +8 -0
  71. data/lib/astronoby/moon_orientation_ephemeris.rb +69 -0
  72. data/lib/astronoby/moon_physical_ephemeris.rb +263 -0
  73. data/lib/astronoby/nutation.rb +10 -20
  74. data/lib/astronoby/observer.rb +67 -49
  75. data/lib/astronoby/orientation.rb +107 -0
  76. data/lib/astronoby/position.rb +16 -0
  77. data/lib/astronoby/precession.rb +61 -60
  78. data/lib/astronoby/reference_frame.rb +73 -7
  79. data/lib/astronoby/reference_frames/apparent.rb +26 -7
  80. data/lib/astronoby/reference_frames/astrometric.rb +14 -1
  81. data/lib/astronoby/reference_frames/geometric.rb +7 -1
  82. data/lib/astronoby/reference_frames/mean_of_date.rb +13 -1
  83. data/lib/astronoby/reference_frames/teme.rb +153 -0
  84. data/lib/astronoby/reference_frames/topocentric.rb +30 -4
  85. data/lib/astronoby/refraction.rb +26 -5
  86. data/lib/astronoby/root_finder.rb +83 -0
  87. data/lib/astronoby/rotation.rb +49 -0
  88. data/lib/astronoby/time/greenwich_apparent_sidereal_time.rb +9 -0
  89. data/lib/astronoby/time/greenwich_mean_sidereal_time.rb +42 -5
  90. data/lib/astronoby/time/greenwich_sidereal_time.rb +21 -0
  91. data/lib/astronoby/time/local_apparent_sidereal_time.rb +21 -0
  92. data/lib/astronoby/time/local_mean_sidereal_time.rb +21 -0
  93. data/lib/astronoby/time/local_sidereal_time.rb +24 -0
  94. data/lib/astronoby/time/sidereal_time.rb +23 -1
  95. data/lib/astronoby/true_obliquity.rb +4 -0
  96. data/lib/astronoby/util/maths.rb +8 -0
  97. data/lib/astronoby/util/time.rb +10 -485
  98. data/lib/astronoby/vector.rb +10 -0
  99. data/lib/astronoby/velocity.rb +39 -0
  100. data/lib/astronoby/version.rb +1 -1
  101. data/lib/astronoby.rb +22 -0
  102. metadata +45 -5
@@ -1,19 +1,32 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Astronoby
4
+ # Represents a velocity with meters per second as its internal
5
+ # representation. Provides conversions between m/s, km/s, km/day,
6
+ # and AU/day.
7
+ #
8
+ # @example Create a velocity from km/s
9
+ # velocity = Astronoby::Velocity.from_kmps(29.78)
10
+ # velocity.aupd # AU per day
11
+ #
4
12
  class Velocity
5
13
  include Comparable
6
14
 
7
15
  class << self
16
+ # @return [Astronoby::Velocity] a zero velocity
8
17
  def zero
9
18
  new(0)
10
19
  end
11
20
 
21
+ # @param meters_per_second [Numeric] the velocity in m/s
22
+ # @return [Astronoby::Velocity] a new Velocity
12
23
  def from_meters_per_second(meters_per_second)
13
24
  new(meters_per_second)
14
25
  end
15
26
  alias_method :from_mps, :from_meters_per_second
16
27
 
28
+ # @param kilometers_per_second [Numeric] the velocity in km/s
29
+ # @return [Astronoby::Velocity] a new Velocity
17
30
  def from_kilometers_per_second(kilometers_per_second)
18
31
  meters_per_second = kilometers_per_second *
19
32
  Constants::KILOMETER_IN_METERS
@@ -21,6 +34,8 @@ module Astronoby
21
34
  end
22
35
  alias_method :from_kmps, :from_kilometers_per_second
23
36
 
37
+ # @param kilometers_per_day [Numeric] the velocity in km/day
38
+ # @return [Astronoby::Velocity] a new Velocity
24
39
  def from_kilometers_per_day(kilometers_per_day)
25
40
  meters_per_second = kilometers_per_day *
26
41
  Constants::KILOMETER_IN_METERS / Constants::SECONDS_PER_DAY
@@ -28,6 +43,8 @@ module Astronoby
28
43
  end
29
44
  alias_method :from_kmpd, :from_kilometers_per_day
30
45
 
46
+ # @param astronomical_units_per_day [Numeric] the velocity in AU/day
47
+ # @return [Astronoby::Velocity] a new Velocity
31
48
  def from_astronomical_units_per_day(astronomical_units_per_day)
32
49
  meters_per_second = astronomical_units_per_day *
33
50
  Constants::ASTRONOMICAL_UNIT_IN_METERS / Constants::SECONDS_PER_DAY
@@ -35,82 +52,104 @@ module Astronoby
35
52
  end
36
53
  alias_method :from_aupd, :from_astronomical_units_per_day
37
54
 
55
+ # @param array [Array<Numeric>] array of m/s values
56
+ # @return [Astronoby::Vector<Astronoby::Velocity>] a vector of Velocities
38
57
  def vector_from_meters_per_second(array)
39
58
  Vector.elements(array.map { from_mps(_1) })
40
59
  end
41
60
  alias_method :vector_from_mps, :vector_from_meters_per_second
42
61
 
62
+ # @param array [Array<Numeric>] array of AU/day values
63
+ # @return [Astronoby::Vector<Astronoby::Velocity>] a vector of Velocities
43
64
  def vector_from_astronomical_units_per_day(array)
44
65
  Vector.elements(array.map { from_aupd(_1) })
45
66
  end
46
67
  alias_method :vector_from_aupd, :vector_from_astronomical_units_per_day
47
68
 
69
+ # @return [Astronoby::Velocity] the speed of light in vacuum
48
70
  def light_speed
49
71
  from_meters_per_second(Constants::LIGHT_SPEED_M_PER_S)
50
72
  end
51
73
  end
52
74
 
75
+ # @return [Numeric] the velocity in meters per second
53
76
  attr_reader :meters_per_second
54
77
  alias_method :mps, :meters_per_second
55
78
 
79
+ # @param meters_per_second [Numeric] the velocity in m/s
56
80
  def initialize(meters_per_second)
57
81
  @meters_per_second = meters_per_second
58
82
  freeze
59
83
  end
60
84
 
85
+ # @return [Float] the velocity in kilometers per second
61
86
  def kilometers_per_second
62
87
  @meters_per_second / Constants::KILOMETER_IN_METERS.to_f
63
88
  end
64
89
  alias_method :kmps, :kilometers_per_second
65
90
 
91
+ # @return [Float] the velocity in kilometers per day
66
92
  def kilometers_per_day
67
93
  @meters_per_second * Constants::SECONDS_PER_DAY /
68
94
  Constants::KILOMETER_IN_METERS
69
95
  end
70
96
  alias_method :kmpd, :kilometers_per_day
71
97
 
98
+ # @return [Float] the velocity in astronomical units per day
72
99
  def astronomical_units_per_day
73
100
  @meters_per_second * Constants::SECONDS_PER_DAY /
74
101
  Constants::ASTRONOMICAL_UNIT_IN_METERS
75
102
  end
76
103
  alias_method :aupd, :astronomical_units_per_day
77
104
 
105
+ # @param other [Astronoby::Velocity] velocity to add
106
+ # @return [Astronoby::Velocity] the sum
78
107
  def +(other)
79
108
  self.class.from_meters_per_second(
80
109
  @meters_per_second + other.meters_per_second
81
110
  )
82
111
  end
83
112
 
113
+ # @param other [Astronoby::Velocity] velocity to subtract
114
+ # @return [Astronoby::Velocity] the difference
84
115
  def -(other)
85
116
  self.class.from_meters_per_second(
86
117
  @meters_per_second - other.meters_per_second
87
118
  )
88
119
  end
89
120
 
121
+ # @return [Astronoby::Velocity] the negated velocity
90
122
  def -@
91
123
  self.class.from_meters_per_second(-@meters_per_second)
92
124
  end
93
125
 
126
+ # @return [Boolean] true if the velocity is positive
94
127
  def positive?
95
128
  @meters_per_second > 0
96
129
  end
97
130
 
131
+ # @return [Boolean] true if the velocity is negative
98
132
  def negative?
99
133
  @meters_per_second < 0
100
134
  end
101
135
 
136
+ # @return [Boolean] true if the velocity is zero
102
137
  def zero?
103
138
  @meters_per_second.zero?
104
139
  end
105
140
 
141
+ # @return [Numeric] the square of the velocity in (m/s)^2
106
142
  def abs2
107
143
  @meters_per_second**2
108
144
  end
109
145
 
146
+ # @return [Integer] hash value
110
147
  def hash
111
148
  [@meters_per_second, self.class].hash
112
149
  end
113
150
 
151
+ # @param other [Astronoby::Velocity] velocity to compare with
152
+ # @return [Integer, nil] -1, 0, or 1; nil if not comparable
114
153
  def <=>(other)
115
154
  return unless other.is_a?(self.class)
116
155
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Astronoby
4
- VERSION = "0.9.0"
4
+ VERSION = "0.10.0"
5
5
  end
data/lib/astronoby.rb CHANGED
@@ -12,6 +12,10 @@ require "astronoby/constellations/repository"
12
12
  require "astronoby/constellations/data"
13
13
  require "astronoby/constellations/finder"
14
14
  require "astronoby/distance"
15
+ require "astronoby/duration"
16
+ require "astronoby/center"
17
+ require "astronoby/body"
18
+ require "astronoby/position"
15
19
  require "astronoby/ephem"
16
20
  require "astronoby/julian_date"
17
21
  require "astronoby/instant"
@@ -31,14 +35,23 @@ require "astronoby/bodies/uranus"
31
35
  require "astronoby/bodies/neptune"
32
36
  require "astronoby/coordinates/ecliptic"
33
37
  require "astronoby/coordinates/equatorial"
38
+ require "astronoby/coordinates/geodetic"
34
39
  require "astronoby/coordinates/horizontal"
35
40
  require "astronoby/corrections/light_time_delay"
36
41
  require "astronoby/aberration"
37
42
  require "astronoby/bodies/deep_sky_object"
38
43
  require "astronoby/bodies/deep_sky_object_position"
39
44
  require "astronoby/deflection"
45
+ require "astronoby/earth_rotation"
40
46
  require "astronoby/equinox_solstice"
41
47
  require "astronoby/errors"
48
+ require "astronoby/extremum_finder"
49
+ require "astronoby/root_finder"
50
+ require "astronoby/events/conjunction"
51
+ require "astronoby/events/opposition"
52
+ require "astronoby/events/greatest_elongation"
53
+ require "astronoby/events/conjunction_opposition_calculator"
54
+ require "astronoby/events/greatest_elongation_calculator"
42
55
  require "astronoby/events/extremum_event"
43
56
  require "astronoby/events/extremum_calculator"
44
57
  require "astronoby/events/moon_phases"
@@ -48,11 +61,16 @@ require "astronoby/events/rise_transit_set_calculator"
48
61
  require "astronoby/events/twilight_event"
49
62
  require "astronoby/events/twilight_events"
50
63
  require "astronoby/events/twilight_calculator"
64
+ require "astronoby/events/eclipse_phase"
65
+ require "astronoby/events/lunar_eclipse"
66
+ require "astronoby/events/lunar_eclipse_calculator"
51
67
  require "astronoby/geocentric_parallax"
68
+ require "astronoby/libration"
52
69
  require "astronoby/mean_obliquity"
53
70
  require "astronoby/moon_phase"
54
71
  require "astronoby/nutation"
55
72
  require "astronoby/observer"
73
+ require "astronoby/rotation"
56
74
  require "astronoby/precession"
57
75
  require "astronoby/reference_frame"
58
76
  require "astronoby/reference_frames/geometric"
@@ -60,6 +78,7 @@ require "astronoby/reference_frames/astrometric"
60
78
  require "astronoby/reference_frames/mean_of_date"
61
79
  require "astronoby/reference_frames/apparent"
62
80
  require "astronoby/reference_frames/topocentric"
81
+ require "astronoby/reference_frames/teme"
63
82
  require "astronoby/refraction"
64
83
  require "astronoby/stellar_propagation"
65
84
  require "astronoby/time/sidereal_time"
@@ -73,4 +92,7 @@ require "astronoby/util/maths"
73
92
  require "astronoby/util/time"
74
93
  require "astronoby/util/trigonometry"
75
94
  require "astronoby/true_obliquity"
95
+ require "astronoby/orientation"
96
+ require "astronoby/moon_physical_ephemeris"
97
+ require "astronoby/moon_orientation_ephemeris"
76
98
  require "astronoby/version"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: astronoby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rémy Hannequin
@@ -15,14 +15,28 @@ dependencies:
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: '0.3'
18
+ version: '0.5'
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
23
  - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: '0.3'
25
+ version: '0.5'
26
+ - !ruby/object:Gem::Dependency
27
+ name: iers
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '0.1'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.1'
26
40
  - !ruby/object:Gem::Dependency
27
41
  name: matrix
28
42
  requirement: !ruby/object:Gem::Requirement
@@ -160,9 +174,13 @@ files:
160
174
  - docs/ephem.md
161
175
  - docs/equinoxes_solstices_times.md
162
176
  - docs/glossary.md
177
+ - docs/iers.md
163
178
  - docs/instant.md
179
+ - docs/lunar_eclipses.md
180
+ - docs/lunar_observation.md
164
181
  - docs/moon_phases.md
165
182
  - docs/observer.md
183
+ - docs/planetary_phenomena.md
166
184
  - docs/reference_frames.md
167
185
  - docs/rise_transit_set_times.md
168
186
  - docs/solar_system_bodies.md
@@ -187,7 +205,9 @@ files:
187
205
  - lib/astronoby/bodies/sun.rb
188
206
  - lib/astronoby/bodies/uranus.rb
189
207
  - lib/astronoby/bodies/venus.rb
208
+ - lib/astronoby/body.rb
190
209
  - lib/astronoby/cache.rb
210
+ - lib/astronoby/center.rb
191
211
  - lib/astronoby/configuration.rb
192
212
  - lib/astronoby/constants.rb
193
213
  - lib/astronoby/constellation.rb
@@ -196,6 +216,7 @@ files:
196
216
  - lib/astronoby/constellations/repository.rb
197
217
  - lib/astronoby/coordinates/ecliptic.rb
198
218
  - lib/astronoby/coordinates/equatorial.rb
219
+ - lib/astronoby/coordinates/geodetic.rb
199
220
  - lib/astronoby/coordinates/horizontal.rb
200
221
  - lib/astronoby/corrections/light_time_delay.rb
201
222
  - lib/astronoby/data/constellations/constellation_names.dat
@@ -205,33 +226,52 @@ files:
205
226
  - lib/astronoby/data/constellations/sorted_right_ascensions.dat
206
227
  - lib/astronoby/deflection.rb
207
228
  - lib/astronoby/distance.rb
229
+ - lib/astronoby/duration.rb
230
+ - lib/astronoby/earth_rotation.rb
208
231
  - lib/astronoby/ephem.rb
209
232
  - lib/astronoby/equinox_solstice.rb
210
233
  - lib/astronoby/errors.rb
234
+ - lib/astronoby/events/conjunction.rb
235
+ - lib/astronoby/events/conjunction_opposition_calculator.rb
236
+ - lib/astronoby/events/eclipse_phase.rb
211
237
  - lib/astronoby/events/extremum_calculator.rb
212
238
  - lib/astronoby/events/extremum_event.rb
239
+ - lib/astronoby/events/greatest_elongation.rb
240
+ - lib/astronoby/events/greatest_elongation_calculator.rb
241
+ - lib/astronoby/events/lunar_eclipse.rb
242
+ - lib/astronoby/events/lunar_eclipse_calculator.rb
213
243
  - lib/astronoby/events/moon_phases.rb
244
+ - lib/astronoby/events/opposition.rb
214
245
  - lib/astronoby/events/rise_transit_set_calculator.rb
215
246
  - lib/astronoby/events/rise_transit_set_event.rb
216
247
  - lib/astronoby/events/rise_transit_set_events.rb
217
248
  - lib/astronoby/events/twilight_calculator.rb
218
249
  - lib/astronoby/events/twilight_event.rb
219
250
  - lib/astronoby/events/twilight_events.rb
251
+ - lib/astronoby/extremum_finder.rb
220
252
  - lib/astronoby/geocentric_parallax.rb
221
253
  - lib/astronoby/instant.rb
222
254
  - lib/astronoby/julian_date.rb
255
+ - lib/astronoby/libration.rb
223
256
  - lib/astronoby/mean_obliquity.rb
257
+ - lib/astronoby/moon_orientation_ephemeris.rb
224
258
  - lib/astronoby/moon_phase.rb
259
+ - lib/astronoby/moon_physical_ephemeris.rb
225
260
  - lib/astronoby/nutation.rb
226
261
  - lib/astronoby/observer.rb
262
+ - lib/astronoby/orientation.rb
263
+ - lib/astronoby/position.rb
227
264
  - lib/astronoby/precession.rb
228
265
  - lib/astronoby/reference_frame.rb
229
266
  - lib/astronoby/reference_frames/apparent.rb
230
267
  - lib/astronoby/reference_frames/astrometric.rb
231
268
  - lib/astronoby/reference_frames/geometric.rb
232
269
  - lib/astronoby/reference_frames/mean_of_date.rb
270
+ - lib/astronoby/reference_frames/teme.rb
233
271
  - lib/astronoby/reference_frames/topocentric.rb
234
272
  - lib/astronoby/refraction.rb
273
+ - lib/astronoby/root_finder.rb
274
+ - lib/astronoby/rotation.rb
235
275
  - lib/astronoby/stellar_propagation.rb
236
276
  - lib/astronoby/time/greenwich_apparent_sidereal_time.rb
237
277
  - lib/astronoby/time/greenwich_mean_sidereal_time.rb
@@ -261,14 +301,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
261
301
  requirements:
262
302
  - - ">="
263
303
  - !ruby/object:Gem::Version
264
- version: 3.0.0
304
+ version: 3.2.0
265
305
  required_rubygems_version: !ruby/object:Gem::Requirement
266
306
  requirements:
267
307
  - - ">="
268
308
  - !ruby/object:Gem::Version
269
309
  version: '0'
270
310
  requirements: []
271
- rubygems_version: 3.7.1
311
+ rubygems_version: 4.0.10
272
312
  specification_version: 4
273
313
  summary: Astronomical calculations
274
314
  test_files: []