Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1213 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  recherche algo balistique (bonus : jeux inside ! )

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

recherche algo balistique (bonus : jeux inside ! )

n°279492
nico168
Posté le 05-01-2003 à 04:25:30  profilanswer
 

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
mood
Publicité
Posté le 05-01-2003 à 04:25:30  profilanswer
 

n°279493
sombresong​e
Posté le 05-01-2003 à 04:39:34  profilanswer
 

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)

n°279511
Taz
bisounours-codeur
Posté le 05-01-2003 à 10:36:12  profilanswer
 

mauvaise cat :pfff:

n°279516
Kyle_Katar​n
Posté le 05-01-2003 à 10:51:59  profilanswer
 

Pour le vent en fonction de la vitesse (en fait du nombre de Reynolds) ça sera une force en V ou en V²

n°279573
nico168
Posté le 05-01-2003 à 14:03:07  profilanswer
 

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 :
  1. double g=-8, pi=3.141593, c=0.001; // define simulation constants -8 0.002
  2. double fnf(double p, double q) {
  3.           return -c*p*sqrt(p*p+q*q);
  4. }
  5. double fng(double p, double q) {
  6.  return -c*q*sqrt(p*p+q*q)-g;
  7. }
  8.          /////////////////////////////////////////////////////////////////////////////////////////////////////////
  9. int ComputeBalistic( BalisticType *balistic )
  10. {
  11. #ifdef DEBUG_FONCNAME
  12. fprintf(stderr,"ComputeBalistic\n" );
  13. #endif
  14.   double t=0; // start time
  15.   double x=balistic->Start.X; // initial position
  16.   double y=balistic->Start.Y;
  17.   double v=balistic->Start.Velocity; // initial velocity
  18.   double a=balistic->Start.Angle; // fireing angle
  19.   double h=balistic->StepSize; // step size
  20.   double f1,g1,f2,g2,f3,g3,f4,g4,dp,dq,p,q;
  21.   int n;
  22.   BalisticDoubleRowType tmpRow;
  23.   BalisticIntRowType lastRow;
  24.   char truc[250];
  25.   lastRow.X=0;
  26.   lastRow.Y=0;
  27.   a=pi*a/180; // convert angle to rad
  28.   p=v*cos(a); // calc vert & horis. speeds.
  29.   q=v*sin(a);
  30.   for(n=1; n<=500000; n++)
  31. {
  32. f1=fnf(p,q);
  33. g1=fng(p,q);
  34. f2=fnf(p+h*f1/2, q+h*g1/2);
  35. g2=fng(p+h*f1/2, q+h*g1/2);
  36. f3=fnf(p+h*f2/2, q+h*g2/2);
  37. g3=fng(p+h*f2/2, q+h*g2/2);
  38. f4=fnf(p+h*f3, q+h*g3);
  39. g4=fng(p+h*f3, q+h*g3);
  40. dp=(f1+2*(f2+f3)+f4)/6;
  41. dq=(g1+2*(g2+g3)+g4)/6;
  42. x+=p*h+0.5*dp*h*h; // three-term-Taylor approximation
  43. y+=q*h+0.5*dq*h*h;
  44. p+=dp*h; q+=dq*h; t+=h;
  45. if((lastRow.X!=(int)x)||(lastRow.Y!=(int)y)) //if it is drawn in another pixel
  46.  {
  47.  //fprintf(stderr,"added------------------" );
  48.  tmpRow.Timecode=t;
  49.  tmpRow.X=x;
  50.  tmpRow.Y=y;
  51.  tmpRow.Velocity=sqrt(p*p+q*q);
  52.  tmpRow.Angle=180*atan(q/p)/pi;
  53.  AddRowInBalistic(balistic, tmpRow);
  54.  lastRow.X=(int)x;
  55.  lastRow.Y=(int)y;
  56.  if( (IsFieldEmpty((int)x,(int)y)==0) ||((int)y>YReferenceSize)) //if new pixel is not empty
  57.   {
  58.   balistic->Impact.Timecode=h;
  59.   balistic->Impact.X=x;
  60.   balistic->Impact.Y=y;
  61.   balistic->Impact.Velocity=tmpRow.Velocity;
  62.   balistic->Impact.Angle=tmpRow.Angle;
  63.   break;
  64.   }
  65.  }
  66. }
  67.   balistic->IsComputed=1;
  68.   return 1;
  69. }


 
