recherche algo balistique (bonus : jeux inside ! ) - C++ - Programmation
Marsh Posté le 05-01-2003 à 04:39:34
Il faut resoudre l'equation différentiel du mouvement et ensuite tu implemente ca dans le langage que tu veux.
En gros tu resous
F1+F2+...+Fi = m.a = m.dV/dT = m.d²OM/dT²
[F1..Fi] etant l'expresion vectoriel des forces que subissent ton objet plus ya de force que tu prendra en compte plus la solution sera complexe.
m c la masse
V la vitesse
OM ton vecteur position cad le resultat que tu cherche
T le temps
Pour un truc simple tu peux prendre en compte comme force la pasenteur et la resistance de l'aire ca te donne une equation du type:
g - k.V/m = d²V/dT²
<=>
k.V/m + d²V/dT² = -g
ou k est le coeficient de frotement.
c une equation différentielle du second ordre avec second membre ya plus qu'à resoudre et t'aura t'as fonction de OM(T) cad f(t)->(x,y,z)
Marsh Posté le 05-01-2003 à 10:51:59
Pour le vent en fonction de la vitesse (en fait du nombre de Reynolds) ça sera une force en V ou en V²
Marsh Posté le 05-01-2003 à 14:03:07
houla....
je capte rien a se que je vous me raconter...
comme je le disais plus haut, je suis pas trop calé en math. je ne sais meme pas se qu'est une equation differentielles... alors pour se qui est de la resoudre...
soit l'algo suivant qui fait a eu pres se que je veux:
Code :
|
jeux : lui rajouter la notion du vent
Marsh Posté le 05-01-2003 à 14:34:58
Faut voir si c'est réellement pertinent avec le modèle que tu utilises.
Déjà la vitesse initiale d'un obus c'est typiquement 500 m/s pour un obus de canon de 155mm et plus de 1000m/s pour un obus antichar de 120mm.
Alors un petit vent de 50km/h (=13.9m/s) va pas vraiment modifier grand chose.
Et si tu recherches la précision (disons 50m pour une cible à 20km), il faudra aussi tenir compte des caractéristiques (pression, température) des couches atmosphériques traversées car l'obus va monter assez haut.
Marsh Posté le 05-01-2003 à 14:44:21
je ne cherche pas vraiment une precision.
tout ca c'est pour un jeux.
tu connais le jeux worms ?
tu deplace un petit personnage, tu choisis une arme, tu lui donne un angle de tir, une force, et tu tire.
tout ca se passe en 2d.
il peut y avoir du vent, par exemple si tu tire a 45° aux bazooka et qu'il y a un fort vent contraire, il peut te revenir dessus.
bref..j'utilise l'algo si dessus, tout marche bien...mais y'a pas de vent.
moi je verrais bien le vent comme :
il n'agit que sur le position X (parallele au sol)
X=X+(timecode actuel-timecode de depart)*vent.
il serais donc exprimé en pixel par unité de timecode ?
mais je ne sais pas si c'est correct et comment l'ajouter dans l'algo
Marsh Posté le 06-01-2003 à 00:29:29
Citation : moi je verrais bien le vent comme : |
non ce n'est pas correct.
Dans ton equation, tu as simplement vitesse de ton objet = vent
ce qui est correct quand il n'est soumis a aucune autre force
or ton objet a une vitesse propre est soumis a la gravite et il avance contre ou dans le vent.
j'ecrirais quelque chose comme:
x = x + vx * dt;
y = y + vy * dt;
vx = vx + f * (vvx-vx) * dt;
vy = vy - (f * vy + g) * dt;
avec f la force du vent rapportee a la masse
de ton objet (un objet dans une matiere legere subira
fortement l'influence du vent, contrairement a un objet
dans une matiere lourde). Ca depend aussi de l'aerodynamisme
et de l'angle d'attaque de l'objet dans l'air (qui influera egalement sur son moment mais on laisse tomber ca pour l'instant)
g est la gravite, c'est une constante si tu parcours de petites distances et elle vaut 9.81 m/(s*s)
dt est le temps qui s'ecoule entre deux calculs successifs de position, plus il est petit plus le calcul est precis. Le probleme avec cette methode c'est que pour arriver a l'instant T, il faut calculer une floppee de positions successives avant ce point.
Si tu ne veux pas faire ca ET si la vitesse du vent est une constante. Tu as la formule qui te donne la position directement en fonction de la date et qui decoule directement de l'equation differentielle mais.. le resultat est particulierement lourd
et fait intervenir des exponentielles si tu te contentes d'une force du vent dependant lineairement de la vitesse..
Je posterais la formule si besoin est..
LeGreg
Marsh Posté le 07-01-2003 à 12:20:56
merci pour vos reponses,
Citation : non ce n'est pas correct. |
je me suis mal exprimé...dans mon equation...je supposais que X etait deja la position calculé pour le timecode actuel, je n'ai donc plus qu'a lui ajout l'action du vent. je vais donc reformuler :
X1= position X au timecode demandé sans l'action du vent
X2= position X au timecode demandé avec l'action du vent
Vent= exprimé en unité de distance/unité de timecode
sachant que X1 est calculé par l'algo plus haut, je pensais que :
X2=X1+(timecode actuel-timecode de depart)*vent
j'ai d'ailleur trouver ca sur le net :
Citation : To take into account wind drag, add to the horizontal distance moved a small extra distance term proportional to the wind speed at each time step. Not quite physically realistic, but good enough I expect. |
Marsh Posté le 07-01-2003 à 14:13:36
ReplyMarsh Posté le 07-01-2003 à 15:16:09
bon..j'ai mis une version windows pre-alpha de mon projets ici
http://c500.dyndns.org/test.zip (147ko)
les touches gauche et droite pour deplacer
les touches haut et bas pour modifier l'angle
les touches page up page down pour changer la velocité
la touche tab pour previsualiser le tir
la touche espace pour tirer (marche pas encore )
comme vous pourrez le constater...j'ai des petits pb avec le calcul des rebonds mais je desespere pas.
si ca peut vous permettre de mieux comprendre le pb.
je suis ouvert a tous conseils/remarques.
Marsh Posté le 07-01-2003 à 17:36:24
bon...je vois que mon projets a attiré des foules...
(p'ti up déguisé)
Marsh Posté le 07-01-2003 à 18:17:50
Citation : To take into account wind drag, add to the horizontal distance moved a small extra distance term proportional to the wind speed at each time step. Not quite physically realistic, but good enough I expect. |
ah ben si tu t'en fiches que ce soit physiquement correct
tu fais ce que tu veux effectivement
Enfin le type qui a ecrit ca il ne s'est vraiment pas fatigue..
LeGreg
Marsh Posté le 07-01-2003 à 18:47:38
C klr que Worms c pas le summon du réalisme Moi qd j'ai vue que tu demandais une equation de ballistique je pensais que ct pour faire un trucs sérieux
Marsh Posté le 07-01-2003 à 20:32:17
nico168 a écrit : bon..j'ai mis une version windows pre-alpha de mon projets ici |
oups... les touches haut bas gauche droite ne font rien chez moi... sinon, ça commence pas mal...
Marsh Posté le 08-01-2003 à 00:46:31
ouai mais bon, d'un autre coté, si les touches haut/bas/gauche/droite ne marchaient pas, tu n'as pas du voir grand choses
je comprends pas pourquoi, ca marche pas chez toi. 2 potes l'ont testé et ils n'ont pas ce pb.
Marsh Posté le 08-01-2003 à 03:09:15
BeTtASpLeNdEnS a écrit : |
+1
Marsh Posté le 08-01-2003 à 11:32:17
ReplyMarsh Posté le 08-01-2003 à 12:47:36
ReplyMarsh Posté le 08-01-2003 à 13:41:44
et perso, j'ai essayé les touches standard.. et aussi en passant par le pavé numérique (activé comme déséactivé)
bah.. j'sais pas trop d'où ça vient ton pb là faudrait essayer de définir d'autres touches pour voir peut etre si c plus un code page pas pareil qui pourrait faire ça ou pas...
Marsh Posté le 05-01-2003 à 04:25:30
salut,
j'ai les constantes gravité, vent, masse de l'objet.
le vent est toujours parallele au sol, positif ou
negatif.
mon but ultime est d'avoir une fonction du type :
je lui transmet l'adresse d'une structure en entrée avec x, y, angle, velocité
ainsi qu'un timecode T.
la fonction me retourne un pointeur sur une structure contenant x,y,angle, velocité qu'aurra l'objet au timecode T.
a force de googliser j'ai reussi a trouver un algo qui pourrais me convenir, mais il ne contient pas la notion du vent.
je n'ai pas les competence en physique/mathematique pour modifier son algo.
si qq'un a vu un truc comme ca trainer qqpart (et GPL
merci
Message édité par nico168 le 05-01-2003 à 14:17:36