[Tutoriel] Tir balistique, jeu de worms et de tir
Posté le 05/03/2006 18:16
C'est un classic, incontournable, meme simple c'est toujours drole, on veut tous en faire un dans sa vie de programmeur
Mais toi tu sais pas faire ! Heureusement que planete-casio est là !
Je vais donner une explication physique (on étudie le mouvement dit parabolique en Term mais c'est pas trop dur à comprendre
) puis je ferai un tuto qui applique quelques points pour un programme (on peut simplifier le probleme).
Donc ne flippez pas devant les calculs!
Etude sans forces de frottements (vent, air) :
Systeme : la balle, de masse m
Referentiel : terrestre supposé galiléen
Forces :
- Le poids : P = m.g avec g dirigé vers le sol
Et oui c'est tout !
Le tir est dans un plan de l'espace donc on peut ramener toute l'étude à un plan (O,x,y)
Le vecteur acceleration
a a donc pour coordonnées :
a ( 0 , -g )
Par intégration (voir en bas) on trouve le vecteur vitesse
v :
v (0 + cte1 , -g * t + cte2)
les constantes sont en fait les projections du vecteur vitesse initiale sur les axes (x,y)
On a donc cte1 = Vo * cos (µ) et cte2 = Vo * sin (µ)
v ( Vo * cos (µ) , -g * t + Vo * sin (µ) )
On intégre à nouveau pour obtenir les coordonnées r de la balle en fonction du temps :
r ( Vo * cos (µ) * t + cte1 , -(1/2) * g * t^2 + Vo * sin (µ) * t + cte2 )
Ici les constantes sont en fait les coordonnées initiales de la balles (là d'ou on tire en fait), on prenra l'origine pour la suite donc cte1 = 0 = cte2
On a donc un système en fonction de t, le temps :
x = Vo * cos (µ) * t
y = -(1/2) * g * t^2 + Vo * sin (µ) * t
En posant t = x / ( Vo * cos (µ) )
Et en remplacant dans y= ... on a y en fonction de x donc on élimine le temps
y= -(1/2) * g * ( x / ( Vo * cos (µ) ) )^2 + Vo * sin (µ) * ( x / ( Vo * cos (µ) ) )
y = - ( g * x^2 ) / ( 2 * Vo^2 * cos (µ)^2 ) + x * tan (µ)
Bon ceci est l'approche physique telle que vous la verrez en Term
Pour la programmation d'un jeu de tir il nous suffit de voir comment se deplace la balle.
- Elle part de Xo,Yo à Vo avec un angle µ.
- au cours du mouvement la gravité agit sur la balle
Donc en fait il suffit de projeter le vecteur vitesse initial sur x,y pour obtenir les coordonnées de la balle à la date t1, t2 etc
depX = Vo * cos (µ)
depY = Vo * sin (µ)
donc considérons une boucle de tir :
?->A
?->F
Fcos A->U
Fsin A->V
0->C~D
Do
C+U->C
D+V->D
Lpwhile...
On va avoir un tir "droit" à l'infini.
En ajoutant la gravité :
?->A
?->F
?->G
Fcos A->U
Fsin A->V
0->C~D
Do
C+U->C
D+V->D
V-G->V
Lpwhile...
Et voila une belle parabole
Note : attention, utilisez une valeur tres faible pour la gravité du genre 0.3 au début
Si on ajoute le vent :
?->A
?->F
?->G
?->W
Fcos A->U
Fsin A->V
0->C~D
Do
C+U->C
D+V->D
V-G->V
U+W->U
Lpwhile...
Faites des essais c'est marrant de voir la balle revenir avec le vent
Intégration :
Le contraire de la dérivation, elle sert pour les calculs d'intégrales (calcul de l'aire délimité par Y=0 et une courbe sur un intervalle par exemple)
Dans la calculatrice, le signe intégrale est un grand S().
S(1) = x + cte (rappelez vous que diff(cte) = 0
)
S(cte) = cte * x + cte2
S(x) = (x^2)/2 (en effet diff((x^2)/2) = 2 * (1/2) * x' * x = x
)
Citer : Posté le 31/10/2015 00:07 | #
@Javierxd : [Algorithme de Bresenham]
Adaptation de cette algorithme en Basic :
"RAYON"?->r
"COORD DU CENTRE EN X"?->U
"COORD DU CENTRE EN Y"?->V
0->A
r->B
r-1->M
Do
PlotOn A+U,B+V
PlotOn B+U,A+V
PlotOn -A+U,B+V
PlotOn -B+U,A+V
PlotOn A+U,-B+V
PlotOn B+U,-A+V
PlotOn -A+U,-B+V
PlotOn -B+U,-A+V
If M>=2A
Then M-2A-1->M
A+1->A
Else If M<=2(r-B
Then M+2B-1->M
B-1->B
Else M+2(B-A-1->M
B-1->B
A+1->A
IfEnd
IfEnd
LpWhile B>=A
Magnifique adaptation! Excellent travail réalisé par un génie du Basic! Je crois que je vais me rétrogradé au minimum par rapport à mon niveau en Basic!