Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

Astronomical algorithms in Rust

License

NotificationsYou must be signed in to change notification settings

saurvs/astro-rust

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Contents

API Docs

About

astro-rust is a library of advanced astronomical algorithms for the Rust programming language.

Implemented algorithms include:

  • planetary and solar positioning by the complete set of elements of Bretagnon and Francou's VSP087 theory
  • lunar positioning by the principle elements of Chapront's ELP-2000/82 theory
  • satellite positioning for Saturn and Jupiter
  • finding Julian dates, sidereal time, dynamical time, equinoxes, rising and setting times, times of lunar phases
  • coordinate transformations
  • corrections for precession, nutation, parallax, aberration, atmospheric refraction
  • calculation of the physical ephemeris for Mars, Jupiter, and the rings of Saturn
  • finding position angles, illuminated fractions, visual magnitudes
  • andmuch more.

Usage

  • Add the dependencyastro in yourCargo.toml

    [dependencies]astro ="2.0.0"
  • Include the crateastro in your code

    externcrate astro;use astro::*;
  • Specify your time of interest using theJulian day

    // for example, the time of the Apollo 11 moon landinglet day_of_month = time::DayOfMonth{day:20,hr:20,min:18,sec:4.0,time_zone:0.0};let date = time::Date{year:1969,month:7,// Julydecimal_day: time::decimal_day(&day_of_month),cal_type: time::CalType::Gregorian};let julian_day = time::julian_day(&date);// for higher accuracy in specifying the time of interest,// find the Julian Ephemeris day; this slightly differs from// the Julian day by ΔT, which is usually a few seconds. you// can get a reported value of it from the Astronomical// Almanac, or calculate it using the built-in functionlet delta_t = time::delta_t(date.year, date.month);let julian_ephm_day = time::julian_ephemeris_day(julian_day, delta_t);
  • Find the position of the Sun and the Moon with respect to the Earth

    // geocentric ecliptic point and radius vector of the Sunlet(sun_ecl_point, rad_vec_sun) = sun::geocent_ecl_pos(julian_day);// sun_ecl_point.long    - ecliptic longitude (radians)// sun_ecl_point.lat     - ecliptic latitude  (radians)// rad_vec_sun - distance between the Sun and the Earth (AU)// and similarly for the Moonlet(moon_ecl_point, rad_vec_moon) = lunar::geocent_ecl_pos(julian_day);
  • Find the position of a planet with respect to the Sun

    // the heliocentric point and radius vector of a planet, like Jupiterlet(jup_long, jup_lat, rad_vec) = planet::heliocent_pos(&planet::Planet::Jupiter, julian_day);// or neptunelet(nep_long, nep_lat, rad_vec) = planet::heliocent_pos(&planet::Planet::Neptune, julian_day);// positioning for all the eight planets (and (the dwarf planet) Pluto) is supportedlet(plut_long, plut_lat, rad_vec) = pluto::heliocent_pos(julian_day);
  • Find the geodesic distance between two locations on Earth

    // geodesic distance between the Observatoire de Paris and// the US Naval Observatory at Washington DClet paris = coords::GeographPoint{long: angle::deg_frm_dms(-2,20,14.0).to_radians(),lat: angle::deg_frm_dms(48,50,11.0).to_radians()};let washington = coords::GeographPoint{long: angle::deg_frm_dms(77,3,56.0).to_radians(),lat: angle::deg_frm_dms(38,55,17.0).to_radians()};// angle::deg_frm_dms() converts degrees expressed in degrees,// minutes and seconds into a fractional degreelet distance = planet::earth::geodesic_dist(&paris,&washington);// in meters
  • Convert equatorial coordinates to ecliptic coordinates

    // equatorial coordinates of the star Polluxlet right_ascension =116.328942_f64.to_radians();let declination =28.026183_f64.to_radians();// mean obliquity of the eclipticlet oblq_eclip =23.4392911_f64.to_radians();// you can also get oblq_eclip from ecliptic::mn_oblq_IAU(julian_day)// for the Julian day on which the coordinates of the star// were observed// also make sure to type #[macro_use] before including the crate// to use macros// now, convert equatorial coordinates to ecliptic coordinateslet(ecl_long, ecl_lat) =ecl_frm_eq!(right_ascension, declination, oblq_eclip);
  • Convert equatorial coordinates to galactic coordinates

    // equatorial coordinates of the Nova Serpentis 1978let right_ascension = angle::deg_frm_hms(17,48,59.74).to_radians();let declination = angle::deg_frm_dms(-14,43,8.2).to_radians();// convert to galactic coordinateslet(gal_long, gal_lat) =gal_frm_eq!(right_ascension, declination);
  • Correct for nutation in different coordinate systems

    // nutation in ecliptic longitude and obliquity of the eclipticlet(nut_in_long, nut_in_oblq) = nutation::nutation(julian_day);// nutation in equatorial coordinateslet(nut_in_asc, nut_in_dec) = nutation::nutation_in_eq_coords(julian_day);

Contributing

Anyone interested to contribute in any way possible is encouraged to do so. Not all the algorithms in Meeus's book have been implemented yet. Documentation and tests need to be written for them as well. Refactored code and minor optimizations for the existing code are also welcome.

The end goal (of this project) is to build a modern, well-tested, well-documented library of algorithms for future use in astronomy. And Rust is very much the right choice for building that.

A fun suggestion is the addition of the recentIAU 2000/2006 precession-nutation model. This method improves upon the existing model implemented here"by taking into account the effect of mantle anelasticity, ocean tides, electromagnetic couplings produced between the fluid outer core and the mantle as well as between the solid inner core and fluid outer core".

References

The main reference used as the source of algorithms is the famous bookAstronomical Algorithms by Jean Meeus, whose almost every chapter has been addressed here, with functions that are well-documented and tests that use example data from the book; in some cases, such as ΔT approximation and planetary heliocentric positioning, more accurate methods have been implemented.

About

Astronomical algorithms in Rust

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages


[8]ページ先頭

©2009-2025 Movatter.jp