Je développe un jeu basé sur la physique avec des vaisseaux spatiaux.
Un vaisseau spatial est construit à partir de cercles reliés par des articulations. Certains cercles ont des moteurs attachés.
Les moteurs peuvent tourner autour du centre du cercle et créer une poussée. Je veux pouvoir déplacer le navire dans une direction ou tourner autour d'un point en définissant la rotation et la poussée pour chacun des moteurs du navire.
Comment puis-je trouver la rotation et la poussée nécessaires pour chaque moteur pour y parvenir?
Réponses:
Imaginons la situation simple d'un navire avec un seul moteur. Afin de déplacer le navire, nous pointons simplement le propulseur loin de la direction dans laquelle nous voulons aller, et nous le poussons. Cela nous pousse dans la direction que nous voulons prendre. Il n'est pas possible de faire tourner un navire composé d'un seul propulseur.
Permet de dimensionner notre navire à trois moteurs pour le rendre plus intéressant:
Si nous voulions déplacer ce vaisseau quelque part vers le haut et vers la gauche, nous pointerions simplement tous nos propulseurs dans la direction opposée et tirer:
Même solution que le propulseur simple qui prend en charge le mouvement linéaire.
Mais qu'en est-il si nous manquons un propulseur? Nous avons une charge inégale?
Suivre la même stratégie entraînera la rotation du navire. Dans de nombreuses situations, cela sera principalement inévitable, et dans certains cas préférable car il orientera le navire pour une meilleure utilisation des propulseurs disponibles.
Une stratégie d'atténuation serait la péréquation. Divisez le navire sur l'axe du mouvement souhaité:
Assurez-vous ensuite que le côté droit et le côté gauche sont égaux. S'ils ne mettent pas à l'échelle la sortie du propulseur jusqu'à ce qu'ils le fassent. Cela peut facilement entraîner aucune poussée appliquée. C'est à vous de décider si vous voulez au lieu de cela lancer la rotation ou forcer le joueur à repenser son vaisseau en réorganisant ses propulseurs.
Et la rotation?
Cette question décrit très bien l'idée.
Vous devrez calculer le centre de masse . Calculez ensuite le couple fourni par chaque propulseur. Heureusement pour vous, vos propulseurs tournent, vous pouvez donc les faire tourner pour fournir un couple maximal. Le couple maximal proviendra d'un angle droit au bras de moment. L'application de la somme des couples fera tourner le corps autour du centre de masse. Vous pouvez également choisir un autre point de rotation arbitraire comme le pont du navire.
Si vous voulez vous assurer que vous tournez en place, vous pouvez réduire la poussée des propulseurs qui entraînera le déplacement linéaire de votre navire. Vous pouvez le faire en additionnant tous les propulseurs qui ont un couple positif et tous ceux qui ont un couple négatif, puis comparez leurs valeurs absolues. Le groupe avec la plus grande valeur absolue doit être réduit pour correspondre à la valeur absolue de l'autre groupe.
Vous pouvez également trouver une ressource très utile dans Amit Patel .
Il a fait une série de 4 parties sur les vaisseaux spatiaux configurables ici: partie 1 , partie 2 , partie 3 , partie 4
la source
Je suis résolu cela avec la recherche locale. Cela fonctionne, mais les performances sont presque mauvaises. Peut-être vaut-il mieux utiliser la mécanique théorique mais je ne le sais pas.
la source