CelestiaProject / Celestia

Real-time 3D visualization of space.
https://celestiaproject.space
GNU General Public License v2.0
1.77k stars 303 forks source link

Orbital precession #760

Open SevenSpheres opened 4 years ago

SevenSpheres commented 4 years ago

Would be good to be able to specify orbital precession in ssc files. It would probably use a PrecessingOrbit block, similar to PrecessingRotation.

SevenSpheres commented 4 years ago

From @pedro-fixingstuff on Discord:

how I imagine it would work

PrecessingOrbit
{
    Epoch
    SemiMajorAxis
    Period
    Eccentricity
    Inclination
    AscendingNode
    ArgOfPericenter
    MeanAnomaly
    NodePeriod
    PericenterPeriod
}
SevenSpheres commented 3 years ago

From TTarrants on Discord, posting here because it's related

Remember when we talked about the possibility of Celestia displaying precessing orbits?

PrecessingOrbit
{
   Epoch _float_
   Period _float_
   PrecessionAxisInclination _float_
   PrecessionAxisNode _float_
   MeanAnomaly _float_
}

^ Or something to that effect. It might also be interesting to have a block for decaying orbits.

DecayingOrbit
{
   Epoch _float_ # Epoch of semi-major axis.
   DecayRate _float_ # dP/dt in seconds per year at epoch.
   DecayRateChange _float_ # d^2P/dt^2 in seconds per year.
}

(of course negative decay rate values could produce expanding orbits) The WASP-12b paper got me thinking about this because eventually because the orbital period is evolving, there is going to be a mismatch between literature transit times and transit times as they are observed in Celestia. Granted, I haven't done the base amount of effort to determine how big an issue this is going to be over our lifetimes. Probably not much I suspect.

Another concern would be a need to modify the orbital period in some way. Perhaps that could be done automatically. The period at some time t _0 will be a certain ratio of what it was at t _1 regardless of what the user provides as the stated orbital period in EllipticalOrbit.

... or maybe DecayingPeriod might be what we should define since that is usually the observed parameter.

SevenSpheres commented 3 years ago

From pedro again:

From the suggestions thrown here and on other channels about modelling orbital precession and evolution, I came up with the idea to add a one-size-fits-all DynamicOrbit block, which I think could look like this:

DynamicOrbit
{
    Epoch
    Period
    SemiMajorAxis
    Eccentricity
    Inclination
    AscendingNode
    ArgOfPericenter
    MeanAnomaly
    NodePeriod
    ApsisPeriod
    PeriodChange or SemiAxisChange
    LowerClamp
    UpperClamp
}

Most of the names should be self-explanatory, but I imagine the LowerClamp and UpperClamp as ways to limit the changes in semi-major axis/period to a certain range of values or a period of time.