orbital-engine
    Preparing search index...

    Interface BeltRegion

    A population spread across a region rather than one tracked body: a belt round a star (the asteroid belt, the Kuiper belt), a shell (the Oort cloud), or local clusters (a Lagrange point's asteroids). These are objects in their own right — selectable and framed as belts. A planet's own ring system is not a belt: it's part of the planet (see CelestialBody.rings).

    interface BeltRegion {
        id: string;
        name: string;
        type: "belt" | "cloud";
        shape?: BeltShape;
        parentId: string;
        innerRadiusKm: number;
        outerRadiusKm: number;
        inclinationSpreadDeg: number;
        particleCount: number;
        realPositions?: FixedPosition[];
        gaps?: { name?: string; innerRadiusKm: number; outerRadiusKm: number }[];
        sites?: BeltSite[];
        coOrbital?: {
            bodyId: string;
            leadAngleDeg: number;
            angularSpreadDeg: number;
        };
        color?: string;
        note?: string;
        wikiSummary?: string;
        wikiUrl?: string;
    }
    Index
    id: string
    name: string
    type: "belt" | "cloud"
    shape?: BeltShape

    The population's shape (see BeltShape). Defaults from type: 'belt' → 'ring', 'cloud' → 'shell'. Set 'cluster' for a population that isn't spread round the whole circle.

    parentId: string

    id of the body this surrounds or clusters round — usually the star.

    innerRadiusKm: number
    outerRadiusKm: number
    inclinationSpreadDeg: number

    Degrees — the full angular THICKNESS of the population, centred on the reference plane: particles scatter up to half of this above it and half below (the asteroid belt's 20 is ±10°). For a 'shell', 180 is a complete sphere; anything less is a shell with its polar caps left empty. A few degrees for a thin ring, tens of degrees for the asteroid belt.

    particleCount: number

    How many particles to render. When realPositions is set, this is just its length (the real count); otherwise it's a rendering/ legibility choice, not a real population count (a real belt like the asteroid belt holds millions+ of objects, far more than would ever be rendered as individual points).

    realPositions?: FixedPosition[]

    Real individual positions (km, relative to parentId), when they're actually known — e.g. a game's asteroid fields, where the source data enumerates every real rock's exact position, unlike the Solar System's asteroid belt (millions of real objects, none individually catalogued here). When set, rendering uses these exact points instead of statistically scattering particleCount points across [innerRadiusKm, outerRadiusKm] — real data over an invented distribution, whenever real data actually exists.

    gaps?: { name?: string; innerRadiusKm: number; outerRadiusKm: number }[]

    Radius ranges the scattered population keeps clear of — e.g. the asteroid belt's Kirkwood gaps, cleared by resonance with Jupiter. Only affects the statistical scatter; ignored when realPositions is set.

    sites?: BeltSite[]

    Named sites inside this belt (see BeltSite), drawn as distinct markers among its population.

    coOrbital?: { bodyId: string; leadAngleDeg: number; angularSpreadDeg: number }

    When set, this population isn't spread uniformly around the full circle — it clusters in a libration zone leading or trailing a specific body's current orbital position by a fixed angle, and rotates together with that body over time. This is the real shape of Jupiter's Trojan asteroids: gravitationally locked to Jupiter's L4/L5 points (60° ahead of and behind it), not spread around the Sun the way the main asteroid belt is — a genuinely different population shape, not a rendering variation of the same one.

    Type Declaration

    • bodyId: string

      The body this population leads/trails — its current position (around parentId) sets the cluster's centre angle each moment.

    • leadAngleDeg: number

      +60° = L4 (leading), -60° = L5 (trailing)

    • angularSpreadDeg: number

      Degrees — how wide the population spreads around that leading/ trailing point (real libration zones are a complex "tadpole" shape; a simple angular band is a legibility simplification, same spirit as the radius-range/inclination-spread simplification everywhere else in this type).

    color?: string
    note?: string
    wikiSummary?: string

    See CelestialBody's own wikiSummary/wikiUrl — same meaning here.

    wikiUrl?: string