Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » [Tutoriel] Tir balistique, jeu de worms et de tir
Neuronix Hors ligne Fondateur Points: 4488 Défis: 21 Message

[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 )



Devessier Hors ligne Membre Points: 5 Défis: 0 Message

Citer : Posté le 31/10/2015 00:07 | #


Smashmaster a écrit :
@Javierxd : [Algorithme de Bresenham]

Adaptation de cette algorithme en Basic :
ViewWindow 1,127,0,1,63,0
"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!
Observez le ciel et vous apprendrez à être humble

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 228 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd