Etape 8 : Application : Etude de la chute d’une balle lachée par un cycliste en mouvement

Télécharger le pdf | Télécharger le notebook, le fichier csv et la video | Lancer le notebook sur binder (lent)

[1]:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import csv
[2]:
def charge_fichier_csv(cheminfichier, delimiter=";",N=0):
    with open(cheminfichier, 'r', encoding='utf-8') as f :
        rfichier = csv.reader(f, delimiter=delimiter)
        tab=[]
        index_row=0
        for row in rfichier:
            if index_row < N:
                index_row = index_row+1
            else :
                for i in range (len(row)):
                    if len(tab) <= i:
                        X = []
                        tab.append(X)
                    try:
                        tab[i].append(float(row[i].replace(",",'.')))
                    except ValueError:
                        print('erreur:contenu de cellule non numérique')
                        continue

    return tab
[3]:
def model_polynome_deg2(u,v):
    u=np.array(u)
    v=np.array(v)
    coeff=np.polyfit(u,v,2)
    vmodel=coeff[0]*u**2+coeff[1]*u+coeff[2]
    return vmodel
[4]:
def derivee(t,u):
    du=[]
    for i in range (len(u)-1):
        dui=(u[i+1]-u[i])/(t[i+1]-t[i])
        du.append(dui)
    return du
[5]:
def graphvect(x,y,ymodel,vx,vy):
    fig = plt.figure(1,figsize=(10,12))
    plt.plot(x,y,'r+',label='y=f(x)')
    plt.plot(x,ymodel,'g-',label='modèle polynôme de degré 2')
    plt.xlim(0,max(x)+0.5)
    plt.ylim(0,max(y)+0.5)
    plt.grid()
    plt.xlabel("x(m)")
    plt.ylabel("y(m)")
    plt.legend()
    for i in range (len (vx)) :
        plt.arrow(x[i],y[i],0.03*vx[i],0.03*vy[i],fc='b',
                  ec='b',head_width=0.02,
                  length_includes_head=True)
    plt.title("Modélisation et tracé des vecteurs vitesse instantanée")
    plt.show()
[6]:
tableau = charge_fichier_csv("chute_balle.csv",delimiter=";",N=1)
t=tableau[0]
print(t)
x=tableau[1]
print(x)
y=tableau[2]
print(y)
ymodel=model_polynome_deg2(x,y)
print(ymodel)
vx=derivee(t,x)
vy=derivee(t,y)
graphvect(x,y,ymodel,vx,vy)
[0.76, 0.8, 0.84, 0.88, 0.92, 0.96, 1.0, 1.04, 1.08, 1.12, 1.16, 1.2, 1.24, 1.28, 1.32, 1.36]
[0.00865710739046, 0.106770991149, 0.204884874908, 0.302998758666, 0.398226939961, 0.493455121256, 0.588683302551, 0.675254376456, 0.767596855287, 0.857053631656, 0.946510408024, 1.03019577946, 1.11676685337, 1.19756652235, 1.27836619132, 1.36205156277]
[1.98247759242, 1.97093478256, 1.94496346039, 1.89590651851, 1.83530676678, 1.7545070978, 1.66216461897, 1.55827933028, 1.43707982682, 1.29568040611, 1.15139528293, 0.984024540049, 0.807996689776, 0.605997517332, 0.403998344888, 0.187570660127]
[1.97254171 1.96885614 1.94560635 1.90279235 1.84252803 1.7638334
 1.66670847 1.56241984 1.43438997 1.29383467 1.13701536 0.97558948
 0.7936194  0.61003832 0.41318878 0.19532115]
../../_images/etape_08_chute_balle_cycliste_chute_balle_cycliste_7_1.png
[ ]: