Skip to content

astro.Function.ringDynamics

github-actions[bot] edited this page Aug 28, 2026 · 1 revision

@elite-dangerous-almanac/core / astro / ringDynamics

Function: ringDynamics()

ringDynamics(ring, primary): RingDynamics | null

Defined in: src/astro/body-rings.ts:236

The period a ring turns in and the speed of each of its edges.

Parameters

ring

BodyRing

The ring. Needs InnerRad and OuterRad, in metres.

primary

BodyProperties

The body the ring goes round. Needs a mass — see bodyMass in ./body-physics.

Returns

RingDynamics | null

The period in seconds, the nominal radius in metres and both edge speeds in m/s, or null when a radius or the primary's mass is missing, or the outer radius does not exceed the inner one.

Remarks

The game turns a ring as one rigid sheet. A real ring shears — every particle on its own Kepler orbit, the inner edge fastest. Elite Dangerous gives the whole ring a single period instead, so the outer edge is the fast one, which is the opposite of the physical answer and the reason this cannot be computed edge by edge.

That single period is recovered by applying Kepler's third law at a nominal radius some way across the ring:

nominal = inner + (outer − inner) × 3/8
T = 2π √(nominal³ / GM)

The 3/8 is a fitted constant, not a derivation — the Canonn Research Group arrived at it from in-game measurements, having also weighed 1/e (≈ 0.368) and 1/φ² (≈ 0.382), which it sits between. Two things bound how exact the result can be: the journal writes ring radii to four significant figures, and the fit is still being refined against new observations. Treat the figures as close, not exact.

Throws

If either argument is not an object.

Example

import { ringDynamics } from '@elite-dangerous-almanac/core/astro/body-rings';

const ring = { Name: 'A Ring', RingClass: 'eRingClass_Icy', MassMT: 1e13, InnerRad: 1e8, OuterRad: 2e8 };
const dynamics = ringDynamics(ring, { MassEM: 300 });

dynamics?.orbitalPeriod; // -> 29296.1…

// The outer edge outruns the inner one: rigid rotation, not Keplerian shear.
(dynamics?.outerVelocity ?? 0) > (dynamics?.innerVelocity ?? 0); // -> true

API

Guides
astro
Classes (1)
ProceduralSystem

Properties

Accessors

Methods

Interfaces (28)
Type Aliases (6)
Variables (22)
Functions (57)
Subpath modules (3)
commodities
Interfaces (1)
Type Aliases (1)
Variables (3)
Functions (3)
equipment
Interfaces (6)
Type Aliases (8)
Variables (3)
Functions (10)
Subpath modules (2)
i18n
Interfaces (1)
Type Aliases (1)
Functions (17)
materials
Enumerations (2)
Interfaces (2)
Type Aliases (2)
Variables (9)
Functions (9)
ships
Classes (3)
BuildMetrics

Methods

LoadoutEditError

Constructors

Properties

Methods

ShipLoadout

Accessors

Methods

Interfaces (125)
Type Aliases (44)
Variables (10)
Functions (85)
Subpath modules (8)

Clone this wiki locally