Themorgoth
Messages postés2Date d'inscriptionlundi 25 août 2008StatutMembreDernière intervention 1 septembre 2008
-
1 sept. 2008 à 13:38
cs_kaboum
Messages postés31Date d'inscriptionjeudi 2 janvier 2003StatutMembreDernière intervention 8 juillet 2010
-
18 sept. 2009 à 16:19
Bien le bonjour
Dans le cadre d'une étude sur la programmation en C# je dois réaliser un logiciel représentant un tir balistique.
Ce dernier se passe dans un plan à 2 dimension (axe X et Y) et le frotement de l'air est à négliger. Suite à quelques recherches il s'est avéré que l'utilisation de la cinématique (physique) était nécessaire. Cependant, le nombre de formules indigestes et autres documents trouvé dans des livres de math ou sur le net font que je bloque complètement sur cette partie "math" du programme . J'ai plus que de la peine à comprendre tout ça de façon autodidacte.
Je recherche donc toute aide disponible. Site internet (des bon hein ^^), qqn conaissant bien le sujet, livre, bref... nimporte quoi qui me permettrait de saisir un peu mieux tout ça.
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 1 sept. 2008 à 14:04
Il y a mille et une manières de procéder, mais dis en un peu plus sur ton problème :
Tu connais l'angle et l'impulsion et tu dois trouver la trajectoire ? Le point d'impact ?
Ou bien on te demande l'angle pour arriver au point d'impact donné ?
Sinon le plus simple à mon goût n'est pas d'utiliser de la cinématique physique, mais plutôt de la géométrie, tu sais que ton tir va faire une parabole de type -ax^2 + bx + c = 0.
Les correspondances sont faciles :
Racines : Point de tir et point d'impact
Tangeante au point de tir : Angle de tir
On sait aussi que le maximum est au milieu des deux racines et que son ordonnée sera lorsque toute l'énergie cinétique verticale sera transformée en énergie potentielle gravifique, i.e. : mgh = 1/2m(v0)^2 * sin(alpha)
etc...
Avec ce genre de raisonnement, on trouve vite toutes les inconnues quel que soit le problème demandé...
Themorgoth
Messages postés2Date d'inscriptionlundi 25 août 2008StatutMembreDernière intervention 1 septembre 2008 1 sept. 2008 à 16:27
Salut,
Tout dabord merci pour ta réponse.
Ensuite, l'angle en (degré) et la vitesse en (m/s) sont entrés par l'utilisateur, il me faut donc juste simuler ce tir "graphiquement" en déssinant un point rouge à chaque nouveaux points calculés.
Mais, c'est une méthode interressante, j'avais pas envisagé ça sous cet angle. Mais dans les contraintes on est obligé d'utiliser une méthode physique -_-'
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 1 sept. 2008 à 19:49
Ah oui,
Alors tu pourrais peut-être procéder par intégration sur des pas de temps ?
Désignons la dérivée par rapport au temps par '.
Si la position (vecteur) est x, nous avons
La vitesse = x'
L'accélération = x''
Nommons x0, v0, a0 la position, la vitesse et l'accélération à l'instant précédent, et x1, v1, a1, la position, la vitesse et l'accélération à ce moment.
La seule force agissant sur le projectile est la gravité : mg. Par Newton, on sait que F ma, nous avons donc mg ma, et donc a = g.
L'accélération est donc constante...
On commence à t = 0, on trouve facilement
x0 = point de départ
v0 = (vitesse de départ * cos alpha) selon x et (vitesse de départ * sin alpha) selon y
a0 = g...
Ensuite on va avancer par des pas des temps dt avec une boucle du style
double dt = 0.0001; //Plus le pas de temps est petit, meilleure est l'intégration
double tfin = 20; //Durée de la simulation
for (double t = 0; t < tfin; t += dt)
{
//Calcul de x1, v1
Le calcul de x1, v1 se fait par intégration, en supposant la vitesse constante dans l'interval de temps dt considéré.
Théoriquement, nous avons :
v(t) x'(t) lim (dt -> 0) (x(t+dt) - x(t)) /dt //Définition de la dérivée
Ici on prends dt très petit, sans qu'il tende réellement vers 0, c'est une légère approximation. Ce qui donne
dt * v = x1 - x0
Donc x1 = x0 + dt * v, où v est la vitesse moyenne dans l'interval de temps
Tout à fait similairement pour v, on a
v1 v0 + dt * a0 v0 + dt * g
Donc au final on a :
double dt = 0.0001; //Plus le pas de temps est petit, meilleure est l'intégration
double tfin = 20; //Durée de la simulation
for (double t = 0; t < tfin; t += dt)
{
//Calcul de x1, v1
v1 = v0 + dt * g;
x1 = x0 + dt * (v1 + v0) / 2
//A chaque pas d'itérations, afficher ici le point x0 comme point de trajectoire
// du projectile en t
Bien sûr tout ceci est en notation vectorielle, je te conseille de faire une petite structure Vector avec deux champs x et y ainsi que les opérations nécessaires...
<hr width="100%" size="2" />
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_kaboum
Messages postés31Date d'inscriptionjeudi 2 janvier 2003StatutMembreDernière intervention 8 juillet 2010 18 sept. 2009 à 16:19
bonjour
je me demande pourquoi tu definis le temps de l'animation (du calcul)
alors qu'en faite il est forcement variable dans ce cas la ?
la fin du calcul n'est elle pas plutot quand le parametre du vecteur representant
l'altitude de son objet touche ce qu il definit comme le sol ? si y <=0 ?