astronoby 0.0.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d5ac807296bab40ecf868557f3a6a7a1022360f78860b46332e87e5a2fd2697
4
- data.tar.gz: 26682e9092af30150eff0b47edb5a1476341f0d133c39ced8754148e6a4b0927
3
+ metadata.gz: 25e45175dabf69ffa0c98ffdf3e93cb21b9ce004fe4e0ffe61a4cfc92794ae44
4
+ data.tar.gz: 2d1ad05a74a171c71f6ff0a7fa7c3af1874f07379c8be407ff633d61ad4dd78e
5
5
  SHA512:
6
- metadata.gz: 5ae6f829d9c23476edd3c24411426a2c8c1aa6e432c19ee999889b01d9b7843476ea14c163bd083659e768a12a6b772cf46488dfebfa5c5c8f7449a2580bc420
7
- data.tar.gz: 54e3f4ce4090c120b3156d4429fb3fbc6c2830ec816355931d8b416b734210a4d82af3ef5c058a4795b27e753b748f524a0419c2f3696603c5b05ee2b60a71cd
6
+ metadata.gz: 74cdfbf511e8094bd410c67ed86eaff12f03124bec48c769eb3e6ebf1fd54870145a556cc82214db5147bd2c6e4631d0514973a76648d0e68d8770162401d338
7
+ data.tar.gz: 7a6c7f98fff52a04d60dc5c4eced47610900aa10a64f8016000b9294276d547d4d350ef0d269a25f42ae9b0078d110ad9b73884f3834e55a12084274f358ae15
data/.tool-versions ADDED
@@ -0,0 +1 @@
1
+ ruby 3.2.2
data/CHANGELOG.md CHANGED
@@ -1,6 +1,76 @@
1
- ## [Unreleased]
1
+ # Changelog
2
2
 
3
- ## [0.0.1] - 2022-04-20
3
+ ## 0.2.0 - 2024-03-24
4
4
 
