Lunation
Lunation provides a library of algorithms for computing positions and ephemeris of celestial objects using Jean Meeus's astronomical algorithms.
Installation
Install the gem and add to the application's Gemfile by executing:
$ bundle add lunation
If bundler is not being used to manage dependencies, install the gem by executing:
$ gem install lunation
Usage
Basic Usage
require "lunation"
calculation = Lunation::Calculation.new(DateTime.parse("2024-01-01 00:01"))
calculation.moon_illuminated_fraction # 0.7803
calculation.to_h # {...} Full report as Hash
calculation.to_s # DATE AND TIME (UT)... Full report as String
Available Functions
Name | Symbol | Description | Unit | Reference |
---|---|---|---|---|
corrected_obliquity_of_ecliptic |
corrected ε |
Corrected true obliquity of the ecliptic | Angle | A.A. p. 165 |
correction_eccentricity_of_earth |
E |
Earth eccentricity | - | A.A. p. 338 (47.6) |
correction_jupiter |
A2 |
Jupiter correction | Angle | A.A. p. 338 |
correction_latitude |
A3 |
Latitude correction | Angle | A.A. p. 338 |
correction_venus |
A1 |
Venus correction | Angle | A.A. p. 338 |
delta_t |
ΔT |
Difference between TD and UT | Seconds | https://eclipse.gsfc.nasa.gov/SEcat5/deltatpoly.html |
distance_between_earth_and_moon |
Δ |
Earth-moon distance | Kilometers (KM) | A.A. p. 342 |
distance_between_earth_and_sun_in_astronomical_units |
R |
Distance between the earth and the sun | Astronomical Units (AU) | A.A. p. 164 (25.5) |
distance_between_earth_and_sun_in_kilometers |
R |
Distance between the earth and the sun | Kilometers (KM) | A.A. p. 164 (25.5) |
dynamical_time |
TD |
Dynamical Time | ISO 8601 Date and time with offset | A.A. p. 77 |
earth_orbit_eccentricity |
e |
Eccentricity of the earth's orbit | Astronomical Units (AU) | A.A. p. 163 (25.4) |
ecliptic_latitude_of_earth_using_vsop87 |
B |
Ecliptical latitude of the earth | Angle | A.A. p. 219, (32.2) |
ecliptic_longitude_of_earth_using_vsop87 |
L |
Ecliptical longitude of the earth | Angle | A.A. p. 219, (32.2) |
equatorial_horizontal_parallax |
π |
Moon equitorial horizontal parallax | Angle | A.A. p. 337 |
julian_ephemeris_day |
JDE |
Julian Ephemeris Day | Days, expressed as Float | A.A. p. 59 |
longitude_of_ascending_node_low_precision |
Ω |
Longitude of the ascending node of the Moon's mean orbit | Angle | A.A. p. 164 |
longitude_of_ascending_node |
Ω |
Longitude of the ascending node of the Moon's mean orbit | Angle | A.A. p. 144 |
mean_obliquity_of_ecliptic |
ε0 |
Mean obliquity of the ecliptic | Angle | A.A. p. 147 (22.3) |
moon_apparent_ecliptic_longitude |
apparent λ |
Moon apparent longitude | Angle | A.A. p. 343 |
moon_argument_of_latitude_high_precision |
F |
Moon argument of latitude (high precision) | Angle | A.A. p. 338 (47.5) |
moon_argument_of_latitude |
F |
Moon argument of latitude | Angle | A.A. p. 144 |
moon_declination |
δ |
Geocentric (apparent) declination of the moon | Angle | A.A. p. 93 (13.4) |
moon_ecliptic_latitude |
β |
Ecliptical latitude | Angle | A.A. p. 342 |
moon_ecliptic_longitude |
λ |
Ecliptical longitude | Angle | A.A. p. 342 |
moon_elongation_from_sun |
ψ |
Geocentric elongation of the moon | Angle | A.A. p. 345 (48.2) |
moon_heliocentric_distance |
Σr |
Moon heliocentric distance | 1000 kilometers | A.A. p. 338 |
moon_heliocentric_latitude |
Σb |
Moon heliocentric latitude | Degrees (decimal) | A.A. p. 338 |
moon_heliocentric_longitude |
Σl |
Moon heliocentric longitude | Degrees (decimal) | A.A. p. 338 |
moon_illuminated_fraction |
k |
Illuminated fraction of the moon | Fraction (decimal) | A.A. p. 345 (48.1) |
moon_mean_anomaly_high_precision |
M' |
Moon mean_anomaly (high precision) | Angle | A.A. p. 338 (47.4) |
moon_mean_anomaly |
M' |
Moon mean_anomaly | Angle | A.A. p. 149 |
moon_mean_elongation_from_sun |
D |
Mean elongation of the moon from the sun | Angle | A.A. p. 144 |
moon_mean_elongation_from_sun_high_precision |
D |
Mean elongation of the moon from the sun (high precision) | Angle | A.A. p. 338 (47.2) |
moon_mean_longitude |
L' |
Moon mean_longitude | Angle | A.A. p. 338 (47.1) |
moon_phase_angle |
i |
Phase angle of the moon | Angle | A.A. p. 346 (48.3) |
moon_position_angle_of_bright_limb |
χ |
Position angle of the moon's bright limb | Angle | A.A. p. 346 (48.5) |
moon_right_ascension |
α |
Geocentric (apparent) right ascension of the moon | Angle | A.A. p. 93 (13.3) |
nutation_in_longitude |
Δψ |
Nutation in longitude | Angle | A.A. p. 144 |
nutation_in_obliquity |
Δε |
Nutation in obliquity | Angle | A.A. p. 144 |
obliquity_of_ecliptic |
ε |
True obliquity of the ecliptic | Angle | A.A. p. 147 |
radius_vector_of_earth_using_vsop87 |
R |
Radius vector (distance to sun) of the earth | Astronomical Units (AU) | A.A. p. 219 (32.2) |
sun_anomaly |
v |
True anomaly of the sun | Angle | A.A. p. 164 |
sun_declination |
δ0 |
Geocentric declination (of the sun) | Angle | A.A. p. 93 (13.4) |
sun_ecliptic_longitude |
apparent λ0 |
Sun apparent longitude | Angle | A.A. p. 169 |
sun_equation_of_center |
C |
Sun's equation of the center | Angle | A.A. p. 164 |
sun_mean_anomaly |
M |
Sun mean_anomaly (version 1) | Angle | A.A. p. 144 |
sun_mean_anomaly2 |
M |
Sun mean_anomaly (version 2) | Angle | A.A. p. 163 (25.3) |
sun_mean_longitude |
L0 |
Geometric mean longitude of the sun | Angle | A.A. p. 163 (25.2) |
sun_right_ascension |
α0 |
Geocentric (apparent) right ascension of the sun | Angle | A.A. p. 165 (25.6) |
sun_true_longitude |
☉ |
True longitude of the sun | Angle | A.A. p. 164 |
time_millennia |
t |
Time, from the Epoch J2000.0 | Millennia | A.A. p. 218 (32.1) |
time_myriads |
U |
Time, from the Epoch J2000.0 | 10K years (myriads) | A.A. p. 147 |
time |
T |
Time, from the Epoch J2000.0 | Centuries | A.A. p. 143 (22.1) |
A.A.: J. Meeus, Astronomical Algorithms, 2nd ed. Richmond, VA: Willmann-Bell, 1998
Accuracy
A simple validation script was written for the moon_illuminated_fraction
method (see bin/validation
). The true values for the period of 1950 to 2050 were taken from the JPL Horizons system (date of access: 2024-12-14). At the moment of the initial release of this Gem, the results are as follows:
- Mean Absolute Error (MAE):
0.000022
- Mean Squared Error (MSE):
0.000000
- Root Mean Squared Error (RMSE):
0.000050
Development
After checking out the repo, run bin/setup
to install dependencies. Then, run bundle exec rspec
to run the tests. You can also run bin/console
for an interactive prompt that will allow you to experiment.
Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/valerius/lunation.
License
The gem is available as open source under the terms of the MIT License.
Copyright
Copyright (c) 2023 Ivo Kalverboer (see LICENSE).