from tkinter import *
from math import *
from tkinter import ttk
def pointsuivant_sansbarriere(*args):#v0 vitesse initiale, x0 et y0 positions initiales, alpha angle initial de lancer
if y0>1.05 or y0<0:
print("Le paramètre doit être compris entre 0 et 1,05")
return([])
x1=x0+v0*sin(alpha)*0.1 #0,1 est l'intervalle de temps entre chaque point
y1=y0+v0*cos(alpha)*0.1
x=x1
y=y1
X=[]
Y=[]
while x<18.29: #18,29m est la longueur de la piste
x=N((x+v0*sin(alpha)*0.1),digits=4)
y=N((y+v0*cos(alpha)*0.1),digits=4)
X.append(x)
Y.append(y)
return((X,Y))
def sansbarriere(*args):
x=x0
y=y0
pos=pointsuivant_sansbarriere(*args)
X=pos[0]
Y=pos[1]
Lx=[]
Ly=[]
n=len(X)
for i in range(n):
if 0<=X[i]<=18.29 and 0<Y[i]<1.05:
Lx.append(X[i])
Ly.append(Y[i])
elif Y[i]<0 or Y[i]>1.05:
return((Lx,Ly))
elif X[i]>18.29 or X[i]<0:
return((Lx,Ly))
def trajectoire_sansbarriere(*args):
sb=sansbarriere(*args)
X=sb[0]
Y=sb[1]
n=len(Y)
L=[]
for i in range (n):
L.append((X[i],Y[i]))
return(L)
def calcul_pointsuivant(*args):#v0 vitesse initiale, x0 et y0 positions initiales, alpha angle initial de lancer
x1=x0+v0*sin(alpha)*0.1 #0,1 est l'intervalle de temps entre chaque point
y1=y0+v0*cos(alpha)*0.1
return([v0,x1,y1,alpha])
def calcul_pointsuivant_barriere(*args):#ça ne marche pas avec le randint
if x>=18.29 :
return([v0,x,y,alpha])
elif (y >= 1.05) :
alpha=alpha-pi/2#+randint(0,pi/18)
return(calcul_pointsuivant(*args))
elif (y <= 0) :
alpha=alpha+pi/2#+randint(0,pi/18)
return(calcul_pointsuivant(*args))
return(calcul_pointsuivant(*args))
def trajectoire_barriere(*args) :
LX=[]
LY=[]
v,x,y,alpha=v0,x0,y0,alpha
for i in range(0,N) :
LX.append(calcul_pointsuivant_barriere(v,x,y,alpha)[1])
LY.append(calcul_pointsuivant_barriere(v,x,y,alpha)[2])
alpha=calcul_pointsuivant_barriere(v,x,y,alpha)[3]
x,y=LX[i],LY[i]
return(LX,LY)
def coordonnees_barriere(*args):#il faudrait trouver un moyen pour qu'on n'ai pas à définir le N
sb=trajectoire_barriere(*args)
X=sb[0]
Y=sb[1]
n=len(Y)
L=[]
for i in range (n):
L.append((X[i],Y[i]))
return(L)
#création de la fenêtre principale
fenetre = Tk()
fenetre.title('Bowling')
#initialisation des variables
v0= StringVar()
x0= StringVar()
y0= StringVar()
alpha= StringVar()
N= StringVar()
#définition de la zone d'entrée
v0_entree = ttk.Entry(fenetre, width=7, textvariable = v0)
x0_entree = ttk.Entry(fenetre, width=7, textvariable = x0)
y0_entree = ttk.Entry(fenetre, width=7, textvariable = y0)
alpha_entree = ttk.Entry(fenetre, width=7, textvariable = alpha)
N_entree = ttk.Entry(fenetre, width=7, textvariable = N)
#Définition des widgets
bouton2 = Button(fenetre, text = "Quitter", command = fenetre.destroy)
bouton = ttk.Button ( fenetre, text = "Avec barrières", command = coordonnees_barriere)
bouton3 = ttk.Button ( fenetre, text = "Sans barrière", command = trajectoire_sansbarriere)
message = Label(fenetre, text= "Choisir une option")
#Placement des widgets dans le fenêtre principale
message.grid()
bouton.grid()
bouton2.grid()
bouton3.grid()
N_entree.grid()
alpha_entree.grid()
x0_entree.grid()
y0_entree.grid()
v0_entree.grid()
#Boucle sur les évènements liés à la fenêtre principale
fenetre.mainloop()
fenetre.configure(bg = 'yellow')
fenetre.geometry("700*700")