jeux : lui rajouter la notion du  vent  :)


Message édité par nico168 le 05-01-2003 à 14:52:25
n°279588
verdoux
And I'm still waiting
Posté le 05-01-2003 à 14:34:58  profilanswer
 

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.


Message édité par verdoux le 05-01-2003 à 14:35:22
n°279594
nico168
Posté le 05-01-2003 à 14:44:21  profilanswer
 

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


Message édité par nico168 le 05-01-2003 à 14:57:37
n°279833
LeGreg
Posté le 06-01-2003 à 00:29:29  profilanswer
 

Citation :

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


 
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


---------------
voxel terrain render engine | animation mentor
n°280991
nico168
Posté le 07-01-2003 à 12:20:56  profilanswer
 

merci pour vos reponses,
 

Citation :

non ce n'est pas correct.  
Dans ton equation, tu as simplement vitesse de ton objet = vent


 
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.


Message édité par nico168 le 07-01-2003 à 12:21:14
n°281069
BettaSplen​dens
Tout cul tendu mérite son dû
Posté le 07-01-2003 à 14:13:36  profilanswer
 

nico168 a écrit :

tu connais le jeux worms ?

:love:  :love:  :love:


---------------
Tout cul tendu mérite son dû
mood
Publicité
Posté le 07-01-2003 à 14:13:36  profilanswer
 

n°281107
nico168
Posté le 07-01-2003 à 15:16:09  profilanswer
 

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.


Message édité par nico168 le 07-01-2003 à 16:33:30
n°281284
nico168
Posté le 07-01-2003 à 17:36:24  profilanswer
 

bon...je vois que mon projets a attiré des foules...
 
(p'ti up déguisé)

n°281345
LeGreg
Posté le 07-01-2003 à 18:17:50  profilanswer
 

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 :sweat:
 
Enfin le type qui a ecrit ca il ne s'est vraiment pas fatigue..
 
LeGreg


---------------
voxel terrain render engine | animation mentor
n°281379
sombresong​e
Posté le 07-01-2003 à 18:47:38  profilanswer
 

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 [:zaib3k]

n°281479
BettaSplen​dens
Tout cul tendu mérite son dû
Posté le 07-01-2003 à 20:32:17  profilanswer
 

nico168 a écrit :

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.


oups... les touches haut bas gauche droite ne font rien chez moi... sinon, ça commence pas mal...


---------------
Tout cul tendu mérite son dû
n°281644
nico168
Posté le 08-01-2003 à 00:46:31  profilanswer
 

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.

n°281699
HappyHarry
Posté le 08-01-2003 à 03:09:15  profilanswer
 

BeTtASpLeNdEnS a écrit :


oups... les touches haut bas gauche droite ne font rien chez moi... sinon, ça commence pas mal...


 
+1

n°281835
nico168
Posté le 08-01-2003 à 11:32:17  profilanswer
 


 
 
tu veux dire que toi aussi les touches de directions ne marche pas ?

n°281897
HappyHarry
Posté le 08-01-2003 à 12:47:36  profilanswer
 

nico168 a écrit :


 
 
tu veux dire que toi aussi les touches de directions ne marche pas ?


 
bah oué

n°281927
BettaSplen​dens
Tout cul tendu mérite son dû
Posté le 08-01-2003 à 13:41:44  profilanswer
 

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...


---------------
Tout cul tendu mérite son dû

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  recherche algo balistique (bonus : jeux inside ! )

 

Sujets relatifs
[PHP] Recherche programmeurrecherche script pour bare de defilment ...
Besoin d'aide pour algo procédures/tableaudeux requetes en une! [SQL inside]
A la recherche d'un cobol-mode pour Emacs[HTML] please, Aidez moi a centrer mes calques... (débutant inside)
Moteur de recherche efficace site intranetrecherche votre avis sur 2 pitites questions projet info
ident failed for user machin?? d'où ça vient (Postgres inside)[résolu]algo de langage evenementiel HELP
Plus de sujets relatifs à : recherche algo balistique (bonus : jeux inside ! )


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR