y a t'il des matheux ? Calcule de trajectoire poussée

Programmation d'applications complexes
Anonyme

y a t'il des matheux ? Calcule de trajectoire poussée

Message par Anonyme »

Salut à tous,


je voudrais pouvoir modélisé la trajectoire d'un projectille en prennant en compte les paramètres suivant :

- Masse du projectille
- Angle de tir
- Dérive gyroscopique
- la gravité bien sur :D
- le vecteur vent si possible
- je ne sais pas si cela est important de connaitre l'energie du projectille en Kjoule ?


y a t'il des scientifique parmis vous qui serait capable de m'aider dans se genre de calcul ? me manque t'il des paramètres pour être le plus fidèle possible à la réalité ?
le programme à pour but de donné des élément de visée à un tireur longue distance.
j'ai fouillé le wiki & j'ai harcelé google, mais je ne trouve que des aproximation dans se genre :
;/GESTION DES PROJECTILLES SOUS PB4.0
;/PAR CPL.BATOR



Structure Vector2
X.f
Y.f
EndStructure

Structure Projectille
Position.Vector2 ; Position courante de notre projectille
Origin.Vector2 ; Point de départ du projectille
Angle.f ; Angle en degrée du projectille
Vitesse.f ; Vitesse du projectille
Physic_Timer.f ; Temps du projectille (la gravité est basé sur son temps de "vie")
EndStructure


Global NewList Ball.Projectille()

#GRAVITE = 9.8

;/INITIALISATION DES COMPOSANT DIRECTX
InitSprite() : InitKeyboard()
OpenWindow(0,0,0,800,600,"Exemple de projectilles",#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0),0,0,800,600,1,0,0)



;/DECLARATION DES PROCEDURES
Declare ShootProjectille() ; Procedure qui va servir à tirer un projectille
Declare DisplayProjectilles() ; Procedure d'affichage et de gestion de nos projectilles




Repeat
event.l = WindowEvent()

; Toute les secondes on tire un projectille
If TimerToShoot.l<ElapsedMilliseconds()
TimerToShoot.l=ElapsedMilliseconds()+1000
ShootProjectille()
ProjectilleCounter.l + 1
EndIf


;Tout les 10 projectilles , on efface l'écran
If ProjectilleCounter=10
ClearScreen(0)
ProjectilleCounter=0
EndIf



DisplayProjectilles()
FlipBuffers()
Until event = #PB_Event_CloseWindow

End



Procedure ShootProjectille()
AddElement(Ball())

With Ball()
\Origin\X = 20
\Origin\Y = 580
\Angle = Random(85)
\Vitesse = 50+Random(50)
EndWith

EndProcedure


Procedure DisplayProjectilles()
StartDrawing(ScreenOutput())
ForEach Ball()
With Ball()

;Gestion de la courbe
\Position\X = \Origin\X + (\Vitesse*Cos((360-\Angle)*#PI/180)*\Physic_Timer)
\Position\Y = \Origin\Y + (\Vitesse*Sin((360-\Angle)*#PI/180)*\Physic_Timer)+(0.5*#GRAVITE*(\Physic_Timer*\Physic_Timer))
\Physic_Timer + 0.1

Circle(\Position\X,\Position\Y,2,RGB(255,255,255))

;Gestion de la sorite de l'écran
If \Position\X>800 Or \Position\Y >600
DeleteElement(Ball())
EndIf



EndWith
Next
StopDrawing()
EndProcedure
De plus, je voudrais utilisé le système métrique, pas des pixels, comment faire collé le rapport entre les pixels et les mètres ?
Merci.
Anonyme

Message par Anonyme »

C'est la première chose que j'ai fait , puis de toute facons, c'est la même methode que j'emploi dans les jeux :P
Il me faut plus de paramètres :D
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Cpl.Bator a écrit :C'est la première chose que j'ai fait , puis de toute facons, c'est la même methode que j'emploi dans les jeux :P
Il me faut plus de paramètres :D
ha ! ok ! :)
Jeff
Messages : 72
Inscription : sam. 13/mai/2006 18:09

Message par Jeff »

Salut caporal,

Prends-tu en compte que la balle tourne dans tes paramètres (liftée ou coupée) :lol:

Que de bons souvenirs tout cela ! :lol:

j'ai trouvé cela : http://fr.wikipedia.org/wiki/Balistique_ext%C3%A9rieure

bon courage

@+

JF

Note cela me fait me souvenir d'une anecdote dans une TD de mécanique :

Lors d'un TD où tout le monde séchait sur le sujet, le prof va vers un de mes camarades qui visiblement n'avançait pas bcp... Il lui demande qu'est ce qui coince ? mon pote lui répond avec tout le sérieux du monde "la mine dans mon critérium..." :lol:
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Je comprends pas trop ton truc cpl: tu demandes des trucs en 3D et je vois de la 2D avec ton code.

Enfin, c'est pas grave. Je pense que pour commencer, il te faut une espèce de référence. Si mes souvenirs ne sont pas trop en bouillie au fin fond de mon crâne, tu as un truc à faire tourner comme ça:

Repeat
PX = PX + VX
PY = PY + VY
PZ = PZ + VZ

VX = VX + AX
VY = VY + AY
VZ = VZ + AZ

AX = 0
AY = 0
AZ = 0
ForEver

Des vecteurs en fait!
On va dire que "vecteur P" s'écrit £(P)
On a le vecteur position, vecteur P: £(P) = £(PX, PY, PZ)
Si tu restes en 2D c'est seulement £(P) = £(PX, PY)
On a le vecteur vitesse, vecteur V: £(V) = £(VX, VY, VZ)
Et on a le vecteur accélération, vecteur A: £(A) = £(AX, AY, AZ)

Tu fais une boucle qui se répète à jamais (forever, avec un ton un petit peu sentimental...)

Et dedans il y a:
£(P) = £(P) + £(V)
£(V) = £(V) + £(A)
£(A) = £(0, 0, 0)

Je t'ai écrit en plus "simple" ce que j'ai mis en boucle tout en haut entre Repeat et ForEver.
Si tu comprends cette "traduction", ben c'est bon!

Alors ça c'est pour un point qui n'a pas de masse, qui est dans l'espace et qui attend que ça se passe!
J'espère que t'es pas mort à la lecture, moi rien que l'écrire, ça commence à tourner les boyaux donc je vais faire vite pour m'arrêter le plus tôt possible.

Maintenant, ben faut reprendre tes paramètres de contrainte.

1) la gravité (bien sur :D )
>> C'est une accélération vers le bas donc on va la noter £(G) (vecteur G!)
£(Grav) = £(0, -0.01, 0) (Je mets -0.01 au pif après tu te débrouilleras! si t'es pas mort :D )

2)Le vecteur vent. Ben on va dire que le vent il est horizontal.
£(Vent) = £(Pow(Cos(DirectionVent), 2), 0, Sin(DirectionVent) * Pow(VitesseVent, 2) )

3)L'énergie du projectile en Kjoule + la dérive gyroscopique >> Je peux pas, je suis trop nul

4)L'angle de tir >> ben en fait t'en a deux angle de tir.
Imagine t'as un canard (coincoin si tu nous entends...)
Il vole paisiblement n'embête personne
Toi t'as décidé de lui en vouloir avec ton gros fusil double canon.
Pour lui tirer une golden, tu vas tourner sur toi-même >> 1er angle de tir(axe Y)
Et lever le fusil >> 2ème angle de tir(axe X)
On va appeler les vecteurs £(TirY) et £(TirX)
On va appeler les angles AngTirX et AngTirY
ça donne:
£(TirY) = £(Cos(AngTirY), 0, Sin(AngTirY) )
£(TirX) = £(0, Cos(AngTirX), Sin(AngTirY) )

Sachant que l'angle total (et ça c'est à faire vérifier) est je crois:
£(Tir) = £(TirX) + £(TirY)
Mais je peux me tromper.

