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
- 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 :
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 ?;/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
Merci.