Problème de boucle programme python
Bonjour à tous je suis nouveau sur le forum donc je ne sais pas trop comment ça fonctionne.
Je suis en galère sur un programme python en effet je cherche à modéliser la trajectoire d'une balle de golf sans frottements, je suis donc parti dans l'idée de la modéliser sous la forme d'une successions de paraboles donc l'angle de départ serait toujours le même mais la vitesse initiale de chaque parabole serait égale à la vitesse finale de la parabole précédente. Cependant dans mon programme python ne m'affiche que la première parabole et je n'arrive pas à résoudre ce problème. J'espère avoir été clair et si une âme charitable voudrait bien m'aider je suis preneur.
Voila mon programme:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| import numpy as np
from math import pi
import matplotlib.pyplot as plt
g=9.81
z=0
nbr=2000
t=np.linspace(0,200,nbr)
def sansfrottements(t,a,v): #a=angle alpha en degrés v=vitesse initiale
a=a*pi/180
L=[]
c=0
d=0
e=0
w=0
v1=0
for k in range(nbr):
if (-1/2)*g*(t[k]/(np.cos(a)*v))**2+(np.sin(a)/np.cos(a))*t[k]>0:
c+=1
L.append((-1/2)*g*(t[k]/(np.cos(a)*v))**2+(np.sin(a)/np.cos(a))*t[k])
w=L[-1]
v1=-g*(1/((v**2)*((np.cos(a))**2)))*w+(np.sin(a)/np.cos(a))
if (-1/2)*g*((t[k]-t[c])/(np.cos(a)*v1))**2+(np.sin(a)/np.cos(a))*(t[k]-t[c])>0:
L.append((-1/2)*g*((t[k]-t[c])/(np.cos(a)*v1))**2+(np.sin(a)/np.cos(a))*(t[k]-t[c]))
d+=1
return L
print(L)
def tracefct(a,v):
Y=sansfrottements(t,a,v)
plt.figure(1)
plt.plot(Y)
plt.title("tracé d'une trajectoire sans frottements")
plt.show() |
Ou avec une approche différente:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
import numpy as np
from math import pi
import matplotlib.pyplot as plt
g=9.81
z=0
nbr=200
t=np.linspace(0,200,nbr)
c=0
def sansfrottements(t,a,v): #a=angle alpha en degrés v=vitesse initiale
a=a*pi/180
L=[]
v1=0
for k in range(nbr):
if (-1/2)*g*(t[k]/(np.cos(a)*v))**2+(np.sin(a)/np.cos(a))*t[k]>=0:
L.append((-1/2)*g*(t[k]/(np.cos(a)*v))**2+(np.sin(a)/np.cos(a))*t[k])
c+=1
w=L[-1]
v1=-g*(1/((v**2)*((np.cos(a))**2)))*w+(np.sin(a)/np.cos(a))
for k in range(len(L),nbr):
if (-1/2)*g*((t[k]-t[c])/(np.cos(a)*v1))**2+(np.sin(a)/np.cos(a))*(t[k]-t[c])>0:
L.append((-1/2)*g*(t[k]/(np.cos(a)*v1))**2+(np.sin(a)/np.cos(a))*t[k])
return L
def tracefct(a,v):
Y=sansfrottements(t,a,v)
plt.figure(1)
plt.plot(Y)
plt.title("tracé d'une trajectoire sans frottements")
plt.show() |
Merci à tous :)