5
- - Add `Astronoby::Angle`
6
- - Support angles in degrees and radians
5
+ _If you are upgrading: please see [`UPGRADING.md`]._
6
+
7
+ [`UPGRADING.md`]: https://github.com/rhannequin/astronoby/blob/main/UPGRADING.md
8
+
9
+ ### Features
10
+
11
+ * Angle comparison ([#21])
12
+ * Add `#distance` and `#angular_size` to `Astronoby::Sun` ([#30])
13
+ * Add geocentric parallax `Astronoby::GeocentricParallax` ([#31])
14
+ * Ability to calculate equinoxes and solstices times ([#32])
15
+ * Round rising and setting times to the second ([#38])
16
+ * Provide sunrise and sunset times ([#35])
17
+ * Provide sunrise and sunset azimuths ([#39])
18
+ * Ability to calculate the equation of time ([#40])
19
+
20
+ ### Breaking changes
21
+
22
+ * **breaking:** Accurate setting and rising times for punctual bodies ([#29])
23
+ * **breaking:** Drop `Astronoby::Util::Time` in favor of
24
+ `Astronoby::GreenwichSiderealTime` and `Astonoby::LocalSiderealTime` ([#36])
25
+
26
+ ### Improvements
27
+
28
+ * Add Dependabot for Bundler and GitHub Actions ([#24])
29
+ * Add bundler-audit GitHub Action ([#25])
30
+ * Bump actions/checkout from 3 to 4 ([#26])
31
+ * Bump standard from 1.29.0 to 1.35.1 ([#27], [#37])
32
+ * Bump rspec from 3.12.0 to 3.13.0 ([#28])
33
+
34
+ [#21]: https://github.com/rhannequin/astronoby/pull/21
35
+ [#24]: https://github.com/rhannequin/astronoby/pull/24
36
+ [#25]: https://github.com/rhannequin/astronoby/pull/25
37
+ [#26]: https://github.com/rhannequin/astronoby/pull/26
38
+ [#27]: https://github.com/rhannequin/astronoby/pull/27
39
+ [#28]: https://github.com/rhannequin/astronoby/pull/28
40
+ [#29]: https://github.com/rhannequin/astronoby/pull/29
41
+ [#30]: https://github.com/rhannequin/astronoby/pull/30
42
+ [#31]: https://github.com/rhannequin/astronoby/pull/31
43
+ [#32]: https://github.com/rhannequin/astronoby/pull/32
44
+ [#35]: https://github.com/rhannequin/astronoby/pull/35
45
+ [#36]: https://github.com/rhannequin/astronoby/pull/36
46
+ [#37]: https://github.com/rhannequin/astronoby/pull/37
47
+ [#28]: https://github.com/rhannequin/astronoby/pull/38
48
+ [#39]: https://github.com/rhannequin/astronoby/pull/39
49
+ [#40]: https://github.com/rhannequin/astronoby/pull/40
50
+
51
+ ## 0.1.0 - 2024-02-28
52
+
53
+ ### Features
54
+
55
+ * Support angles in hours
56
+ * Support coordinates
57
+ * `Astronoby::Coordinates::Horizontal`
58
+ * `Astronoby::Coordinates::Equatorial`
59
+ * `Astronoby::Coordinates::Ecliptic`
60
+ * Add new body `Astronoby::Sun`
61
+ * Add `Astronoby::Aberration`
62
+ * Add `Astronoby::Epoch`
63
+ * Add `Astronoby::MeanObliquity`
64
+ * Add `Astronoby::TrueObliquity`
65
+ * Add `Astronoby::Nutation`
66
+ * Add `Astronoby::Precession`
67
+ * Add `Astronoby::Refraction`
68
+ * Add utils
69
+ * `Astronoby::Util::Astrodynamics`
70
+ * `Astronoby::Util::Time`
71
+ * `Astronoby::Util::Trigonometry`
72
+
73
+ ## 0.0.1 - 2022-04-20
74
+
75
+ * Add `Astronoby::Angle`
76
+ * Support angles in degrees and radians
data/CONTRIBUTING.md ADDED
@@ -0,0 +1,86 @@
1
+ # Contributing to Astronoby
2
+
3
+ By participating in this project, you agree to follow the [code of conduct].
4
+
5
+ [code of conduct]: https://github.com/rhannequin/astronoby/blob/main/CODE_OF_CONDUCT.md
6
+
7
+ Here are some ways *you* can contribute:
8
+
9
+ * by reporting bugs
10
+ * by suggesting new features
11
+ * by writing or editing documentation
12
+ * by writing specifications
13
+ * by writing code (**no patch is too small** : fix typos, add comments, etc.)
14
+ * by refactoring code
15
+ * by closing [issues]
16
+ * by reviewing patches
17
+
18
+ [issues]: https://github.com/rhannequin/astronoby/issues
19
+
20
+ ## Submitting an Issue
21
+
22
+ * We use the [GitHub issue tracker][issues] to track bugs and features.
23
+ * Before submitting a bug report or feature request, check to make sure it hasn't
24
+ already been submitted.
25
+ * When submitting a bug report, please include any other details that may be
26
+ necessary to reproduce the bug, including your gem version, Ruby version, and
27
+ operating system.
28
+
29
+ ## Cleaning up issues
30
+
31
+ * Issues that have no response from the submitter will be closed after 30 days.
32
+ * Issues will be closed once they're assumed to be fixed or answered. If the
33
+ maintainer is wrong, it can be opened again.
34
+ * If your issue is closed by mistake, please understand and explain the issue.
35
+ We will happily reopen the issue.
36
+
37
+ ## Submitting a Pull Request
38
+
39
+ 1. [Fork][fork] the [official repository][repo].
40
+ 1. [Create a topic branch.][branch]
41
+ 1. Implement your feature or bug fix.
42
+ 1. Add, commit, and push your changes.
43
+ 1. [Submit a pull request.][pr]
44
+
45
+ ### Notes
46
+
47
+ * Please add tests if you changed code. Contributions without tests won't be accepted.
48
+ * If you don't know how to add tests, please put in a PR and leave a comment
49
+ asking for help. We love helping!
50
+ * Please don't update the Gem version.
51
+
52
+ ## Setting up
53
+
54
+ ```sh
55
+ bin/setup
56
+ ```
57
+
58
+ ## Running the test suite
59
+
60
+ The default rake task will run the full test suite:
61
+
62
+ ```sh
63
+ bundle exec rake
64
+ ```
65
+
66
+ To run an individual rspec test, you can provide a path and line number:
67
+
68
+ ```sh
69
+ bundle exec rspec spec/path/to/spec.rb:123
70
+ ```
71
+
72
+ ## Formatting
73
+
74
+ Use [standard] to automatically format your code:
75
+
76
+ ```sh
77
+ bundle exec standardrb --fix
78
+ ```
79
+
80
+ [repo]: https://github.com/rhannequin/astronoby/tree/main
81
+ [fork]: https://help.github.com/articles/fork-a-repo/
82
+ [branch]: https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/
83
+ [pr]: https://help.github.com/articles/using-pull-requests/
84
+ [standard]: https://github.com/testdouble/standard
85
+
86
+ Inspired by https://github.com/thoughtbot/factory_bot/blob/main/CONTRIBUTING.md
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- astronoby (0.0.1)
4
+ astronoby (0.2.0)
5
+ matrix (~> 0.4.2)
5
6
  rake (~> 13.0)
6
7
  rspec (~> 3.0)
7
8
 
@@ -9,54 +10,70 @@ GEM
9
10
  remote: https://rubygems.org/
10
11
  specs:
11
12
  ast (2.4.2)
12
- diff-lcs (1.5.0)
13
- parallel (1.22.1)
14
- parser (3.1.2.0)
13
+ diff-lcs (1.5.1)
14
+ json (2.7.1)
15
+ language_server-protocol (3.17.0.3)
16
+ lint_roller (1.1.0)
17
+ matrix (0.4.2)
18
+ parallel (1.24.0)
19
+ parser (3.3.0.5)
15
20
  ast (~> 2.4.1)
16
- prettier (2.1.0)
21
+ racc
22
+ racc (1.7.3)
17
23
  rainbow (3.1.1)
18
- rake (13.0.6)
19
- regexp_parser (2.3.0)
20
- rexml (3.2.5)
21
- rspec (3.11.0)
22
- rspec-core (~> 3.11.0)
23
- rspec-expectations (~> 3.11.0)
24
- rspec-mocks (~> 3.11.0)
25
- rspec-core (3.11.0)
26
- rspec-support (~> 3.11.0)
27
- rspec-expectations (3.11.0)
24
+ rake (13.1.0)
25
+ regexp_parser (2.9.0)
26
+ rexml (3.2.6)
27
+ rspec (3.13.0)
28
+ rspec-core (~> 3.13.0)
29
+ rspec-expectations (~> 3.13.0)
30
+ rspec-mocks (~> 3.13.0)
31
+ rspec-core (3.13.0)
32
+ rspec-support (~> 3.13.0)
33
+ rspec-expectations (3.13.0)
28
34
  diff-lcs (>= 1.2.0, < 2.0)
29
- rspec-support (~> 3.11.0)
30
- rspec-mocks (3.11.1)
35
+ rspec-support (~> 3.13.0)
36
+ rspec-mocks (3.13.0)
31
37
  diff-lcs (>= 1.2.0, < 2.0)
32
- rspec-support (~> 3.11.0)
33
- rspec-support (3.11.0)
34
- rubocop (1.27.0)
38
+ rspec-support (~> 3.13.0)
39
+ rspec-support (3.13.1)
40
+ rubocop (1.62.1)
41
+ json (~> 2.3)
42
+ language_server-protocol (>= 3.17.0)
35
43
  parallel (~> 1.10)
36
- parser (>= 3.1.0.0)
44
+ parser (>= 3.3.0.2)
37
45
  rainbow (>= 2.2.2, < 4.0)
38
46
  regexp_parser (>= 1.8, < 3.0)
39
- rexml
40
- rubocop-ast (>= 1.16.0, < 2.0)
47
+ rexml (>= 3.2.5, < 4.0)
48
+ rubocop-ast (>= 1.31.1, < 2.0)
41
49
  ruby-progressbar (~> 1.7)
42
- unicode-display_width (>= 1.4.0, < 3.0)
43
- rubocop-ast (1.17.0)
44
- parser (>= 3.1.1.0)
45
- rubocop-performance (1.13.3)
46
- rubocop (>= 1.7.0, < 2.0)
47
- rubocop-ast (>= 0.4.0)
48
- ruby-progressbar (1.11.0)
49
- standard (1.10.0)
50
- rubocop (= 1.27.0)
51
- rubocop-performance (= 1.13.3)
52
- unicode-display_width (2.1.0)
50
+ unicode-display_width (>= 2.4.0, < 3.0)
51
+ rubocop-ast (1.31.2)
52
+ parser (>= 3.3.0.4)
53
+ rubocop-performance (1.20.2)
54
+ rubocop (>= 1.48.1, < 2.0)
55
+ rubocop-ast (>= 1.30.0, < 2.0)
56
+ ruby-progressbar (1.13.0)
57
+ standard (1.35.1)
58
+ language_server-protocol (~> 3.17.0.2)
59
+ lint_roller (~> 1.0)
60
+ rubocop (~> 1.62.0)
61
+ standard-custom (~> 1.0.0)
62
+ standard-performance (~> 1.3)
63
+ standard-custom (1.0.2)
64
+ lint_roller (~> 1.0)
65
+ rubocop (~> 1.50)
66
+ standard-performance (1.3.1)
67
+ lint_roller (~> 1.1)
68
+ rubocop-performance (~> 1.20.2)
69
+ unicode-display_width (2.5.0)
53
70
 
54
71
  PLATFORMS
72
+ ruby
55
73
  x86_64-linux
56
74
 
57
75
  DEPENDENCIES
58
76
  astronoby!
59
- prettier (~> 2.0)
60
77
  standard (~> 1.3)
61
78
 
62
79
  BUNDLED WITH
data/README.md CHANGED
@@ -1,6 +1,15 @@
1
- # Astronoby ![specs](https://github.com/rhannequin/astronoby/workflows/Ruby/badge.svg)
1
+ # Astronoby
2
2
 
3
- Ruby library to provide a useful API to compute astronomical calculations, based on _Astronomical Algorithms_ by Jean Meeus.
3
+ [![Tests](https://github.com/rhannequin/astronoby/workflows/Ruby/badge.svg)](https://github.com/rhannequin/astronoby/actions?query=workflow%3ARuby)
4
+
5
+ Ruby library to provide a useful API to compute astronomical calculations, based
6
+ on astrometry books.
7
+
8
+ The main reference is:
9
+ - _Astronomical Algorithms_ by Jean Meeus
10
+ - _Celestial Calculations_ by J. L. Lawrence
11
+ - _Practical Astronomy with your Calculator or Spreadsheet_ by Peter
12
+ Duffet-Smith and Jonathan Zwart
4
13
 
5
14
  ## Installation
6
15
 
@@ -8,28 +17,91 @@ Install the gem and add to the application's Gemfile by executing:
8
17
 
9
18
  $ bundle add astronoby
10
19
 
11
- If bundler is not being used to manage dependencies, install the gem by executing:
20
+ If bundler is not being used to manage dependencies, install the gem by
21
+ executing:
12
22
 
13
23
  $ gem install astronoby
14
24
 
15
25
  ## Usage
16
26
 
17
- Library still heavily in development.
27
+ This library is still in heavy development. The public is not stable, please
28
+ be aware new minor versions will probably lead to breaking changes until a
29
+ major one is released.
30
+
31
+ ### Sun's location in the sky
32
+
33
+ ```rb
34
+ time = Time.utc(2023, 2, 17, 11, 0, 0)
35
+ epoch = Astronoby::Epoch.from_time(time)
36
+
37
+ latitude = Astronoby::Angle.as_degrees(48.8566)
38
+ longitude = Astronoby::Angle.as_degrees(2.3522)
39
+
40
+ sun = Astronoby::Sun.new(epoch: epoch)
41
+
42
+ horizontal_coordinates = sun.horizontal_coordinates(
43
+ latitude: latitude,
44
+ longitude: longitude
45
+ )
46
+
47
+ horizontal_coordinates.altitude.degrees.to_f
48
+ # => 27.502365130176567
49
+
50
+ horizontal_coordinates.altitude.str(:dms)
51
+ # => "+27° 30′ 8.5144″"
52
+ ```
53
+
54
+ ### Solstice and Equinox times
55
+
56
+ ```rb
57
+ year = 2024
58
+
59
+ Astronoby::EquinoxSolstice.march_equinox(year)
60
+ # => 2024-03-20 03:05:00 UTC
61
+
62
+ Astronoby::EquinoxSolstice.june_solstice(year)
63
+ # => 2024-06-20 20:50:14 UTC
64
+ ```
65
+
66
+ ## Precision
67
+
68
+ The current precision for the Sun's apparent location in the sky, compared
69
+ to values computed by the [IMCCE] is approximately 1 arc minute. It corresponds
70
+ to twice the apparent size of Jupiter when it is the closest to Earth.
71
+
72
+ While the precision is not enough for very high accuracy computations, it is
73
+ equal to the Human naked eye's angular resolution.
74
+
75
+ [IMCCE]: https://www.imcce.fr
18
76
 
19
77
  ## Development
20
78
 
21
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
79
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run
80
+ `rake spec` to run the tests. You can also run `bin/console` for an interactive
81
+ prompt that will allow you to experiment.
82
+
83
+ To install this gem onto your local machine, run `bundle exec rake install`. To
84
+ release a new version, update the version number in `version.rb`, and then run
85
+ `bundle exec rake release`, which will create a git tag for the version, push
86
+ git commits and the created tag, and push the `.gem` file to [rubygems.org].
22
87
 
23
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
88
+ [rubygems.org]: https://rubygems.org
24
89
 
25
90
  ## Contributing
26
91
 
27
- Bug reports and pull requests are welcome on GitHub at https://github.com/rhannequin/astronoby. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/rhannequin/astronoby/blob/main/CODE_OF_CONDUCT.md).
92
+ Please see [CONTRIBUTING.md](https://github.com/rhannequin/astronoby/blob/main/CONTRIBUTING.md).
93
+
94
+ [code of conduct]: https://github.com/rhannequin/astronoby/blob/main/CODE_OF_CONDUCT.md
28
95
 
29
96
  ## License
30
97
 
31
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
98
+ The gem is available as open source under the terms of the [MIT License].
99
+
100
+ [MIT License]: https://opensource.org/licenses/MIT
32
101
 
33
102
  ## Code of Conduct
34
103
 
35
- Everyone interacting in the Astronoby project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/rhannequin/astronoby/blob/main/CODE_OF_CONDUCT.md).
104
+ Everyone interacting in the Astronoby project's codebases, issue trackers, chat
105
+ rooms and mailing lists is expected to follow the [code of conduct].
106
+
107
+ [code of conduct]: https://github.com/rhannequin/astronoby/blob/main/CODE_OF_CONDUCT.md
data/UPGRADING.md ADDED
@@ -0,0 +1,109 @@
1
+ # Upgrading
2
+
3
+ Astronoby is still in development phase and no major version has been
4
+ released yet. Please consider the public API as unstable and expect breaking
5
+ changes to it as long as a major version has not been released.
6
+
7
+ If you are already using Astronoby and wish to follow the changes to its
8
+ public API, please read the upgrading notes for each release.
9
+
10
+ ## Upgrading from 0.1.0 to 0.2.0
11
+
12
+ ### `Observer` class added (#29)
13
+
14
+ The `Observer` class aims to represent an observer's location and local
15
+ parameters such as the temperature and astmospheric pressure.
16
+
17
+ ### `Refraction` constructor changed (#29)
18
+
19
+ `Refraction.new` now takes the following arguments:
20
+
21
+ * `coordinates` (`Coordinates::Horizontal`)
22
+ * `observer` (`Observer`)
23
+
24
+ ### `Refraction::for_horizontal_coordinates` removed (#29)
25
+
26
+ Please now use `Refraction.correct_horizontal_coordinates`.
27
+
28
+ ### `Refraction::angle` added (#29)
29
+
30
+ This returns a refraction angle (`Angle`) based on an observer (`Observer`)
31
+ and the horizontal coordinates (`Coordinates::Horizontal`) of a body in the sky.
32
+
33
+ ### `apparent` argument added to `Body::rising_time` (#29)
34
+
35
+ With a default value of `true`, this new argument will make consider a
36
+ default vertical refraction angle or not.
37
+
38
+ ### `apparent` argument added to `Body::setting_time` (#29)
39
+
40
+ With a default value of `true`, this new argument will make consider a
41
+ default vertical refraction angle or not.
42
+
43
+ ### `Sun::equation_of_time` method added (#40)
44
+
45
+ Returns the equation of time for a given date.
46
+
47
+ ### `Sun#distance` method added (#30)
48
+
49
+ Returns the approximate Earth-Sun distance in meters (`Numeric`).
50
+
51
+ ### `Sun#angular_size` method added (#30)
52
+
53
+ Returns the apparent Sun's angular size (`Angle`).
54
+
55
+ ### `Sun#true_anomaly` method added (#32)
56
+
57
+ Returns the apparent Sun's true anomaly (`Angle`).
58
+
59
+ ### `Sun#longitude_at_perigee` method added (#32)
60
+
61
+ Returns the apparent Sun's longitude (`Angle`) at its perigee.
62
+
63
+ ### `Sun#rising_time` method added (#35)
64
+
65
+ Returns the UTC `Time` of the sunrise.`
66
+
67
+ ### `Sun#rising_azimuth` method added (#39)
68
+
69
+ Returns the Sun's azimuth (`Angle`) at sunrise.
70
+
71
+ ### `Sun#setting_time` method added (#35)
72
+
73
+ Returns the UTC `Time` of the sunset.
74
+
75
+ ### `Sun#setting_azimuth` method added (#39)
76
+
77
+ Returns the Sun's azimuth (`Angle`) at sunset.
78
+
79
+ ### Added comparison methods to `Angle` (#21)
80
+
81
+ With the inclusion of `Comparable`, comparison methods such as `#==`, `#<`,
82
+ `#>`, `#<=`, `#>=`, `#!=`, `#<=>` have been added to `Angle`.
83
+
84
+ ### `GeocentricParallax` class added
85
+
86
+ Calculates the equatorial horizontal parallax for an observed body. The
87
+ class provided two class methods:
88
+ - `::angle` which returns the parallax angle
89
+ - `::for_equatorial_coordinates` which correct equatorial coordinates with
90
+ the parallax correction
91
+
92
+ ### `EquinoxSolstice` class added
93
+
94
+ This class exposes `::march_equinox`, `::june_solstice`,
95
+ `::september_equinox` and `::december_soltice` that all require a year
96
+ (`Integer`) as parameter and return a date-time (`Time`) computed for the event.
97
+
98
+ ### `Util::Time` class dropped
99
+
100
+ Time-related utility functions have been deleted, in favor of new classes
101
+ (see below).
102
+
103
+ ### `GreenwichSiderealTime` class added
104
+
105
+ Enables to instantiate a GST from UTC, or convert a GST to UTC.
106
+
107
+ ### `LocalSiderealTime` class added
108
+
109
+ Enables to instantiate a LST from GST, or convert a LST to GST.
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Astronoby
4
+ class Aberration
5
+ def self.for_ecliptic_coordinates(coordinates:, epoch:)
6
+ new(coordinates, epoch).apply
7
+ end
8
+
9
+ def initialize(coordinates, epoch)
10
+ @coordinates = coordinates
11
+ @epoch = epoch
12
+ end
13
+
14
+ # Source:
15
+ # Title: Practical Astronomy with your Calculator or Spreadsheet
16
+ # Authors: Peter Duffett-Smith and Jonathan Zwart
17
+ # Edition: Cambridge University Press
18
+ # Chapter: 36 - Aberration
19
+ def apply
20
+ delta_longitude = Angle.as_degrees(
21
+ -20.5 * (
22
+ sun_longitude - @coordinates.longitude
23
+ ).cos / @coordinates.latitude.cos / 3600
24
+ )
25
+
26
+ delta_latitude = Angle.as_degrees(
27
+ -20.5 *
28
+ (sun_longitude - @coordinates.longitude).sin *
29
+ @coordinates.latitude.sin / 3600
30
+ )
31
+
32
+ Coordinates::Ecliptic.new(
33
+ latitude: @coordinates.latitude + delta_latitude,
34
+ longitude: @coordinates.longitude + delta_longitude
35
+ )
36
+ end
37
+
38
+ def sun_longitude
39
+ @_sun_longitude ||= Sun.new(epoch: @epoch).ecliptic_coordinates.longitude
40
+ end
41
+ end
42
+ end