Sinon (et enfin, ouf) :( , la masse. ça n'existe pas physiquement parlant. Enfin, c'est l'inertie qui trahit la masse.
C'est à dire que tu as une résistance à l'accélération. Donc, c'est, je crois la dérivée de l'opposée de toutes les accélérations que subit ton objet.
£(Iner) = -Derv(€£(A) )
Cherche pas trop à comprendre, d'ailleurs, moi non plus j'en peux plus.
Disons que pour faire simple, il faut créer 3 procédures inertie
ProcInerX(x)
ProcInerY(y)
ProcInerZ(z)

Avant d'y venir je fais un récap des vecteurs:
£(Grav) (Accélération en Y)
£(Vent)
£(Tir)*PuissanceTir
£(Iner)

ça donne un truc dans le genre:
£(Position) + £(Vitesse) + £(Vent)
£(Vitesse) + ProcInertie(£(Accel) ) + £(Grav)
£(Accel) + £(Evenement)
Si InstantTir Alors £(Evenement) = £(Tir)

Bon allez je fais l trad, mais j'espère vraiment que t'es pas encore mort ou paumée entre deux calculs parce que ça faisait longtemps.

Code : Tout sélectionner

Repeat
  Px + Vx + VxVent
  Py + Vy + VyVent
  Pz + Vz + VzVent

  Vx + ProcInerX(Ax) + AxGrav
  Vy + ProcInerY(Ay) + AyGrav
  Vz + ProcInerZ(Az) + AzGrav

  Ax + EventX
  Ay + EventY
  Az + EventZ

  EventX = 0
  EventY = 0
  EventZ = 0
  If InstantTir
    ;POUM!
    EventX = AxTir
    EventY = AyTir
    EventZ = AzTir
  EndIf
ForEver
ça c'est de la physique ollivérienne, de la pure...

Et heureusement que tu ne m'as pas parlé de la résistance de l'air. du cx et tout ça parce que là je me serais enterré. :roll:
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

En me relisant, je crois même que je me goure avec eventx, etc... Enfin, j'espère que tu saisis le principe quand même...
Anonyme

Message par Anonyme »

Merci du temps que tu as passé la dessus :D
mais il me faut absolument la dérive gyroscopique ( je crois que l'appelle l'effet magnus )


En gros, j'ai besoin de tout les facteurs qui peuvent dévié la trajectoire d'un projectile d'une arme à feu longue distance, je compte faire un log pour les tireurs de précisions / élite ( d'ou l'interêt de l'exactitude :D )
Pour mon code plus haut, il est en 2D, mais la 3D ne pose pas de problème, j'ai juste à prendre en compte l'azimut et le gisement, et roule bouboule :D

merci encore, je vais relire ton post :D
comtois
Messages : 5172
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Rien qu'en lisant cet article en diagonal j'ai choppé mal à la tête, je te souhaite du plaisir, tu es courageux de te lancer dans des trucs comme ça.
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Frenchy Pilou
Messages : 2194
Inscription : jeu. 27/janv./2005 19:07

Message par Frenchy Pilou »

Dans tout çà, il ne manque pas la vitesse du projectile? :roll:
c'est l'énergie du projectile?
Anonyme

Message par Anonyme »

La vitesse c'est V0 ou la force de départ si tu préfères.
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Waâh punaise mais comment j'ai pu écrire ce ramassi de m...

Je pourrai pas t'aider, pas pour l'instant. ça me rappelle trop les cauchemars d'équation de bourbon de règles physiques qu'en prog on défonce allègrement par des astuces à droite à gauche.

La gyroscopie, c'est pas comme un tir au foot? (déviation quand on fait tourner la balle)
Idem au tennis?

Si c'est le cas, c'est pas compliqué surtout avec les outils OGRE qu'on a c'est mouché, mais pour ma part, je peux pas.

Je suis trop émotif. :roll:
Ineon
Messages : 2
Inscription : mer. 11/juil./2007 16:53

Message par Ineon »

