Loading...
Searching...
No Matches
orbital.c File Reference

Function relating to the use of Keplerian orbital elements. More...

## Functions

int | novas_orbit_native_posvel (double jd_tdb, const novas_orbital *restrict orbit, double *restrict pos, double *restrict vel)
| Calculates a rectangular equatorial position and velocity vector for the given orbital elements for the specified time of observation, in the native coordinate system in which the orbital is defined (e.g.
int | novas_orbit_posvel (double jd_tdb, const novas_orbital *restrict orbit, enum novas_accuracy accuracy, double *restrict pos, double *restrict vel)
| Calculates a rectangular equatorial position and velocity vector for the given orbital elements for the specified time of observation.
int | novas_set_orbsys_pole (enum novas_reference_system type, double ra, double dec, novas_orbital_system *restrict sys)
| Sets the orientation of an orbital system using the RA and DEC coordinates of the pole of the Laplace (or else equatorial) plane relative to which the orbital elements are defined.

## Detailed Description

Function relating to the use of Keplerian orbital elements.

For example, the IAU Minor Planet Center publishes up-to-date Keplerial orbital elements for all asteroids, comets, and Near-Earth Objects (NEOs) regularly. On short timescales these can provide accurate positions for such objects, that are as good as, or comparable to, the ephemeris data provided by NASA JPL.

For newly discovered objects, the MPC orbital elements may be the only source, or the most accurate source, of position information.

To use Keplerian orbital elements with SuperNOVAS, simply define the orbital parameters in a novas_orbital structure. By default heliocentric orbits are assumed, but you may also define orbitals around other bodies, such as a major planet, by defining the body (or barycenter) that is at the center of the orbital, and the orientation of the orbital system (w.r.t. the ecliptic or equator of date) with novas_set_orbsys_pole(). E.g.:

novas_orbital orb = NOVAS_ORBIT_INIT;
orb.a = ... // [AU] semi-major axis
... // populate the rest of the orbital parameters.
// Set Jupiter as the orbital center
orb.system.center = NOVAS_JUPITER_INIT;
// Set the orientation by defining the RA/Dec of the orbital pole, say in ICRS
novas_set_orbsys_pole(NOVAS_ICRS, ra_pole, dec_pole, &orb.system);
NOVAS_ICRS
@ NOVAS_ICRS
International Celestial Reference system.
Definition novas.h:892
novas_set_orbsys_pole
int novas_set_orbsys_pole(enum novas_reference_system type, double ra, double dec, novas_orbital_system *restrict sys)
Sets the orientation of an orbital system using the RA and DEC coordinates of the pole of the Laplace...
Definition orbital.c:377
NOVAS_ORBIT_INIT
#define NOVAS_ORBIT_INIT
Initializer for novas_orbital for heliocentric orbits using GCRS ecliptic parametrization.
Definition novas.h:1447
NOVAS_JUPITER_INIT
#define NOVAS_JUPITER_INIT
object initializer for the planet Jupiter
Definition novas.h:1554
novas_orbital_system::center
enum novas_planet center
major planet or barycenter at the center of the orbit.
Definition novas.h:1363
novas_orbital
Keplerian orbital elements for NOVAS_ORBITAL_OBJECT type.
Definition novas.h:1416
novas_orbital::system
struct novas_orbital_system system
orbital reference system assumed for the parametrization
Definition novas.h:1417
novas_orbital::a
double a
[AU] semi-major axis
Definition novas.h:1419

Once the orbital is defined, you can use it to define an orbital object via make_orbital_object() to enable the same astrometric calculations as for ephemeris sources, e.g.:

object source;
// Let's say the orbital is that for Callisto, so we set the source name
// and NAIF ID number (504) accordingly.
make_orbital_object("Callisto", 504, &orb, &source);
make_orbital_object
int make_orbital_object(const char *name, long num, const novas_orbital *orbit, object *body)
Sets a celestial object to be a Solar-system orbital body.
Definition target.c:731

Or, you can calculate geometric orbital positions and velocities directly via novas_orbit_posvel(), while novas_orbit_native_posvel() will do the same, but in the native coordinate system in which the orbital is defined.

Date
  Created on Mar 6, 2025

Author
  Attila Kovacs

Since
  1.2

See also
  novas_orbital, make_orbital_object()
  ephemeris.c