Je pense à faire un jeu d'atterrissage, où vous contrôlez un vaisseau spatial et devez l'atterrir sans s'écraser. Qu'est-ce qu'une formule simple pour calculer la vitesse de chute ou d'accélération par rapport au temps de travail des moteurs temps?
L'intégration la plus simple est l'intégration d'Euler. Vous devez stocker le vecteur de position et le vecteur de vitesse. À chaque image:
( x pour les scalaires, X pour les vecteurs)
assurez-vous que dt est petit ...
| G | est d'environ 9,8 m / s² pour la terre et d'environ 1,6 m / s² pour la lune
en général, la force d'actraction due à l'interaction gravitationnelle est:
Elle affecte chaque corps et pointe vers l'autre.
Le scalaire G est la très célèbre constante gravitationnelle, il est d'environ 6,67e-011 N (m / Kg) ²
Puisque vous êtes intéressé par l'accélération:
Il vous suffit de connaître la masse (m2) et le rayon (r) de la planète pour calculer votre accélération.
En règle générale, l'accélération qui déplace la planète vers votre vaisseau spatial est négligeable car généralement m1 est négligeable par rapport au m2.
Cependant, si vous essayez d'atterrir sur un petit astéroïde, vous devrez probablement utiliser la formule générale en ajoutant cette force au vecteur de force totale dans la deuxième étape.
ÉDITER:
Au besoin, un indice sur la mise en œuvre. Tu auras besoin de:
Tout d'abord la bibliothèque de vecteurs: votre jeu peut être mono / bi / arbre / quatre ... dimensionnel, dans la mesure où vous considérez votre cas comme une projection d'un mot 3D, les roules physiques tiennent.
Si n est la dimension que vous choisissez (probablement 2 ou 3 dans votre cas), la bibliothèque doit avoir:
Vous pouvez utiliser une bibliothèque qui le fait ou en implémenter une vous-même; un vecteur peut être une structure ou une classe, le choix vous appartient.
Chaque moteur doit être décrit par:
votre entrée utilisateur sera utilisée pour fournir à chaque moteur un nombre compris entre 0 (moteur inutilisé) et 1 (puissance maximale): le facteur (d'utilisation) du moteur.
Multipliez le facteur moteur pour son vecteur de poussée pour obtenir la vraie confiance du moteur et résumer tous les résultats de tous les moteurs disponibles; cela vous donnera le F de la deuxième étape.
Votre facteur moteur peut être utilisé pour connaître la consommation réelle de carburant pour chaque moteur: multipliez le facteur moteur par la consommation de carburant et par dt pour connaître la consommation instantanée de carburant; vous pouvez soustraire cette valeur de la variable de capacité totale de carburant (cela vous donne la possibilité de mettre à jour votre masse totale m si la masse de carburant est considérable).
Vous pouvez maintenant utiliser l'intégration pour calculer la nouvelle position, vérifier la collision avec la surface de votre planète; le cas échéant, utilisez la longueur du vecteur vitesse pour dire si l'atterrissage a été un succès ou une catastrophe.
Évidemment, d'autres vérifications de collision peuvent / devraient être effectuées, certaines entités de surface ne peuvent pas être autorisées comme point d'atterrissage, de sorte que chaque collision est fatale.
Je laisse comment obtenir des commentaires et comment vous rendre votre vaisseau spatial; vous pouvez utiliser le facteur moteur pour afficher l'état du moteur image par image, par exemple.
Comme l'autre excellente réponse semble un peu théorique, voici la version de code simple:
la source
Malheureusement, les mathématiques ici deviennent poilues. La réponse de FxIII est bonne pour le cas général d'un objet qui tombe, mais vous parlez d'une fusée - et les fusées brûlent du carburant.
J'ai vu du code qui le fait, mais il était complètement non documenté et je n'ai jamais réussi à comprendre les mathématiques derrière. À moins que vous ne soyez limité en CPU, je ne m'embêterais pas et je ne ferais que le forcer brutalement - l'approche FxIII est appliquée sur une échelle de temps assez courte et ajuste la poussée (ou la consommation de carburant si vous calculez que la fusée ralentit pendant que le carburant brûle pour se maintenir) l'accélération spécifiée plutôt que la poussée spécifiée) entre chaque itération lorsque la fusée brûle du carburant.
la source