First stable release. The function names, arguments, and defaults in this version are the ones the package will keep; future changes to them will be deprecated first, not made silently.
get_energy(), get_momentum(), get_angular_momentum(): Total kinetic
and potential energy, total linear momentum, and total angular momentum of
the system at every time step of a simulation. get_energy() reads G
and softening from the simulation output so the potential is computed
with the same force law that produced the run.
conserved_quantities(): The three quantities above joined into one
tibble with their relative errors against the initial values. Verlet and
Euler-Cromer keep momentum and angular momentum to rounding error; the
energy error is the integrator's report card.
get_orbital_elements(): The inverse of add_body_keplerian(). Recovers
the osculating Keplerian elements (a, e, i, lan, arg_pe, nu) and period of
a body relative to a parent at every time step, from the simulated
position and velocity.
continue_simulation(): Pick up a run from its last state with a new
(or the same) time step and append the result, with time continuing
from where the previous run ended. Makes segmented runs possible: large
steps far from periapsis, small steps through it.
system_from_simulation(): Rebuild an orbit_system from any snapshot
of a simulation, so a run can be modified and continued.
shift_reference_frame() accepts center_id = "barycenter" to re-center
on the system's center of mass at every time step.
add_body_keplerian() accepts hyperbolic orbits (e > 1 with a negative
semi-major axis), so interstellar visitors and flybys can be set up from
elements. Exactly parabolic orbits (e = 1) remain unsupported.
simulate_system() records G, softening, method, and time_step as
attributes of its output; the new analysis functions use them as defaults.
remove_body(): Remove one or more bodies from a system by name. Accepts
a single name or a character vector for removing multiple bodies at once.
get_bodies(): Extract the bodies tibble from an orbit_system. Useful
for inspecting, filtering, or saving body states without reaching into the
object's internals.
save_system() / load_system(): Save a full orbit_system to an .rds
file and restore it later. Preserves everything — bodies, gravitational
constant, and class.
export_bodies(): Write the body table (id, mass, position, velocity) to
a CSV file for sharing with collaborators or loading into other tools like
Python or Excel.
print.orbit_system(): Custom print method that displays a clean summary
with a header line and the bodies as a tibble, instead of dumping the raw
list structure.
add_body_keplerian(): Add a body to the system using classical Keplerian
orbital elements (semi-major axis, eccentricity, inclination, longitude of
ascending node, argument of periapsis, true anomaly) instead of raw Cartesian
state vectors. The elements are converted to position and velocity relative to
a specified parent body.
add_planet(): Add a known solar system body by name with real orbital
data looked up automatically. Just specify the name and parent — mass,
semi-major axis, eccentricity, inclination, and orientation are filled in
from JPL DE440 values. Any element can be overridden for "what if" scenarios
(e.g., add_planet("Mars", parent = "Sun", e = 0) for a circular Mars).
load_solar_system(): One-liner that builds a complete solar system — the
Sun, all eight planets, the Moon, and optionally Pluto — using real orbital
data from the JPL DE440 ephemeris. Returns a ready-to-simulate orbit_system.
Use moon = FALSE or pluto = FALSE to exclude those bodies.
three_d parameter on plot_orbits(), plot_system(), and
animate_system() now supports FALSE to force 2D output even when the
data has Z-axis motion. Previously, three_d = FALSE was the default but
could not override the auto-detection.
Fixed frozen 3D animations in animate_system_3d() caused by
redraw = FALSE in plotly animation options.
Initial release.
create_system() / add_body() / simulate_system() pipe-friendly API.shift_reference_frame() to re-center simulations on any body.plot_orbits() / plot_orbits_3d() for quick trajectory plots (ggplot2 2D, plotly 3D).plot_system() / plot_system_3d() for single-time-step snapshots.animate_system() / animate_system_3d() for animated orbits via gganimate or plotly.gravitational_constant for scaling gravity in create_system().seconds_per_hour, seconds_per_day, seconds_per_year time helpers.Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.