src/data/moons.js
// ————————————————————————————————————————————————
// Major moon data.
//
// Keyed by parent planet id (lowercase English name from planets.js).
// Values are REAL:
// - radiusKm: mean radius
// - axesKm: optional triaxial semi-axes [a, b, c] for bodies far
// below hydrostatic equilibrium that are visibly
// non-spherical (Phobos, Deimos). a is the long axis;
// for tidally-locked moons it points at the parent.
// Geomean of the three matches radiusKm.
// - orbitKm: orbital semi-major axis around parent
// - orbitalPeriodDays: sidereal period. NEGATIVE = retrograde orbit
// (e.g. Triton orbits Neptune backwards).
// - color: stylized hex tint
//
// Each entry has:
// - id: stable lowercase identifier, unique within the moon set
// - names: localized display names. Keys match SUPPORTED_LANGS from
// src/i18n.js. When a moon has the same name in every language
// (e.g. Io, Titan), duplicate the value across language keys — the
// data stays self-describing with no implicit fallback.
//
// Views apply their own display scaling. At true scale most moons are
// invisible next to their planet — they're always visually inflated.
// ————————————————————————————————————————————————
export const MOONS = {
earth: [
{
id: 'moon',
names: { fr: 'Lune', en: 'Moon' },
color: 0xc8c8cc,
radiusKm: 1737.4,
orbitKm: 384400,
orbitalPeriodDays: 27.32,
},
],
mars: [
{
id: 'phobos',
names: { fr: 'Phobos', en: 'Phobos' },
color: 0x887766,
radiusKm: 11.27,
axesKm: [13.4, 11.2, 9.2],
orbitKm: 9376,
orbitalPeriodDays: 0.3189,
},
{
id: 'deimos',
names: { fr: 'Déimos', en: 'Deimos' },
color: 0x776655,
radiusKm: 6.2,
axesKm: [7.5, 6.1, 5.2],
orbitKm: 23463,
orbitalPeriodDays: 1.263,
},
],
jupiter: [
// The four Galilean moons — discovered by Galileo in 1610.
{
id: 'io',
names: { fr: 'Io', en: 'Io' },
color: 0xeecc66,
radiusKm: 1821.6,
orbitKm: 421800,
orbitalPeriodDays: 1.769,
},
{
id: 'europa',
names: { fr: 'Europe', en: 'Europa' },
color: 0xddd5c0,
radiusKm: 1560.8,
orbitKm: 671100,
orbitalPeriodDays: 3.551,
},
{
id: 'ganymede',
names: { fr: 'Ganymède', en: 'Ganymede' },
color: 0x998877,
radiusKm: 2634.1,
orbitKm: 1070400,
orbitalPeriodDays: 7.155,
},
{
id: 'callisto',
names: { fr: 'Callisto', en: 'Callisto' },
color: 0x6a5a48,
radiusKm: 2410.3,
orbitKm: 1882700,
orbitalPeriodDays: 16.69,
},
],
saturn: [
{
id: 'enceladus',
names: { fr: 'Encelade', en: 'Enceladus' },
color: 0xecedf2,
radiusKm: 252.1,
orbitKm: 238000,
orbitalPeriodDays: 1.37,
},
{
id: 'rhea',
names: { fr: 'Rhéa', en: 'Rhea' },
color: 0xccbbaa,
radiusKm: 764.5,
orbitKm: 527108,
orbitalPeriodDays: 4.518,
},
{
id: 'titan',
names: { fr: 'Titan', en: 'Titan' },
color: 0xd9a659,
radiusKm: 2574.7,
orbitKm: 1221870,
orbitalPeriodDays: 15.945,
},
{
id: 'iapetus',
names: { fr: 'Japet', en: 'Iapetus' },
color: 0x8a7a66,
radiusKm: 734.5,
orbitKm: 3560820,
orbitalPeriodDays: 79.322,
},
],
uranus: [
{
id: 'miranda',
names: { fr: 'Miranda', en: 'Miranda' },
color: 0xb0bcc0,
radiusKm: 235.8,
orbitKm: 129390,
orbitalPeriodDays: 1.413,
},
{
id: 'titania',
names: { fr: 'Titania', en: 'Titania' },
color: 0xa8b6ba,
radiusKm: 788.4,
orbitKm: 436300,
orbitalPeriodDays: 8.706,
},
{
id: 'oberon',
names: { fr: 'Obéron', en: 'Oberon' },
color: 0x98a8ac,
radiusKm: 761.4,
orbitKm: 583519,
orbitalPeriodDays: 13.463,
},
],
neptune: [
// Triton orbits retrograde — likely a captured Kuiper Belt object.
{
id: 'triton',
names: { fr: 'Triton', en: 'Triton' },
color: 0xd8c8c0,
radiusKm: 1353.4,
orbitKm: 354760,
orbitalPeriodDays: -5.877,
},
],
};
← Astrarium