Wiki
Download
Manual
Eggs
API
Tests
Bugs
show
edit
history
You can edit this page using
wiki syntax
for markup.
Article contents:
== Outdated egg! This is an egg for CHICKEN 4, the unsupported old release. You're almost certainly looking for [[/eggref/5/ephem|the CHICKEN 5 version of this egg]], if it exists. If it does not exist, there may be equivalent functionality provided by another egg; have a look at the [[https://wiki.call-cc.org/chicken-projects/egg-index-5.html|egg index]]. Otherwise, please consider porting this egg to the current version of CHICKEN. [[tags: egg]] == Ephem [[toc:]] === Description {{ephem}} is a wrapper for [[http://libnova.sourceforge.net|libnova]] a "general purpose, double precision, Celestial Mechanics, Astrometry and Astrodynamics library." === Author [[https://github.com/RobAltenburg|Rob Altenburg]] === Requirements [[/egg/numbers|numbers]], [[/egg/srfi-19|srfi-19]], [[/egg/foreigners|foreigners]] === Installation {{ephem}} requires [[http://libnova.sourceforge.net|libnova]] v0.16. That version is available from the [[https://sourceforge.net/p/libnova/libnova/ci/master/tree/|git repository]]. === Procedures The libnova [[http://libnova.sourceforge.net/modules.html|modules]] documentation provides essential details. Main differences from that library are: * {{ephem}} function names are separated with dashes instead of underscores and the "ln" or "ln_get" prefix is omitted. * {{ephem}} functions are not passed structures to hold results--when necessary they allocate and return a new object of the required foreign type. * [[/egg/srfi-19|srfi-19]] date functions are used instead of equivalent libnova functions. ==== Data Types ===== Rise, Set, Transit <procedure>(make-rst #!optional rise set transit)</procedure> Returns a ln_rst_time foreign record type. If rise, set, or transit is not specified an empty structure is allocated and returned. Rise, set, and transit are Julian dates as returned by {{srfi-19}}'s (date->julian-day) function. Note that I didn't expose the setters to mutate existing records of a given type. <procedure>(rst-rise rst)</procedure> <procedure>(rst-set rst)</procedure> <procedure>(rst-transit rst)</procedure> ===== Rectangular Coordinates <procedure>(make-rect #!optional x y x)</procedure> <procedure>(rect-x rect)</procedure> <procedure>(rect-y rect)</procedure> <procedure>(rect-z rect)</procedure> ===== Heliocentric Coordinates <procedure>(make-helio #!optional l b r)</procedure> <procedure>(helio-l helio)</procedure> <procedure>(helio-b helio)</procedure> <procedure>(helio-r helio)</procedure> ===== Longitude and Latitude <procedure>(make-ecl #!optional longitude latitude)</procedure> <procedure>(ecl-lng ecl)</procedure> <procedure>(ecl-lat ecl)</procedure> ===== Equatorial Coordinates <procedure>(make-equ #!optional ra dec)</procedure> Note: Right ascension and declination are both expressed in degrees, right ascensions given in h:m:s must be converted: <enscript hightlight=scheme> (hms->deg 12 30 1) </enscript> <procedure>(equ-ra equ)</procedure> <procedure>(equ-dec equ)</procedure> ===== Horizontal Coordinates <procedure>(make-hrz #!optional azimuth altitude)</procedure> <procedure>(hrz-az hrz)</procedure> <procedure>(hrz-alt hrz)</procedure> ===== Hours, Minutes, Seconds <procedure>(make-hms #!optional hours minuts seconds)</procedure> <procedure>(hms-hours hms)</procedure> <procedure>(hms-minutes hms)</procedure> <procedure>(hms-seconds hms)</procedure> ===== Nutation <procedure>(make-nutation #!optional longitude obliquity ecliptic)</procedure> <procedure>(nutation-longitude nutation)</procedure> <procedure>(nutation-obliquity nutation)</procedure> <procedure>(nutation-ecliptic nutation)</procedure> ===== Orbital Elements ====== Elliptic Orbital Elements <procedure>(make-ell #!optional a e i w omega n jd)</procedure> <procedure>(ell-a ell)</procedure> <procedure>(ell-e ell)</procedure> <procedure>(ell-i ell)</procedure> <procedure>(ell-w ell)</procedure> <procedure>(ell-omega ell)</procedure> <procedure>(ell-n ell)</procedure> <procedure>(ell-jd ell)</procedure> ====== Hyperbolic Orbital Elements <procedure>(make-hyp #!optional q e i w omega jd)</procedure> <procedure>(hyp-q hyp)</procedure> <procedure>(hyp-e hyp)</procedure> <procedure>(hyp-i hyp)</procedure> <procedure>(hyp-w hyp)</procedure> <procedure>(hyp-omega hyp)</procedure> <procedure>(hyp-jd hyp)</procedure> ====== Parabolic Orbital Elements <procedure>(make-par #!optional q i w omega jd)</procedure> <procedure>(par-q par)</procedure> <procedure>(par-i par)</procedure> <procedure>(par-w par)</procedure> <procedure>(par-omega par)</procedure> <procedure>(par-jd par)</procedure> ==== Sidereal Time <procedure>(gmst jd)</procedure> <procedure>(gast jd)</procedure> <procedure>(lmst jd longitude)</procedure> <procedure>(last jd longitude)</procedure> ==== Utility <procedure>(get-version)</procedure> <procedure>(rad->deg rad)</procedure> <procedure>(deg->rad deg)</procedure> <procedure>(hms->deg hms)</procedure> <procedure>(deg->hms deg)</procedure> <procedure>(get-date)</procedure> <procedure>(vsop87->fk5 helio jd)</procedure> ==== Rise, Set, Transit <procedure>(object-rst jd ecl-observer equ-object)</procedure> <procedure>(object-next-rst jd ecl-observer equ-object)</procedure> <procedure>(object-next-rst-horizon jd ecl-observer equ-object horizon)</procedure> <procedure>(body-rst-horizon jd ecl-observer body-object horizon)</procedure> <procedure>(body-next-rst-horizon jd ecl-observer body-object horizon)</procedure> <procedure>(body-next-rst-horizon-future jd ecl-observer body-object horizon day-limit)</procedure> ==== Motion ===== Elliptic Motion <procedure>(solve-kepler e M)</procedure> <procedure>(ell-mean-anomaly n delta-jd)</procedure> <procedure>(ell-true-anomaly e E)</procedure> <procedure>(ell-radius-vector a e E)</procedure> <procedure>(ell-smajor-diam e q)</procedure> <procedure>(ell-sminor-diam e a)</procedure> <procedure>(ell-mean-motion a)</procedure> <procedure>(ell-geo-rect-posn ell jd)</procedure> <procedure>(ell-helio-rect-posn ell jd)</procedure> <procedure>(ell-orbit-len ell)</procedure> <procedure>(ell-orbit-vel jd ell)</procedure> <procedure>(ell-orbit-pvel ell)</procedure> <procedure>(ell-orbit-avel ell)</procedure> <procedure>(ell-body-phase-angle jd ell)</procedure> <procedure>(ell-body-elong jd ell)</procedure> <procedure>(ell-body-solar-dist jd ell)</procedure> <procedure>(ell-body-earth-dist jd ell)</procedure> <procedure>(ell-body-equ-coords jd ell)</procedure> <procedure>(ell-body-rst jd ecl)</procedure> <procedure>(ell-body-rst-horizon jd ecl ell horizon)</procedure> <procedure>(ell-body-next-rst-horizon jd ecl ell horizon)</procedure> <procedure>(ell-body-next-rst-horizon-future jd ecl ell horizon day-limit)</procedure> <procedure>(ell-last-perihelion epoch-jd M n)</procedure> ===== Hyperbolic Motion <procedure>(solve-hyp-barker Q1 G t)</procedure> <procedure>(hyp-true-anomaly q e t)</procedure> <procedure>(hyp-radius-vector q e t)</procedure> <procedure>(hyp-geo-rect-posn h)</procedure> <procedure>(hyp-helio-rect-posn hyp jd)</procedure> <procedure>(hyp-body-equ-coords jd hyp)</procedure> <procedure>(hyp-body-earth-dist jd hyp)</procedure> <procedure>(hyp-body-solar-dist jd hyp)</procedure> <procedure>(hyp-body-phase-angle jd hyp)</procedure> <procedure>(hyp-body-elong jd hyp)</procedure> <procedure>(hyp-body-rst jd ecl hyp)</procedure> <procedure>(hyp-body-rst-horizon jd ecl hyp horizon)</procedure> <procedure>(hyp-body-next-rst-horizon jd ecl hyp horizon)</procedure> <procedure>(hyp-body-next-rst-horizon-future jd ecl hyp horizon day-limit)</procedure> ===== Parabolic Motion <procedure>(solve-barker q t)</procedure> <procedure>(par-true-anomaly q t)</procedure> <procedure>(par-radius-vector q t)</procedure> <procedure>(par-geo-rect-posn par jd)</procedure> <procedure>(par-helio-rect-posn par jd)</procedure> <procedure>(par-body-equ-coords jd par)</procedure> <procedure>(par-body-earth-dist jd par)</procedure> <procedure>(par-body-solar-dist jd par)</procedure> <procedure>(par-body-phase-angle jd par)</procedure> <procedure>(par-body-elong jd par)</procedure> <procedure>(par-body-rst jd ecl par)</procedure> <procedure>(par-body-rst-horizon jd ecl par horizon)</procedure> <procedure>(par-body-next-rst-horizon jd ecl par horizon)</procedure> <procedure>(par-body-next-rst-horizon-future jd ecl par horizon day-limit)</procedure> ==== Bodies ===== Sun <procedure>(solar-rst-horizon jd ecl horizon)</procedure> <procedure>(solar-rst jd ecl)</procedure> <procedure>(solar-geom-coords jd)</procedure> <procedure>(solar-equ-coords jd)</procedure> <procedure>(solar-ecl-coords jd)</procedure> <procedure>(solar-geo-coords jd)</procedure> <procedure>(solar-sdiam jd)</procedure> ===== Earth <procedure>(earth-helio-coords jd)</procedure> <procedure>(earth-solar-dist jd)</procedure> <procedure>(earth-rect-helio jd)</procedure> <procedure>(earth-centre-dist height latitude)</procedure> ===== Moon <procedure>(lunar-phase jd)</procedure> <procedure>(lunar-disk jd)</procedure> <procedure>(lunar-sdiam jd)</procedure> <procedure>(lunar-earth-dist jd)</procedure> <procedure>(lunar-bright-limb jd)</procedure> <procedure>(lunar-long-asc-node jd)</procedure> <procedure>(lunar-long-perigee jd)</procedure> <procedure>(lunar-equ-coords jd precision)</procedure> <procedure>(lunar-rst jd ecl)</procedure> <procedure>(lunar-geo-posn jd precision)</procedure> <procedure>(lunar-equ-coords-prec jd precision)</procedure> <procedure>(lunar-ecl-coords jd precision)</procedure> ==== Mercury <procedure>(mercury-sdiam jd)</procedure> <procedure>(mercury-rst jd ecl)</procedure> <procedure>(mercury-helio-coords jd)</procedure> <procedure>(mercury-equ-coords jd)</procedure> <procedure>(mercury-earth-dist jd)</procedure> <procedure>(mercury-solar-dist jd)</procedure> <procedure>(mercury-magnitude jd)</procedure> <procedure>(mercury-disk jd)</procedure> <procedure>(mercury-phase jd)</procedure> <procedure>(mercury-rect-helio jd)</procedure> ===== Venus <procedure>(venus-sdiam jd)</procedure> <procedure>(venus-rst jd ecl)</procedure> <procedure>(venus-helio-coords jd)</procedure> <procedure>(venus-equ-coords jd)</procedure> <procedure>(venus-earth-dist jd)</procedure> <procedure>(venus-solar-dist jd)</procedure> <procedure>(venus-magnitude jd)</procedure> <procedure>(venus-disk jd)</procedure> <procedure>(venus-phase jd)</procedure> <procedure>(venus-rect-helio jd)</procedure> ===== Mars <procedure>(mars-sdiam jd)</procedure> <procedure>(mars-rst jd ecl)</procedure> <procedure>(mars-helio-coords jd)</procedure> <procedure>(mars-equ-coords jd)</procedure> <procedure>(mars-earth-dist jd)</procedure> <procedure>(mars-solar-dist jd)</procedure> <procedure>(mars-magnitude jd)</procedure> <procedure>(mars-disk jd)</procedure> <procedure>(mars-phase jd)</procedure> <procedure>(mars-rect-helio jd)</procedure> ===== Jupiter <procedure>(jupiter-equ-sdiam jd)</procedure> <procedure>(jupiter-pol-sdiam jd)</procedure> <procedure>(jupiter-rst jd ecl)</procedure> <procedure>(jupiter-helio-coords jd)</procedure> <procedure>(jupiter-equ-coords jd)</procedure> <procedure>(jupiter-earth-dist jd)</procedure> <procedure>(jupiter-solar-dist jd)</procedure> <procedure>(jupiter-magnitude jd)</procedure> <procedure>(jupiter-disk jd)</procedure> <procedure>(jupiter-phase jd)</procedure> <procedure>(jupiter-rect-helio jd)</procedure> ===== Saturn <procedure>(saturn-equ-sdiam jd)</procedure> <procedure>(saturn-pol-sdiam jd)</procedure> <procedure>(saturn-rst jd ecl)</procedure> <procedure>(saturn-helio-coords jd)</procedure> <procedure>(saturn-equ-coords jd)</procedure> <procedure>(saturn-earth-dist jd)</procedure> <procedure>(saturn-solar-dist jd)</procedure> <procedure>(saturn-magnitude jd)</procedure> <procedure>(saturn-disk jd)</procedure> <procedure>(saturn-phase jd)</procedure> <procedure>(saturn-rect-helio jd)</procedure> ===== Uranus <procedure>(uranus-sdiam jd)</procedure> <procedure>(uranus-rst jd ecl)</procedure> <procedure>(uranus-helio-coords jd)</procedure> <procedure>(uranus-equ-coords jd)</procedure> <procedure>(uranus-earth-dist jd)</procedure> <procedure>(uranus-solar-dist jd)</procedure> <procedure>(uranus-magnitude jd)</procedure> <procedure>(uranus-disk jd)</procedure> <procedure>(uranus-phase jd)</procedure> <procedure>(uranus-rect-helio jd)</procedure> ===== Neptune <procedure>(neptune-sdiam jd)</procedure> <procedure>(neptune-rst jd ecl)</procedure> <procedure>(neptune-helio-coords jd)</procedure> <procedure>(neptune-equ-coords jd)</procedure> <procedure>(neptune-earth-dist jd)</procedure> <procedure>(neptune-solar-dist jd)</procedure> <procedure>(neptune-magnitude jd)</procedure> <procedure>(neptune-disk jd)</procedure> <procedure>(neptune-phase jd)</procedure> <procedure>(neptune-rect-helio jd)</procedure> ===== Pluto <procedure>(pluto-sdiam jd)</procedure> <procedure>(pluto-rst jd ecl)</procedure> <procedure>(pluto-helio-coords jd)</procedure> <procedure>(pluto-equ-coords jd)</procedure> <procedure>(pluto-earth-dist jd)</procedure> <procedure>(pluto-solar-dist jd)</procedure> <procedure>(pluto-magnitude jd)</procedure> <procedure>(pluto-disk jd)</procedure> <procedure>(pluto-phase jd)</procedure> <procedure>(pluto-rect-helio jd)</procedure> ==== Misc <procedure>(heliocentric-time-diff jd equ)</procedure> <procedure>(refraction-adj altitude atm-pressure temp)</procedure> <procedure>(equ-aberration equ jd)</procedure> <procedure>(ecl-aberration equ jd)</procedure> <procedure>(dynamical-time-diff jde)</procedure> <procedure>(jde jd)</procedure> <procedure>(angular-separation equ equ)</procedure> <procedure>(rel-posn-angle equ equ)</procedure> <procedure>(constellation)</procedure> <procedure>(apparent-posn equ-mean equ-proper jd)</procedure> <procedure>(nutation jd)</procedure> <procedure>(equ-prec equ-mean jd)</procedure> <procedure>(equ-prec2 equ-mean jd jd)</procedure> <procedure>(ecl-prec ecl jd)</procedure> <procedure>(ell-comet-mag jd ell g k)</procedure> <procedure>(par-comet-mag jd par g k)</procedure> ==== Transforms <procedure>(hrz-from-equ equ ecl jd)</procedure> <procedure>(hrz-from-equ-sidereal-time equ ecl sidereal)</procedure> <procedure>(equ-from-ecl ecl jd)</procedure> <procedure>(ecl-from-equ equ jd)</procedure> <procedure>(rect-from-helio helio)</procedure> <procedure>(ecl-from-rect rect)</procedure> <procedure>(equ-from-gal gal)</procedure> <procedure>(equ2000-from-gal gal)</procedure> <procedure>(gal-from-equ equ)</procedure> <procedure>(gal-from-equ2000 equ)</procedure> ==== Non-Libnova <procedure>(range-hours hours)</procedure> <procedure>(range-degrees degrees)</procedure> <procedure>(range-degrees180 degrees)</procedure> <procedure>(is-above-horizon? equ ecl jd)</procedure> <procedure>(dms->deg dms)</procedure> <procedure>(hms->hr hms)</procedure> === Examples <enscript hightlight=scheme> (use numbers srfi-19 ephem) ; set time using srfi-19 (define dd (exact->inexact (date->julian-day (make-date 0 0 30 7 13 12 2016 (* 3600 0) #f)))) ; set the longitude and latitude of the observer (define my-ecl (make-ecl -76.8867 40.2732)) ; calculate the Sun's rise, set, and transit using different methods (define rst (solar-rst dd my-ecl)) ; print the Julian date of the rise time (display (rst-rise rst)) (newline) </enscript> === License LGPL-3.0 === Version History ; 1.0 Initial Release
Description of your changes:
I would like to authenticate
Authentication
Username:
Password:
Spam control
What do you get when you multiply 5 by 1?