Salut salut, je suis tombé sur ce sujet complètement par hasard.
Je peux peut-être aider un peu, la physique justement c'est plus ou moins mon domaine.
D'après ce que j'ai compris rapidement, tu veux modéliser la trajectoire d'une balle d'arme à feu en tenant compte de divers paramètres.
Là déjà, j'ai une question, ptêtre débile mais bon. Tu parles de dérive gyroscopique, tu as la certitude que ça a une influence importante sur ta trajectoire ?
J'ai pas poussé mon raisonnement très loin mais pour moi, à première vue déjà, cette même dérive intervient quand grosso modo t'as un truc qui tourne. Déjà ^^
Ta balle, déjà, je pense pas qu'il faille la voir comme une sphère, si je dis pas de grosse connerie une balle justement c'est allongé. Donc déjà, niveau rotation dans un plan parallele au sol, c'est niet. Si ta balle tournait dans se sens, ben elle irait pas loin. La seule rotation que tu pourrais prendre en compte (à mon sens) c'est la rotation suivant l'axe de ton canon.
Déjà je sais pas si ça c'était très clair, du moins si ça l'est je pose comment je vois les choses ^^
Ensuite j'ai jeté vite fait un coup d'oeil sur un des cites qui a été cité là, et j'ai vu une équation avec un truc "moment cinétique" dedans. Je sais pas si ça te parle ce genre de choses, grosso modo, ça dit "plus ta balle elle tourne vite, moins elle dévie". Moi la question qui me vient à l'esprit là, c'est "ça tourne à quelle vitesse une balle ?"
Déjà si t'as une réponse à ça tu peux quantifier la déviation, pour avoir une première idée.
Vala, en fait je sais même pas si ce que j'ai dit ça servira à quelque chose, vérifie qd même que cette dérive est bien effective et non-négligeable quand tu tires, pque sinon c'est s'embarquer dans des équations pour rien.
Si vraiment c'est à prendre en compte, je dois pouvoir retrouver des cours là dessus, et on doit pouvoir sortir une petite équation pour modéliser ça.
Deux derniers p'tits trucs tant que j'y suis. Tu as parlé du vent, sauf erreur je crois pas que j'ai lu quoi que ce soit dessus, t'as réussi à le prendre en compte ?
Et sinon, t'as modélisé une force de frottement aussi ? Sinon ta balle elle va se barrer à l'infini.
Bon courage à toi, je repasserai voir si je peux t'aider ^^
Ollivier
Messages : 4190
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

@ineon

Je pense que t'as raison sur la gyromachin. Plus ça tourne, plus c'est précis. Et le frottement de l'air... alors là... n'en parlons pas parce que sinon je vais encore poster des faux calculs à savoir que la résistance de l'air = au carré de la surface * le cube de la vitesse / par un truc que j'ignore complètement: le coefficient de pénétration. no comment

En fait, déjà un truc bête: simuler les paramètres. C'est tellement plus simple et plus pragmatique.
Anonyme

Message par Anonyme »

Tu parles de dérive gyroscopique, tu as la certitude que ça a une influence importante sur ta trajectoire ?
Oui, en revanche le terme n'est peut être pas exact, je crois qu'il sagit de l'effet magnus ou coriolis, mais mon niveau lamentable en physique ne m'aide pas trop :D
Ensuite j'ai jeté vite fait un coup d'oeil sur un des cites qui a été cité là, et j'ai vu une équation avec un truc "moment cinétique" dedans. Je sais pas si ça te parle ce genre de choses, grosso modo, ça dit "plus ta balle elle tourne vite, moins elle dévie". Moi la question qui me vient à l'esprit là, c'est "ça tourne à quelle vitesse une balle ?"
Oui, l'ogive tourne car il y a des rayures dans le canon, cela sert justement à garder une trajectoire maximum rectiligne. pour la vitesse de rotation , j'en ai aucune idée cela fait aussi partie de mes recherches, si je ne trouve pas , je partirai avec une base comme 10 tours seconde.
Déjà si t'as une réponse à ça tu peux quantifier la déviation
Oui, mais comment faire?
vérifie qd même que cette dérive est bien effective et non-négligeable
Oui, un tireur d'élite prend en compte au pifométre le report de tir en fonction de la distance.
En artillerie, c'est obligatoire.
Deux derniers p'tits trucs tant que j'y suis. Tu as parlé du vent, sauf erreur je crois pas que j'ai lu quoi que ce soit dessus, t'as réussi à le prendre en compte ?
Pour le moment non, car chaque projectile est différent en taille, donc à mon avis la resistance sur l'air est moindre sur un petit projectile qu'un gros, mais comment trouvé la bonne formule ?
Et sinon, t'as modélisé une force de frottement aussi ? Sinon ta balle elle va se barrer à l'infini.
Bon courage à toi, je repasserai voir si je peux t'aider ^^
La seule chose que j'ai pris en compte c'est la gravité (9.81) et la masse du projectile et la vitesse de départ (v0)

En tout cas , je te remercie grandement d'être passé là par hasard
et d'avoir pris le temps de d'inscrire afin de répondre, très sympathique :D

@++
Répondre