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

Scilab Discussion :

Animation avec Matplot


Sujet :

Scilab

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 15
    Points : 8
    Points
    8
    Par défaut Animation avec Matplot
    Bonjour,

    Je souhaiterais réaliser une animation avec Matplot :
    J'ai une matrice M de taille 10x10 remplie de 0 et de 1. Cette matrice est modifiée par plusieurs opérations à chaque passage dans une boucle.
    A chaque itération, j'aimerais faire un Matplot de ma matrice pour repérer facilement la position des 0 et 1, le tout de façon la plus fluide possible.

    J'avoue ne pas comprendre grand chose au fonctionnement graphique de Scilab (d'autant que la moindre fenêtre graphique fait planter mon Linux, mais c'est un autre problème...)
    Avez-vous une idée des commandes à utiliser dans ma boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    début boucle
     ... ?
     ... ?
     opérations de modification de la matrice
     ... ?
     ... ?
    fin boucle
    Merci d'avance pour votre aide.

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 901
    Points
    52 901
    Par défaut
    Un début de solution :

    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
    M = rand(10,10);
    M = floor(M+0.5);
     
    figure
    Matplot(zeros(10,10));
    e = gce();
     
    for n = 1:10
     
        drawlater();
        M = abs(M-1);
        e.data = M+1;
        drawnow();
        sleep(300);
     
    end

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Bonjour,

    Et merci pour le début de solution. Cela a l'air de réaliser ce que je souhaite.
    Je me permets quelques questions :

    1) les commandes "figure; e = gce();" servent à initialiser la fenêtre graphique et à éviter de taper le gce() ?

    2) J'imagine que la commande "M = abs(M-1);" est celle qui modifie les valeurs de la matrice. Mais alors à quoi sert "e.data = M+1;" ?

    3) La commande "sleep(300);" sert à ralentir l'animation. Puis-je faire en sorte de devoir appuyer sur entrée pour passer à l'étape suivante ?

    Encore merci de votre aide.

  4. #4
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 901
    Points
    52 901
    Par défaut
    Citation Envoyé par guigui_ln Voir le message
    1) les commandes "figure; e = gce();" servent à initialiser la fenêtre graphique et à éviter de taper le gce() ?
    Oui

    Citation Envoyé par guigui_ln Voir le message
    2) J'imagine que la commande "M = abs(M-1);" est celle qui modifie les valeurs de la matrice. Mais alors à quoi sert "e.data = M+1;" ?
    Parce que les valeurs à tracer avec Matplot doivent être des entiers naturels non nuls qui correspondent à des indices dans la palette de couleurs de la figure (1, 2, 3, 4...)

    Comme M contient les valeurs 0 et 1, on doit afficher les indices 0+1 et 1+1 de la palette de couleurs

    Citation Envoyé par guigui_ln Voir le message
    3) La commande "sleep(300);" sert à ralentir l'animation. Puis-je faire en sorte de devoir appuyer sur entrée pour passer à l'étape suivante ?
    Remplace sleep par halt

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Super, merci.

    Maintenant un autre question pour mieux comprendre le fonctionnement de la chose.

    J'avais fait un essai du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    début boucle
     Matplot(M)
     Opérations sur M
    fin boucle
    Problème : les Matplot se superposaient et on ne voyait plus l'évolution. Donc j'étais passé à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    début boucle
     clf
     Matplot(M)
     Opérations sur M
    fin boucle
    La ça fonctionnait à peu près mais les clf créaient un clignotement et tout cela était très lent.

    Pourquoi ta solution est-elle bien meilleure ?

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 901
    Points
    52 901
    Par défaut
    Citation Envoyé par guigui_ln Voir le message
    Pourquoi ta solution est-elle bien meilleure ?
    Parce que l'objet graphique n'a pas à être supprimé et créé à nouveau à chaque itération.

    On modifie juste une de ses propriétés.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Effectivement cela a l'air bien meilleur.

    Dernière question, lors du drawnow(), le logiciel réaffiche-t-il toute la matrice ou est-il assez fin pour n'afficher que les composantes qui ont changé ?

    (la dernière possibilité m'étonnerait un peu)

  8. #8
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 309
    Points : 52 901
    Points
    52 901
    Par défaut
    Ce n'est pas Scilab qui est chargé de l'affichage, cela se passe plutôt au niveau de la carte graphique via des routines OpenGL (voir la fonction usecanvas)

    Difficile donc de dire précisément ce qui se passe...

Discussions similaires

  1. Afficher un Gif animée avec VC6
    Par vanitom dans le forum MFC
    Réponses: 2
    Dernier message: 13/10/2005, 17h46
  2. [FLASH MX2004] Lancer une anim avec des paramètres ??
    Par gchanteux dans le forum Flash
    Réponses: 4
    Dernier message: 23/03/2005, 17h49
  3. particules animées avec point sprites ?
    Par ilimo dans le forum DirectX
    Réponses: 3
    Dernier message: 10/09/2004, 23h12
  4. Animations avec différents objet
    Par Mathieu.J dans le forum OpenGL
    Réponses: 6
    Dernier message: 09/06/2004, 14h18
  5. Réponses: 2
    Dernier message: 14/01/2004, 16h21

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