Modélisation balle de tennis
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Modélisation balle de tennis



  1. #1
    invitef656ebb0

    Modélisation balle de tennis


    ------

    Hello tout le monde !

    Ecoutez les amis, je travaille actuellement sur un projet consistant à modéliser la trajectoire d'une balle de tennis...en prenant en compte les frottements et la rotation de la balle.
    Du coup en projetant sur mes 3 axes j'obtient:
    dvx/dt= -(h/m)*sqrt(vx**2+vy**2+vz**2)*vx+ (l/m)*(wy*vz-wz*vy)
    dvy/dt= -(h/m)*sqrt(vx**2+vy**2+vz**2)*vy+ (l/m)*(wz*vx-wx*vz)-g
    dvz/dt= -(h/m)*sqrt(vx**2+vy**2+vz**2)*vy+ (l/m)*(wx*vy-wy*vx)

    Du coup j'ai programmé tout ça sur python en m'aidant du module solve_ivp...sauf que je n'obtient rien….

    Je demande donc de l'aide à un un bon samaritin pour trouver ce qui colle pas
    Merci d'avance

    Mon code:

    Code:
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.integrate import solve_ivp
    from mpl_toolkits.mplot3d import Axes3D
    
    # global g, h, l, m, wx, wy,wz,x0,y0,z0,v0x,v0y,v0z
    g=9.81 #accélération de la pesanteur
    m=56.7E-03 #masse de la balle
    x0=0   #position du joueur sur le terrain
    y0=0   #hauteur initiale du lancé
    z0=2
    v0=20  #vitesse du service
    θ=10   #angle de lancé par rapport à l'horizontal
    α=40   
    v0x=v0*np.cos(θ*np.pi/180) #vecteur vitesse projeté sur l'axe x
    v0z=v0*np.sin(θ*np.pi/180) #vecteur vitesse projeté sur l'axe x
    v0y=v0*np.sin(α*np.pi/180)
    p=1.225   #masse volumique de l'air
    R=3.3E-02 #rayon de la balle
    S=4*np.pi*R**2
    C=0.4 #coeffcient de trainée 
    h=0.5*p*C*S
    wx, wy, wz= 0,0,100 #vecteur rotation en rad/s
    l=0.17
    
    
    
    def trajectoire(t, u):
        global g,l,m,wx,wy,wz,h
        x = u[0]
        y = u[1]
        z = u[2]
        vx = u[3]
        vy = u[4]
        vz = u[5]
        dudt = np.zeros(np.size(u))
    # le système que l'on veut intégrer !'    
        dudt[0] = u[3]       # equation de la vitesse vx            
        dudt[1] = u[4]        # equation de la vitesse vy 
        dudt[2] = u[5]
        dudt[2] = -(h/m)*np.sqrt(u[3]**2+u[4]**2+u[5]**2)*u[3]+(l/m)*(wy*u[5]-wz*u[4])          # equation de l'accélération sur x           
        dudt[3] = -(h/m)*np.sqrt(u[3]**2+u[4]**2+u[5]**2)*u[4]+(l/m)*(wz*u[3]-wx*u[5])        # equation de l'accélération sur y  
        dudt[4] = -(h/m)*np.sqrt(u[3]**2+u[4]**2+u[5]**2)*u[5]+(l/m)*(wx*u[4]-wy*u[3])-g
        return dudt
    
    
    
    tinit = 0
    tfinal = 2.1
    nt = 1001
    t = np.linspace(tinit,tfinal,nt)
    #
    #************************************************************************
    #  method="RK45"   "RK23"  "Radau" "BDF"   "LSODA"
    #************************************************************************
    ## option
    # t_eval=tv , rtol = 1.0e-3 , atol = 1.0e-6
    # ,rtol = 1.0e-6 , atol = 1.0e-8
    # dense_output=True,
    #  max_step = 0.01, events=None
    # résolution du système d'EDP sous forme d'EDO
    
    # conditions initiales
    Uinit = [0,0,2,27.63,4.8,27.36] # x0,y0, vx0, vy0
    sol = solve_ivp(trajectoire,
                    (tinit, tfinal), y0=Uinit, args=(wx,wy,wz,g,l,h,m) ) 
    
    x = sol.y[0]
    y = sol.y[1]
    z = sol.y[2]
    vx = sol.y[3]
    vy = sol.y[4]
    vz = sol.y[5]
    
    i=0
    for k in t:
        if z[i]<0:
            break
        i=i+1
    
    fig, ax=plt.subplots()
    ax = plt.axes(projection='3d')
    ax.set_xlabel("Longueur (m)")
    ax.set_ylabel("Largeur (m)")
    ax.set_zlabel("Hauteur (m)")
    ax.plot(x[:i],y[:i],z[:i],lw=2)
    plt.show()

    -----
    Dernière modification par Antoane ; 02/04/2020 à 12h06. Motif: Ajout balises [/code]

  2. #2
    umfred

    Re : Modélisation balle de tennis

    rien ça veut dire quoi ?
    Sinon tu définis 2 fois dudt[2] dans ta fonction trajectoire. erreur de copier/coller ou vraie erreur ?
    et c'est normal que tu n'utilises pas le paramètre t dans cette fonction ?

  3. #3
    invitef656ebb0

    Re : Modélisation balle de tennis

    Pour le dudt c'est une erreur de copier coller
    Et oui c'est normal que je n'appelle pas le paramètre t dans la fonction

    En fait j'obtient simplement une droite en 3D!! au lieu de la trajectoire d'une balle de tennis… :/

  4. #4
    umfred

    Re : Modélisation balle de tennis

    j'ai testé le code (après avoir corrigé les indices de dudt) sous Visual Studio Community avec python 3.7, et j'ai une erreur sur l'appel de solve_ivp.
    je l'ai modifié en sol = solve_ivp(trajectoire,(tinit, tfinal), y0=Uinit)
    et j'ai encore une erreur dans la boucle for (z[i] n'est jamais négatif, donc on dépasse le nombre d'éléments de z)
    En supprimant cette boucle et en affichant tous les éléments de x, y, z dans le plot, j'ai une courbe (une sorte de tourbillon) mais pas sûr que ce soit celle attendue

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Lance balle tennis
    Par trendkiller dans le forum Technologies
    Réponses: 10
    Dernier message: 20/06/2020, 09h22
  2. Modélisation impact de balle de tennis - choix du matériau
    Par invitea98b3292 dans le forum Physique
    Réponses: 42
    Dernier message: 02/03/2016, 17h07
  3. Modélisation Impact balle de tennis sur une raquette
    Par invite06bb999f dans le forum Physique
    Réponses: 0
    Dernier message: 05/01/2014, 14h42
  4. Rebond d'une balle de tennis
    Par invite96f2d269 dans le forum Physique
    Réponses: 5
    Dernier message: 10/03/2011, 16h36
  5. Mouvement d'une balle de tennis.
    Par invitec0695f9c dans le forum Physique
    Réponses: 3
    Dernier message: 20/04/2010, 16h16