Class: Astronoby::Body
- Inherits:
-
Object
- Object
- Astronoby::Body
- Defined in:
- lib/astronoby/body.rb
Constant Summary collapse
- DEFAULT_REFRACTION_VERTICAL_SHIFT =
Angle.from_dms(0, 34, 0)
- RISING_SETTING_HOUR_ANGLE_RATIO_RANGE =
(-1..1)
Instance Method Summary collapse
-
#initialize(equatorial_coordinates) ⇒ Body
constructor
A new instance of Body.
-
#rising_azimuth(latitude:, apparent: true, vertical_shift: nil) ⇒ Astronoby::Angle?
Sunrise azimuth.
-
#rising_time(latitude:, longitude:, date:, apparent: true, vertical_shift: nil) ⇒ Time?
Sunrise time.
-
#setting_azimuth(latitude:, apparent: true, vertical_shift: nil) ⇒ Astronoby::Angle?
Sunset azimuth.
-
#setting_time(latitude:, longitude:, date:, apparent: true, vertical_shift: nil) ⇒ Time?
Sunset time.
Constructor Details
#initialize(equatorial_coordinates) ⇒ Body
Returns a new instance of Body.
8 9 10 |
# File 'lib/astronoby/body.rb', line 8 def initialize(equatorial_coordinates) @equatorial_coordinates = equatorial_coordinates end |
Instance Method Details
#rising_azimuth(latitude:, apparent: true, vertical_shift: nil) ⇒ Astronoby::Angle?
Returns Sunrise azimuth.
54 55 56 57 58 59 60 61 |
# File 'lib/astronoby/body.rb', line 54 def rising_azimuth(latitude:, apparent: true, vertical_shift: nil) time_ratio = time_ratio(latitude, apparent, vertical_shift) return nil unless RISING_SETTING_HOUR_ANGLE_RATIO_RANGE.cover?(time_ratio) azimuth_ratio = azimuth_ratio(latitude, apparent, vertical_shift) Angle.acos(azimuth_ratio) end |
#rising_time(latitude:, longitude:, date:, apparent: true, vertical_shift: nil) ⇒ Time?
Returns Sunrise time.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/astronoby/body.rb', line 24 def rising_time( latitude:, longitude:, date:, apparent: true, vertical_shift: nil ) time_ratio = time_ratio(latitude, apparent, vertical_shift) return nil unless RISING_SETTING_HOUR_ANGLE_RATIO_RANGE.cover?(time_ratio) hour_angle = Angle.acos(time_ratio) local_sidereal_time = LocalSiderealTime.new( date: date, time: right_ascension.hours - hour_angle.hours, longitude: longitude ) local_sidereal_time.to_gst.to_utc end |
#setting_azimuth(latitude:, apparent: true, vertical_shift: nil) ⇒ Astronoby::Angle?
Returns Sunset azimuth.
105 106 107 108 109 110 111 112 |
# File 'lib/astronoby/body.rb', line 105 def setting_azimuth(latitude:, apparent: true, vertical_shift: nil) time_ratio = time_ratio(latitude, apparent, vertical_shift) return nil unless RISING_SETTING_HOUR_ANGLE_RATIO_RANGE.cover?(time_ratio) azimuth_ratio = azimuth_ratio(latitude, apparent, vertical_shift) Angle.from_degrees(360 - Angle.acos(azimuth_ratio).degrees) end |
#setting_time(latitude:, longitude:, date:, apparent: true, vertical_shift: nil) ⇒ Time?
Returns Sunset time.
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/astronoby/body.rb', line 75 def setting_time( latitude:, longitude:, date:, apparent: true, vertical_shift: nil ) time_ratio = time_ratio(latitude, apparent, vertical_shift) return unless RISING_SETTING_HOUR_ANGLE_RATIO_RANGE.cover?(time_ratio) hour_angle = Angle.acos(time_ratio) local_sidereal_time = LocalSiderealTime.new( date: date, time: right_ascension.hours + hour_angle.hours, longitude: longitude ) local_sidereal_time.to_gst.to_utc end |