Give Haumea's card its three semi-axes beside its mean radius

Haumea is triaxial, 1161 x 852 x 513 km (Ortiz et al. 2017, Nature 550, 219), and is drawn as the
sphere of its volume, 797.6 km. Its card listed "Radius 798 km" under Measured and said nothing of
its shape, which only a code comment and a commit message gave: its long semi-axis is 1.46 times
that radius and its short one 0.64.

BodyRecord takes semiAxesKm, set by the ETL from Haumea's spec, and the card then reads "Mean
radius 798 km" and "Semi-axes 1,161 x 852 x 513 km". Every other body keeps its one Radius row. The
ETL checks that a body's radius is the mean of its semi-axes, the radius of the sphere of the same
volume, to 0.1 per cent (797.6 against 797.62).

Measured on :4301, Haumea's page: "Mean radius 798 km, Semi-axes 1,161 x 852 x 513 km". Test: the
card of Haumea as shipped in bodies.json. Guarded mutants: the semi-axes dropped from the spec (run
through the solar ETL), the row, or the view model, or the label left as Radius, each fail it and
only it; a radius that is not their mean fails the ETL ("Haumea's radius, 1161 km, is not the mean
of its semi-axes").

Horizons gives triaxial radii for Phobos, Deimos, Miranda and Ariel too, which the page parser
already reads into their mean; they are not carried here.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-09-30 16:12:30 +02:00
co-authored by Claude Opus 5.5
parent fc7677e715
commit dadae7b8ca
8 changed files with 48 additions and 2 deletions
+7
View File
@@ -50,7 +50,14 @@ export interface BodyRecord {
systemStarId: number;
name: string;
kind: 'planet' | 'moon' | 'dwarf';
/** Mean radius: for a triaxial body, the radius of the sphere of its volume, which is how it is drawn. */
radiusKm: number;
/**
* A triaxial body's three semi-axes, in km, largest first, where its shape is too far from a
* sphere for one radius to say it: Haumea's 1161 x 852 x 513 (Ortiz et al. 2017), whose mean
* radius is 798.
*/
semiAxesKm?: readonly [number, number, number];
/** Mean elements at `orbit.epochJd`, moving at `rates`. */
orbit: OrbitalElements;
rates: MeanElementRates;