Astronomie

Comment puis-je interpoler 2 orbites

Comment puis-je interpoler 2 orbites


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

sy SA gu Hf ID Xw we ny RS ZD Ml BY wh JC zR Gi zk SY DL

Ma question est très similaire à celle-ci bien que la réponse ne soit pas celle que je cherchais. Fondamentalement, je travaille dans un jeu spatial (KSP) et je le rends multijoueur. Les clients envoient un paquet avec leurs paramètres orbitaux à un intervalle (30 millisecondes par défaut) mais entre ces paquets, je veux interpoler et tracer une orbite entre ces 2 paquets.

Pour les vecteurs normaux ou la vitesse, j'utilise l'interpolation linéaire :

private static float Lerp(float v0, float v1, float t) { return (1 - t) * v0 + t * v1; }

Mais ça ne marche pas bien quand je travaille avec des orbites

var inclination = Lerp(inclinaison, Target.inclination, lerpPercentage), var excentricity = Lerp(excentricity, Target.excentricity, lerpPercentage), var semiMajorAxis = Lerp(semiMajorAxis, Target.semiMajorAxis, lerpPercentage), var LAN = Lerp(LAN, Target .LAN, lerpPercentage), var argumentOfPeriapsis = Lerp(argumentOfPeriapsis, Target.argumentOfPeriapsis, lerpPercentage), var MeanAnomalyAtEpoch = Lerp(meanAnomalyAtEpoch, Target.meanAnomalyAtEpoch, lerpPercentage), varepage epoch, = Lerpoch

Quelle fonction puis-je utiliser pour les interpoler ?


Plusieurs options sont possibles :

N'interpolez pas du tout. Supposons simplement que la planète reste fixe jusqu'à la prochaine mise à jour. La planète Terre se déplace de 10^{-7}$ degrés en 30 millisecondes. Dans l'immensité de l'espace, c'est une erreur d'arrondi.

Étant donné deux objets, leur position, leur vitesse et leur accélération, et les valeurs de leurs éléments képlériens aux instants t0 et t1, vous souhaitez estimer leur position, leur vitesse et leur accélération à tout moment intermédiaire.

Vous pouvez utiliser une simple interpolation linéaire de leur position. Cela a l'avantage d'être très rapide, mais cela suppose une vitesse constante. Sur de courtes périodes, c'est une hypothèse raisonnable. Pour la plupart des corps en orbite, cette approximation devrait être suffisamment précise pour des différences de temps de plusieurs minutes, car les changements de vitesse sont relativement faibles.

Vous pouvez supposer une accélération constante et interpoler à l'aide de l'équation SUVAT. Cela fonctionne très bien si les objets ne se déplacent pas trop loin. Par exemple, il peut très bien modéliser le vol d'une balle dans le champ gravitationnel de la Terre, donnant une forme parabolique. Cela devrait donner une assez bonne approximation de la position sur des heures, voire des jours.

Vous pouvez interpoler les éléments orbitaux de manière linéaire et résoudre l'équation de Kepler pour obtenir la position du corps à un moment donné. Pour la plupart des corps, les éléments orbitaux ne changent que lentement avec le temps (à l'exception de l'anomalie). C'est-à-dire que la forme de l'orbite reste à peu près la même, seule la position sur l'orbite change. L'approximation de l'orbite d'une planète par interpolation de ses éléments devrait donner une bonne approximation pour plusieurs centaines d'années de temps orbital. Cependant, le processus de résolution de l'équation est lent.

Enfin, vous pouvez intégrer numériquement le problème à n corps pour le système solaire. Selon le pas de temps que vous choisissez, cela peut être précis pour une durée indéterminée

Ceux-ci peuvent donc se résumer ainsi :

  1. Position constante
  2. Vitesse constante
  3. Accélération constante
  4. Accélération variable suivant une loi du carré inverse.
  5. Champ gravitationnel à n corps à accélération variable.

Pour un moteur de jeu, la vitesse est bonne. Si les intervalles de temps sont de l'ordre de quelques millisecondes (en temps réel), alors simplement ne pas interpoler devrait être indétectable.