IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Calcul scientifique Python Discussion :

Qui peut m'expliquer quelques lignes de code concernant l'animation d'une siusoide


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2019
    Messages : 67
    Par défaut Qui peut m'expliquer quelques lignes de code concernant l'animation d'une siusoide
    Bonjour à tous,

    Grace à l'aide d'un script et d'une animation déjà en ligne, j'ai réussi à obtenir le déplacement d'une fonction sinusoidale.
    Voici mon script modifié s'adaptant à mes besoins.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    38
    39
    40
    41
    42
    43
    import numpy as np
    from matplotlib import pyplot as plt
    from matplotlib import animation
     
    print("")
     
    print("")   
    print("SINUSOIDE EN MOUVEMENT")
    print("")  
    print("On considère une fonction sinusoïdale d'équation : U*cos(2*pi*f*t + b)") 
    print("")
     
    U = float(input("Quelle est l'amplitude de votre signal U (en V, et Umax < 10 V) ?"))
     
    print("")
    f = float(input("Quelle est la fréquence de votre signal f (en Hz) ?"))
    b = -np.pi
     
     
    # First set up the figure, the axis, and the plot element we want to animate
    fig = plt.figure()
    ax = plt.axes(xlim=(0, 1), ylim=(-5, 5))
    line, = ax.plot([], [], lw=2)
     
    # initialization function: plot the background of each frame
    def init():
        line.set_data([], [])
        return line,
     
    # animation function.  This is called sequentially
    def animate(i):
        x = np.linspace(0, 1, 1000)
        y = U*np.sin(2 * np.pi * (f*x -  0.01*i))
        line.set_data(x, y)
        plt.grid()
        plt.title("Onde mécanique en mouvement")
        plt.xlabel("Temps en secondes")
        plt.ylabel("Amplitude en Volt")
        return line,
     
    # call the animator.  blit=True means only re-draw the parts that have changed.
    anim = animation.FuncAnimation(fig, animate, init_func=init,
                                   frames=1000, interval=20, blit=True)

    Par contre, imposible de comprendre les lignes de code suivantes:
    - ligne 23 : A quoi sert cette ligne ? Quel est le role de la virgule apres le mot "line" et à quoi sert "lw" ?
    - lignes 26 à 28 : J ai du mal à comprendre le role de ces lignes et à quoi correspond line.set? . Pourquoi il y a-t-il encore une virgule après le mot "line"?

    Merci pour votre aide,
    Cordialement

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2020
    Messages
    0
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2020
    Messages : 0
    Par défaut
    Bonjour,

    Voici quelques explications pour ton code.

    Citation Envoyé par Olivier20000 Voir le message
    - ligne 23 : A quoi sert cette ligne ? Quel est le role de la virgule apres le mot "line" et à quoi sert "lw" ?
    Dans ton cas à la ligne 21 tu crées une figure qui va faire office de conteneur.
    Ensuite ligne 22 tu crées un élément "axes" appelé ax et tu en définis les limites.
    Puis la fameuse ligne 23 permet de créer un élément "plot" appelé line. Comme tu as initialisé les axes à la ligne au-dessus les deux premiers arguments sont vides et tu définis l'épaisseur de l'axe à 2 (argument lw).
    Tu trouveras des infos sur la gestion de cette fonction aux liens suivants :
    https://matplotlib.org/users/artists.html
    https://matplotlib.org/api/_as_gen/m...Axes.plot.html

    Citation Envoyé par Olivier20000 Voir le message
    - lignes 26 à 28 : J ai du mal à comprendre le role de ces lignes et à quoi correspond line.set? . Pourquoi il y a-t-il encore une virgule après le mot "line"?
    C'est une méthode de type constructeur, qui permet la création de ton premier cadre.
    set_data est une méthode de matplotlib qui définit les axes ( cf la doc : https://matplotlib.org/api/_as_gen/m...ine2D.set_data)


    Concernant la virgule.
    ax.plot() renvoie un tuple contenant un élement. Avec la virgule tu indiques à Python de "séparer" le tuple et de retourner la valeur de gauche.
    (Toute l'explication est ici avec ton exemple : https://stackoverflow.com/questions/...comma-operator).


    J'espère que mes explications sont claires.
    Bonne journée

Discussions similaires

  1. qui peut m'expliquer ce bout de code python ?
    Par khadi8 dans le forum Général Python
    Réponses: 3
    Dernier message: 22/01/2014, 15h16
  2. [AC-2003] quelqu'un peut m'expliquer les lignes d'un programme(VBA)
    Par abde17-s dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/04/2011, 11h49
  3. [UBUNTU] Qui peut m'expliquer ce qu'est un live cd ?
    Par Jihed Amine Maaref dans le forum Ubuntu
    Réponses: 21
    Dernier message: 29/08/2006, 22h04
  4. qui peut m'expliquer ce script?
    Par nouna dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 22
    Dernier message: 20/10/2005, 23h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo