DotNet.Astronomy.Class.BodyRings - Elite-Dangerous-Almanac/Almanac-Core GitHub Wiki

EliteDangerousAlmanac / Astronomy / BodyRings

Class: BodyRings

Defined in: dotnet/src/EliteDangerousAlmanac/Astronomy/BodyRings.cs:33

What a ring is made of, how thick it lies, and how fast it turns.

Remarks

Every calculation reads the figures the scan states, and answers null where the ring states none it can use.

The maths is ported from the Canonn Research Group's canonn-signals, whose ring model is their own observational research. See ATTRIBUTIONS.md for credit and licence terms.

Fields

NominalRadiusFraction

const NominalRadiusFraction: double = 3d / 8d

Defined in: dotnet/src/EliteDangerousAlmanac/Astronomy/BodyRings.cs:37

Where along a ring its period is taken, as a fraction of its width.

Remarks

See Dynamics for where the figure comes from.

VisibleRingMaxWidth

const VisibleRingMaxWidth: double = 1e9

Defined in: dotnet/src/EliteDangerousAlmanac/Astronomy/BodyRings.cs:45

The width below which the game draws a ring whatever its density, in metres.

Remarks

See IsInvisible for where the figure comes from.

VisibleRingMinSurfaceDensity

const VisibleRingMinSurfaceDensity: double = 0.1

Defined in: dotnet/src/EliteDangerousAlmanac/Astronomy/BodyRings.cs:41

The surface density at or above which the game draws a ring, in tonnes a square kilometre.

Remarks

See IsInvisible for where the figure comes from.

Methods

Dynamics()

static Dynamics(ring, primary): RingDynamics?

Defined in: dotnet/src/EliteDangerousAlmanac/Astronomy/BodyRings.cs:144

How fast one ring travels around what it orbits.

Parameters

ring

BodyRing

The ring, as a scan states it.

primary

BodyProperties

The body the ring is around, as a scan states it.

Returns

RingDynamics?

The figures, or null where the ring states no usable radii or the primary states no mass.

Remarks

The game turns a ring as one rigid sheet. A real ring shears, because every particle keeps its own orbit and the inner edge is the fastest. Elite Dangerous gives the whole ring one period instead, which makes the outer edge the fast one. That is the opposite of the physical answer, and the reason the speeds cannot be computed edge by edge.

The one period is recovered by applying Kepler's third law at a nominal radius some way across the ring: nominal = inner + (outer - inner) * 3/8, then T = 2*pi*sqrt(nominal^3 / GM). The three eighths is a fitted constant, not a derivation. The Canonn Research Group arrived at it from in-game measurements, having also weighed 1/e (about 0.368) and 1/phi^2 (about 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 constant is a fit to observations rather than an exact value. Read the figures as close, not exact.

Exceptions

ArgumentNullException

Either the ring or the primary is absent.

IsInvisible()

static IsInvisible(ring): bool

Defined in: dotnet/src/EliteDangerousAlmanac/Astronomy/BodyRings.cs:105

Whether a ring is spread too thin over too wide a span to be seen.

Parameters

ring

BodyRing

The ring, as a scan states it.

Returns

bool

true where the ring is both wide and thin. A ring stating too little to judge is not called invisible.

Remarks

A ring both very wide and very diffuse has nothing to catch the light, and the game draws nothing where the scan states a ring. The test is the Canonn Research Group's own observational finding, not a rule read out of the game: wider than VisibleRingMaxWidth and thinner than VisibleRingMinSurfaceDensity. Either one alone still draws.

Exceptions

ArgumentNullException

The ring is absent.

ParticleDensity()

static ParticleDensity(ringClass): double

Defined in: dotnet/src/EliteDangerousAlmanac/Astronomy/BodyRings.cs:55

How dense one ring's particles are, in kilograms a cubic metre.

Parameters

ringClass

string

The ring's class, such as eRingClass_MetalRich.

Returns

double

The density the class implies. A class naming no rock or metal is ice.

Exceptions

ArgumentNullException

The class is absent.

RocheLimits()

static RocheLimits(ring, primary): RocheLimits?

Defined in: dotnet/src/EliteDangerousAlmanac/Astronomy/BodyRings.cs:183

Where the body a ring is around pulls that ring's particles apart.

Parameters

ring

BodyRing

The ring, as a scan states it.

primary

BodyProperties

The body the ring is around, as a scan states it.

Returns

RocheLimits?

The two limits, or null where the primary states too little.

Remarks

A ring sits inside the fluid limit, which is why it stays a ring rather than gathering into a moon.

Exceptions

ArgumentNullException

Either the ring or the primary is absent.

SurfaceDensity()

static SurfaceDensity(ring): double?

Defined in: dotnet/src/EliteDangerousAlmanac/Astronomy/BodyRings.cs:71

How much mass one ring carries over its area, in tonnes a square kilometre.

Parameters

ring

BodyRing

The ring, as a scan states it.

Returns

double?

The surface density, or null where the ring states no usable mass or radii.

Exceptions

ArgumentNullException

The ring is absent.

⚠️ **GitHub.com Fallback** ⚠️