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

Bibliothèques tierces Python Discussion :

animation sous MatPlotLib


Sujet :

Bibliothèques tierces Python

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut animation sous MatPlotLib
    bonjour
    je cherche à animer un rendu Matplotlib

    par exemple là, j'ai programmé le jeu de la vie sous forme de 0 et de 1
    pour l'afficher sous forme graphique j'utilise une séquence d'instructions que je ne comprend pas très bien mais qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fig, ax = plt.subplots()
    im = ax.imshow(L)
    L étant la liste de liste, donc le tableau, contenant mes 0 et mes 1
    (bon, j'aurais pu utiliser un numpy.array)
    j'ai ensuite une def qui actualise L

    maintenant, quand je fais mon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fig.tight_layout()
    plt.show()
    la fenêtre de la petite fusée s'affiche mais c'est figé

    je voudrais bien afficher cette fenêtre toutes les t secondes, avec à chaque fois une actualisation de L pour voir l'animation

    auriez vous une piste à me conseiller ?

    merci !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par elodouwen Voir le message
    auriez vous une piste à me conseiller ?
    Chercher sur Internet comment faire des animations avec matplotlib serait un bon début...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut
    okkj'ai cherché
    j'ai mélangé un code trouvé sur internet avec le mien
    voici mon code :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
    #on manipule une liste de lignes
    #L[i,j] sera compris si on l'ecrit L[j][i] dans le code Python
     
     
    h=8#hauteur
    n=10#largeur
     
    def creer_liste_vide():
        Ll=[]#point de depart
        for i in range(h):
            Ll.append([0]*n)#attention [[0]*n]*h pose des pb
        # car alors les lignes sont des repliques et se modifient
        # simultanement des qu'une d'elles est modifiee.
        return(Ll)
    """
    L=[[0]*n]#point de depart
    for i in range(h):
        L.append([0]*n)#attention [[0]*n]*h pose des pb
        # car alors les lignes sont des repliques et se modifient
        # simultanement des qu'une d'elles est modifiee.
    """
    L=creer_liste_vide()
     
    def autour(i,j):
        #0<i<n-1
        #0<j<h-1
        somme=L[j-1][i-1]+\
              L[j-1][i]+\
              L[j-1][i+1]+\
              L[j][i-1]+\
              L[j][i]+\
              L[j][i+1]+\
              L[j+1][i-1]+\
              L[j+1][i]+\
              L[j+1][i+1]
        ici=L[j][i]
        if(ici):#cas ici==1
            return((somme==2 or somme==3)*1)#le *1
            #pour avoir un int et non un bool
        else:#cas ici==0
            return((somme==3)*1)
     
    def nouvelle():
        Lnew=creer_liste_vide()
        for j in range(1,h-1):
            for i in range(1,n-1):
                Lnew[j][i]=autour(i,j)
        return(Lnew)
     
    def afficher(liste):
        for ligne in liste:
            print(ligne)
     
    motif=[\
        [0,0,0,0],\
        [0,0,1,1],\
        [0,1,0,1],\
        [0,1,1,1],\
        [1,1,0,1],\
        ]
    h_motif=len(motif)
    n_motif=len(motif[0])#en esperant que len(motif[i])=Cste
    h_depart=h//2-h_motif//2
    n_depart=n//2-n_motif//2
    h_i=0
    n_i=0
    while(h_i<h_motif):
        while(n_i<n_motif):
            L[h_i+h_depart][n_i+n_depart]=motif[h_i][n_i]
            n_i+=1
        h_i+=1
        n_i=0
        #print("uuu")
     
    def transfuser(L1,L2):
        #Li du type Li[j][i]
        for j in range(h):
            for i in range(n):
                L2[j][i]=L1[j][i]
     
    def animate(i):
        im = ax.imshow(L)
        transfuser(nouvelle(),L)
     
    #import numpy as np
    import matplotlib
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from matplotlib.animation import FuncAnimation 
     
    fig, ax = plt.subplots()
    anim = FuncAnimation(fig, animate,\
                        # init_func = init,
                        frames = 10, interval = 1000, blit = True)
     
    ax.set_title(str(h)+" x "+str(n))
    fig.tight_layout()
    plt.show()
    il me parle, dans le code d'erreur, de "Artist objects"
    je ne comprend pas de quoi il s'agit
    j'avoue que là je peine un peu je ne sais plus comment attaquer la chose…

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par elodouwen Voir le message
    il me parle, dans le code d'erreur, de "Artist objects"
    je ne comprend pas de quoi il s'agit
    C'est peut être pour çà qu'il existe une documentation matplotlib (qui explique les différents objets des abstractions utilisées...).... et vous pouvez aussi demander à votre moteur de recherche favori "what is a matplotlib artist".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    C'est peut être pour çà qu'il existe une documentation matplotlib (qui explique les différents objets des abstractions utilisées...).... et vous pouvez aussi demander à votre moteur de recherche favori "what is a matplotlib artist".

    - W
    ok j'ai lu ici
    https://matplotlib.org/stable/tutori...e/artists.html

    a) je ne comprend pas pourquoi j'ai pu jusqu'à aujourd'hui faire des figures sans utiliser les objets "artist" ; on peut faire des figures avec ou sans utiliser des "Artist" ?
    b) je vous remercie, Christophe, d'avoirdéjà répondu deux fois ; je suis mal à l'aise sur les forums informatique ou contrairement aux forums maths, la réponse est souvent "lis la doc" ; or moi, cette page ci dessus c'estvraiment dur à déchiffrer
    c) j'ai beau lire et relire cette même page, je ne comprend toujours pas la phrase d'erreur que me renvoie mon programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RuntimeError: The animation function must return a sequence of Artist objects.
    merci de votre attention…

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par elodouwen Voir le message
    c) j'ai beau lire et relire cette même page, je ne comprend toujours pas la phrase d'erreur que me renvoie mon programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RuntimeError: The animation function must return a sequence of Artist objects.
    Dans le code que vous avez posté, il y a une fonction "animation" (définie comme telle parce que passée en argument à FuncAnimation).
    Et on peut constater que cette fonction ne retourne rien (puisqu'elle ne contient même pas le mot clé return).
    De plus, si vous avez sorti ce code d'un exemple qui fonctionne, la fonction (dans l'exemple) devrait retourner quelque chose dont on pourrait s'inspirer (à défaut de connaître les subtilités d'un Artist).

    Citation Envoyé par elodouwen Voir le message
    je suis mal à l'aise sur les forums informatique ou contrairement aux forums maths, la réponse est souvent "lis la doc" ; or moi, cette page ci dessus c'estvraiment dur à déchiffrer
    On peut poster du code qui "fonctionne" (une solution mais il y en a déjà plein sur Internet...) mais ça ne va pas vous aider à apprendre à le réaliser (ni à savoir chercher sur Internet ou à lire une documentation qui sont les problèmes principaux que vous avez et qui n'ont rien à voir avec Python "le langage").

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut
    dans le code dont je me suis inspiré il y avait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def animate(i):
        x = np.linspace(0, 4, 1000)
     
        # plots a sine graph
        y =  (x - 0.01 * i)**2
        line.set_data(x, y)
     
        return line,
    mais vu que je ne plotte pas un mais je ne vois pas quoi retourner

    On peut poster du code qui "fonctionne" (une solution mais il y en a déjà plein sur Internet...) mais ça ne va pas vous aider à apprendre à le réaliser (ni à savoir chercher sur Internet ou à lire une documentation qui sont les problèmes principaux que vous avez et qui n'ont rien à voir avec Python "le langage").
    pour moi il ne s'agit vraiment, mais alors vraiment pas de cela…
    j'ai fait mon petit code de jeu de la vie et n'ai rien demandé à personne, j'ai débugué au fur et à mesure et au bout d'un long temps, ça marche bien

    mais j'ai du mal à faire le lien entre deux objets totalement nouveaux pour moi, le "ax.imshow(L)" et le "FuncAnimation"

    je comprend que j'aurais dû remarquer que ma fonction ne retournait rien, cela fait aussi partie pour moi de l'intérêt d'un forum, des fois on ne voit pas quelque chose ; mais là pour faire le lien entre ces deux objets…

    après en fouillant davantage, oui je finirai peut-être par tomber sur d'autres FuncAnimation sur internet, qui gèrent autre chose que du data(x,y), et ça pourra m'inspirer… et si vous n'avez pas trop d'idée sur cette question précise ce n'est pas grave, je ferai cela…

    merci et bonne journée

    Vinz

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par elodouwen Voir le message
    mais j'ai du mal à faire le lien entre deux objets totalement nouveaux pour moi, le "ax.imshow(L)" et le "FuncAnimation"
    Si vous n'arrivez pas à faire le lien, peut être que FuncAnimation n'est pas adapté a ce que vous voulez faire? En tous cas, si vous ne voyez pas comment adapter cet exemple à votre problème, pas la peine de taper "run" pour récupérer des messages d'erreurs qui de toute façon ne vous mèneront nulle part.

    Quand vous cherchez sur Internet, il faut utiliser de bons mots clefs (et ces mots clefs sont à extraire de la description du problème)... Ici, ce serait plutôt "matplotlib animation imshow" qui tombe sur ce genre d'article...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  9. #9
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut
    Merci beaucoup du coup
    Tout marche
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
     
     
     
     
     
    h=20#hauteur
    n=30#largeur
    delta=500#millisecondes entre deux images
    motif=[\
        [0,0,0,0],\
        [0,0,1,1],\
        [0,1,0,1],\
        [0,1,1,1],\
        [1,1,0,1],\
        ]
    #---------------------------------------
    #on manipule une liste de lignes
    #L[i,j] sera compris si on l'ecrit L[j][i] dans le code Python
     
    def creer_liste_vide():
        Ll=[]#point de depart
        for i in range(h):
            Ll.append([0]*n)#attention [[0]*n]*h pose des pb
        # car alors les lignes sont des repliques et se modifient
        # simultanement des qu'une d'elles est modifiee.
        return(Ll)
     
    L=creer_liste_vide()
     
    def autour(i,j):#renvoie ce que le point (i,j) devient : 1 ou 0
        #0<i<n-1
        #0<j<h-1
        somme=L[j-1][i-1]+\
              L[j-1][i]+\
              L[j-1][i+1]+\
              L[j][i-1]+\
              L[j][i]+\
              L[j][i+1]+\
              L[j+1][i-1]+\
              L[j+1][i]+\
              L[j+1][i+1]
        ici=L[j][i]
        if(ici):#cas ici==1
            return((somme==2 or somme==3)*1)#le *1
            #pour avoir un int et non un bool
        else:#cas ici==0
            return((somme==3)*1)
     
    def nouvelle():
        Lnew=creer_liste_vide()
        for j in range(1,h-1):
            for i in range(1,n-1):
                Lnew[j][i]=autour(i,j)
        return(Lnew)
     
    def afficher(liste):
        for ligne in liste:
            print(ligne)
     
    #remplissage de L avec le motif choisi -------------
    h_motif=len(motif)
    n_motif=len(motif[0])#en esperant que len(motif[i])=Cste
    h_depart=h//2-h_motif//2
    n_depart=n//2-n_motif//2
    h_i=0
    n_i=0
    while(h_i<h_motif):#remplit L avec le motif quelque part ~ au centre
        while(n_i<n_motif):
            L[h_i+h_depart][n_i+n_depart]=motif[h_i][n_i]
            n_i+=1
        h_i+=1
        n_i=0
     
    def transfuser(L1,L2):
        #Li du type Li[j][i]
        for j in range(h):
            for i in range(n):
                L2[j][i]=L1[j][i]
     
    def animate(i):
        #im = ax.imshow(L)
        transfuser(nouvelle(),L)
        im.set_array(L)
        return [im]
     
    #import numpy as np
    import matplotlib
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from matplotlib.animation import FuncAnimation 
     
    fig, ax = plt.subplots()
     
    im = plt.imshow(L, interpolation='none', aspect='auto', vmin=0, vmax=1)#vmin, vmax = les couleurs
     
    anim = FuncAnimation(fig, animate,\
                        # init_func = init,
                        #frames = range(2),
                        interval = delta, \
                        #blit = True)
                        )
     
    ax.set_title(str(h)+" x "+str(n))
    fig.tight_layout()
    plt.show()
    J'essaie juste de comprendre pourquoi ça ne se répète en tout que 3 fois, j'ai cherché quelques mots clés style "matplotlib funcanimation how many times" mais pas encore trouvé
    c'est un détail, je finirai par trouver
    en tout cas tout marche nickel
    je n'aurais jamais résolu ça tout seul

    par contre à force de pratiquer et de venir ici je finirai plus autonome…

    bonne soirée

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par elodouwen Voir le message
    J'essaie juste de comprendre pourquoi ça ne se répète en tout que 3 fois, j'ai cherché quelques mots clés style "matplotlib funcanimation how many times" mais pas encore trouvé
    Déjà, il faut ouvrir la documentation pour voir ce qu'est supposé faire FuncAnimation.
    Puis se poser des questions pour savoir ce qui dans le code correspond à ce qu'on voit sur son écran.

    A la fin, on aura la description d'un problème (et on pourra chercher des solutions) ou d'autres pistes à explorer (pour trouver la cause).
    C'est juste le boulot du programmeur (lorsqu'il fait la mise au point d'un code).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  11. #11
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut
    je vous remercie de votre réponse

    vous avez une posture à la fois très aidante, vous m'avez consacré du temps ; et très professorale
    je n'ai pas compris grand chose à la seconde partie de votre message

    j'ai regardé la documentation de Funcanimation comme vous m'y avez invité
    c'est pour moi un style très difficile à digérer, je ne comprend que les exemples, pas les fiches techniques
    je ne comprend pas la plupart des mots comme "iterable"
    et pourtant je veux finir ce programme car j'y prend tout simplement du plaisir
    et j'ai parfois besoin de programmes pour mes étudiants
    vous avez peut être cru que j'étais un programmeur…

    en tous les cas je ne parviens pas à voir dans la documentation ce qui fait que mon animation, se répètre trois fois
    j'ai essayé de jongler avec les arguments dont le peu que je comprenais me faisait penser que ça pouvait avoir un rapport avec le nobmre de répétitions, par exemple j'ai rajouté frames = 10 et puis j'ai rajouté save_count=10 tout en ayant la sensation que ça ne marcherait pas

    sur la page de la doc j'ai recherché le mot "times" en pensant qu'une phrase quelque part expliquerait quelle instruction permet de contrôler "how many times" on repète l'animation ; rien

    j'ai tapé dans duckduckgo "matplotlib funcanimation how many times", rien trouvé puis "matplotlib funcanimation number repetitions"
    le mot-clé "number" me renvoie toujours à save_count

    j'ai l'intuition que c'est l'argument frame qui pilote le nombre de répétitions et pourtant mon programme ne répète que 3 fois

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
     
     
     
     
    h=20#hauteur
    n=30#largeur
    delta=500#millisecondes entre deux images
    motif=[\
        [0,0,0,0],\
        [0,0,1,1],\
        [0,1,0,1],\
        [0,1,1,1],\
        [1,1,0,1],\
        ]
    #---------------------------------------
    #on manipule une liste de lignes
    #L[i,j] sera compris si on l'ecrit L[j][i] dans le code Python
     
    def creer_liste_vide():
        Ll=[]#point de depart
        for i in range(h):
            Ll.append([0]*n)#attention [[0]*n]*h pose des pb
        # car alors les lignes sont des repliques et se modifient
        # simultanement des qu'une d'elles est modifiee.
        return(Ll)
     
    L=creer_liste_vide()
     
    def autour(i,j):#renvoie ce que le point (i,j) devient : 1 ou 0
        #0<i<n-1
        #0<j<h-1
        somme=L[j-1][i-1]+\
              L[j-1][i]+\
              L[j-1][i+1]+\
              L[j][i-1]+\
              L[j][i]+\
              L[j][i+1]+\
              L[j+1][i-1]+\
              L[j+1][i]+\
              L[j+1][i+1]
        ici=L[j][i]
        if(ici):#cas ici==1
            return((somme==2 or somme==3)*1)#le *1
            #pour avoir un int et non un bool
        else:#cas ici==0
            return((somme==3)*1)
     
    def nouvelle():
        Lnew=creer_liste_vide()
        for j in range(1,h-1):
            for i in range(1,n-1):
                Lnew[j][i]=autour(i,j)
        return(Lnew)
     
    def afficher(liste):
        for ligne in liste:
            print(ligne)
     
    #remplissage de L avec le motif choisi -------------
    h_motif=len(motif)
    n_motif=len(motif[0])#en esperant que len(motif[i])=Cste
    h_depart=h//2-h_motif//2
    n_depart=n//2-n_motif//2
    h_i=0
    n_i=0
    while(h_i<h_motif):#remplit L avec le motif quelque part ~ au centre
        while(n_i<n_motif):
            L[h_i+h_depart][n_i+n_depart]=motif[h_i][n_i]
            n_i+=1
        h_i+=1
        n_i=0
     
    def transfuser(L1,L2):
        #Li du type Li[j][i]
        for j in range(h):
            for i in range(n):
                L2[j][i]=L1[j][i]
     
    def animate(i):
        #im = ax.imshow(L)
        transfuser(nouvelle(),L)
        im.set_array(L)
        return [im]
     
    #import numpy as np
    import matplotlib
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from matplotlib.animation import FuncAnimation 
     
    fig, ax = plt.subplots()
     
    im = plt.imshow(L, interpolation='none', aspect='auto', vmin=0, vmax=1)#vmin, vmax = les couleurs
     
    anim = FuncAnimation(fig, animate,\
                        # init_func = init,
                        frames = 10,
                        interval = delta, \
                        #blit = True)
                        save_count=10
                        )
     
    ax.set_title(str(h)+" x "+str(n))
    fig.tight_layout()
    plt.show()

  12. #12
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par elodouwen Voir le message
    je n'ai pas compris grand chose à la seconde partie de votre message
    Ajouter un print de n'importe quoi dans la fonction animate pour vérifier qu'elle est (ou pas) appelée 3 fois... ou qu'elle retourne les mêmes données au bout de 3 fois? A vous de répondre à ces questions.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2010
    Messages
    406
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2010
    Messages : 406
    Points : 92
    Points
    92
    Par défaut
    vos "encouragements" m'ont incité à penser que non, le pb ne venait pas du nouvel objet Funcanimation que, venant, de découvrir, j'estimais à tort être obscurément à l'origine du bug
    effectivment ça venait d'ailleurs et, encouragé par cette perspective, j'ai résolu
    donc merci à vous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher les objets et les anim sous maya
    Par Asmod_D dans le forum Développement 2D, 3D et Jeux
    Réponses: 2
    Dernier message: 15/05/2006, 02h43
  2. Problème de Gif animé sous IE
    Par nicolb dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/03/2006, 17h11
  3. Gifs animés sous Win32 (VCL)
    Par ctrlaltsuppr dans le forum Composants VCL
    Réponses: 4
    Dernier message: 22/02/2006, 00h41
  4. Comment animer sous opengl ?
    Par AsmCode dans le forum OpenGL
    Réponses: 4
    Dernier message: 17/10/2005, 12h32
  5. Réponses: 14
    Dernier message: 09/08/2004, 13h42

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