Bonjour, je vous remercie d'ava,ce pour votre aide.
Mon problème est le suivant : je suis étudiant et je suis sensé programmer en python la chute d'une balle seulement ce que j'ai fait jusqu'à present ne marche pas vraiment comme je le voudrais.
Pourriez vous me dire ce qu'il ne va pas?(j'ai mis en rouge les points précis ou je pense qu'il y a un probleme). Désolé pour la présentation...
Vecteurs :
class Vecteur :
def __init__(self, _x=0.0, _y=0.0):
self.x = _x
self.y = _y
def mulScalaire(self, _fScalaire):
self.x *= _fScalaire
self.y *= _fScalaire
def addVecteur(self, _vVecteur):
self.x += _vVecteur.x
self.y += _vVecteur.y
Balle :
from Vecteur import *
class Balle:
def __init__(self, _x=0.0, _y=0.0,\
_rayon=10.0, _masse=10.0,\
_xVitesse=0.0, _yVitesse=0.0):
self.mPosition=Vecteur(_x, _y)
self.mVitesse=Vecteur(_xVitesse, _yVitesse)
self.mRayon=_rayon
self.mMasse=_masse
projet:
from Tkinter import *
from Balle import *
def marche():
calculer()
dessiner()
global marche
marche=1
def arret():
global marche
marche=0
def calculer():
global ballesPassees
ballesPassees=[ Balle(_x=derniereBalle.mPosition.x,\
_y=derniereBalle.mPosition.y,\
_rayon=derniereBalle.mRayon,\
_masse=derniereBalle.mMasse,\
_xVitesse=derniereBalle.mVitesse.x,\
_yVitesse=derniereBalle.mVitesse.y)]
global fGravite, iIntervalleTempsMS, fIntervalleTemps
fGravite=-9.8
iIntervalleTempsMS=100
fIntervalleTemps=iIntervalleTempsMS * 0.001
global iIndexTemps
iIndexTemps=0
while derniereBalle.mPosition.x < fResolutionHorizontale \
and derniereBalle.mPosition.x > 0.0 \
and derniereBalle.mPosition.y > 0.0 \
and iIndexTemps < 10000:
derniereBalle.mVitesse.y += fGravite * fIntervalleTemps
tempVitesseAAppliquer = Vecteur(derniereBalle.mVitesse.x, derniereBalle.mVitesse.y)
tempVitesseAAppliquer.mulScalaire(fIntervalleTemps)
derniereBalle.mPosition.addVecteur(tempVitesseAAppliquer)
ajoutduneBalle = Balle(_x=derniereBalle.mPosition.x,\
_y=derniereBalle.mPosition.y,\
_rayon=derniereBalle.mRayon,\
_masse=derniereBalle.mMasse,\
_xVitesse=derniereBalle.mVitesse.x,\
_yVitesse=derniereBalle.mVitesse.y)
ballesPassees.append(ajoutduneBalle)
fenetre.coords(cercleDessinee, ballesPassees[iIndexTemps].mPosition.x - ballesPassees[iIndexTemps].mRayon,\
fResolutionVerticale - (ballesPassees[iIndexTemps].mPosition.y) - ballesPassees[iIndexTemps].mRayon,\
ballesPassees[iIndexTemps].mPosition.x + ballesPassees[iIndexTemps].mRayon,\
fResolutionVerticale - (ballesPassees[iIndexTemps].mPosition.y) + ballesPassees[iIndexTemps].mRayon)
iIndexTemps += 1
def dessiner():
dessinerUneTrame(1)
#L AFFICHAGE DE LA BALLE NE SE MET A JOUR QU A LA FIN et pas entre chaque appel d'after, POURQUOI ?
def dessinerUneTrame(iIndexTempsAffichage):
global iIntervalleTempsMS, cercleDessinee, ballesPassees, marche
fenetre.coords(cercleDessinee, ballesPassees[iIndexTempsAffichage].mPosition.x - ballesPassees[iIndexTempsAffichage].mRayon,\
fResolutionVerticale - (ballesPassees[iIndexTempsAffichage].mPosition.y) - ballesPassees[iIndexTempsAffichage].mRayon,\
ballesPassees[iIndexTempsAffichage].mPosition.x + ballesPassees[iIndexTempsAffichage].mRayon,\
fResolutionVerticale - (ballesPassees[iIndexTempsAffichage].mPosition.y) + ballesPassees[iIndexTempsAffichage].mRayon)
print(ballesPassees[iIndexTempsAffichage].mPosition.x)
print(fResolutionVerticale - (ballesPassees[iIndexTempsAffichage].mPosition.y) + ballesPassees[iIndexTempsAffichage].mRayon) #l'impression des coordonnes donne bien les bonnes valeurs
if ( iIndexTempsAffichage < iIndexTemps and marche > 0): #si on change iIndexTemps pour par exemple arreter l'affichage de la simu a la moitie, la balle est bien affichee au bon endroit
fenetre.after(iIntervalleTempsMS, dessinerUneTrame(iIndexTempsAffichage+1))
global fResolutionVerticale, fResolutionHorizontale
fResolutionVerticale=480.0
fResolutionHorizontale=640.0
interface=Tk()
global fenetre
fenetre=Canvas(interface,width=fResolutionHorizontale,height=fResolutionVerticale,bg='ivory')
fenetre.pack(side=TOP,padx=5,pady=5)
global derniereBalle
derniereBalle=Balle(_x=50.0, _y=430.0, _rayon=10.0)
global cercleDessinee
cercleDessinee = fenetre.create_oval(derniereBalle.mPosition.x-derniereBalle.mRayon,fResolutionVerticale - (derniereBalle.mPosition.y)-derniereBalle.mRayon,\
derniereBalle.mPosition.x+derniereBalle.mRayon,fResolutionVerticale - (derniereBalle.mPosition.y)+derniereBalle.mRayon,outline='black')
bouton1=Button(interface,text='marche',command=marche)
bouton1.pack(side=LEFT,padx=5,pady=5)
bouton2=Button(interface,text='arret',command=arret)
bouton2.pack(side=LEFT,padx=20,pady=5)
interface.mainloop