Question

Ce que je suis en train de faire est de simuler le mouvement de projectile dans Visual Basic en utilisant Visual Studio. Essentiellement, quelque chose comme cette mais sans résistance à l'air ou de masse.

Quoi qu'il en soit, comme je le fais utilise un PictureBox et en tirant l'image (de, disons, un cercle) si souvent avec tous une minuterie d'intervalle 1 avec ses propriétés x et y étant des variables calculées par les formules .

Je veux savoir ce que je peux utiliser des formules pour attribuer à x et y pour que je sois un mouvement comme celui sur l'exemple. J'ai essayé un tas de choses, avec l'aide de wikipedia et d'autres sites, mais ne peut pas sembler le retirer. Merci!

Était-ce utile?

La solution

Supposons une vitesse de lancement de V, angle de lancer une radians, g par gravité, le temps t:

  

= V x * cos (a) * t + g * t * t / 2
  y = V * sin (a) t * - g * t * t / 2

Informations générales est ici.

Autres conseils

Voici l'exemple le plus simple pour réduire au minimum absolu cycles d'horloge précieux:

// Initialization
x = 0; // x position
y = 0; // y position
xi = 0.1; // x incremental value (velocity)
yi = 0.1; // y incremental value (velocity)

// Rendering loop
x += xi;
y += yi;
yi -= 0.01; // decrement by arbitrary value to simulate gravity

L'idée est d'utiliser des variables supplémentaires xi et yi et exécuter toutes vos forces sur eux. Vous pouvez modifier les chiffres pour obtenir l'effet que vous recherchez. Si vous voulez prendre un peu plus loin, vous pouvez facilement appliquer le frottement ou la résistance à l'air en utilisant des multiplicateurs pour ajuster les variables supplémentaires à chaque itération.

Ceci est la méthode de base que je l'ai utilisé plusieurs fois dans les moteurs de particules et autres. Puisque vous n'êtes pas faire des appels à l'une des fonctions trigonométriques, il a l'avantage d'être extrêmement rapide et il adapte bien aux moteurs de particules.

Mise à jour:

Il y a un exemple de cette méthode en utilisant des nombres de la formule de la gravité de la terre ici: http: // www .forums.evilmana.com / jeu-programmation théorie / euler-vs-Verlet-vs-RK4-physique / WAP2

Il est encore un code simple, même avec la valeur et -9,8 variable timestep. Mon code est optimisé juste à l'absolu le plus simple possible.

Set X = le temps total depuis la cuisson

Y = -0,5 * A * X * X * X + V + InitialHeight

A = l'accélération souhaitée. l'accélération de la Terre (à savoir de la gravité) est ca. 9,8 mètres / seconde au carré.

V = votre vitesse initiale dans la direction vers le haut

InitialHeight est égal à zéro dans votre exemple, mais vous pouvez commencer plus si vous voulez.

EDIT:

Un autre états post

  

= V x * cos (a) * t + g * t * t / 2

     

y = sin V * (a) * t - g * t * t / 2

Ceci est essentiellement la même formule, mais laisse le paramètre optionnel + InitialHeight.

Ma déclaration "vitesse dans la direction vers le haut" est le même que V (vitesse totale) * sin (a) dans sa formule.

J'ASSIMILEE X à t (temps) pour la simplicité, mais x = V * cos (a) vous permet de mapper un temps à une distance physique. Dans ma simplification, je suppose que vous ne se soucient pas vraiment exactement ce que les unités sont sur l'axe X (qui peut ou peut ne pas être une hypothèse valable).

Vous pouvez regarder le code source QuickBasic pour le " gorilles » premier jeu inclus avec MS-DOS 5. Il a tenu compte de la gravité animer le mouvement d'une banane jetée dans la façon dont vous décrivez exactement.

Pour autant que je sais que la partie mathématique de la langue de base n'a pas changé depuis ces jours.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top