astrora_core 0.1.1

Astrora - Rust-backed astrodynamics library - core computational components
Documentation
Two-Body Problem
================

The two-body module provides classes and functions for working with Keplerian orbits
and two-body dynamics.

.. currentmodule:: astrora.twobody

Orbit Class
----------

.. autoclass:: astrora.twobody.Orbit
   :members:
   :undoc-members:
   :show-inheritance:
   :special-members: __init__

   .. rubric:: Creation Methods

   .. autosummary::
      :nosignatures:

      ~Orbit.from_classical
      ~Orbit.from_vectors
      ~Orbit.circular
      ~Orbit.parabolic

   .. rubric:: Propagation Methods

   .. autosummary::
      :nosignatures:

      ~Orbit.propagate
      ~Orbit.propagate_to_anomaly

   .. rubric:: State Methods

   .. autosummary::
      :nosignatures:

      ~Orbit.rv
      ~Orbit.classical
      ~Orbit.sample

   .. rubric:: Orbit Properties

   .. autosummary::

      ~Orbit.period
      ~Orbit.energy
      ~Orbit.angular_momentum
      ~Orbit.ecc_vector
      ~Orbit.r
      ~Orbit.v
      ~Orbit.a
      ~Orbit.ecc
      ~Orbit.inc
      ~Orbit.raan
      ~Orbit.argp
      ~Orbit.nu

   .. rubric:: Reference Frame

   .. autosummary::

      ~Orbit.frame
      ~Orbit.attractor

Examples
--------

Creating Orbits
~~~~~~~~~~~~~~

.. code-block:: python

   from astrora.twobody import Orbit
   from astrora.bodies import Earth

   # From classical elements
   orbit = Orbit.from_classical(
       Earth,
       a=7000.0,      # Semi-major axis (km)
       ecc=0.01,      # Eccentricity
       inc=28.5,      # Inclination (degrees)
       raan=0.0,      # Right ascension of ascending node (degrees)
       argp=0.0,      # Argument of periapsis (degrees)
       nu=0.0         # True anomaly (degrees)
   )

   # From state vectors
   import numpy as np
   r = np.array([7000.0, 0.0, 0.0])  # Position (km)
   v = np.array([0.0, 7.5, 0.0])     # Velocity (km/s)
   orbit = Orbit.from_vectors(Earth, r, v)

Propagating Orbits
~~~~~~~~~~~~~~~~~

.. code-block:: python

   # Propagate forward in time
   orbit_future = orbit.propagate(3600.0)  # Propagate 1 hour

   # Propagate to specific true anomaly
   orbit_at_anomaly = orbit.propagate_to_anomaly(90.0)  # Propagate to 90 degrees

Accessing Orbit Properties
~~~~~~~~~~~~~~~~~~~~~~~~~~

.. code-block:: python

   # Get state vectors
   r, v = orbit.rv()

   # Get classical elements
   a, ecc, inc, raan, argp, nu = orbit.classical()

   # Access specific properties
   print(f"Period: {orbit.period} s")
   print(f"Energy: {orbit.energy} km²/s²")
   print(f"Angular momentum: {orbit.angular_momentum} km²/s")