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

MATLAB Discussion :

Animer une courbe


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 142
    Par défaut Animer une courbe
    Bonjour,

    J'ai deux questions et j'aimerai que qqn pourra me répondre.
    1) comment afficher la courbe en bleu (dans le code ci-dessous) uniquement qd th varie entre pi/2 et pi ?

    2) Le 2eme problème c'est je n'arrive pas à créer un fichier .avi de l'animation !! [j'ai mis la commande mov(n-1) = getframe; juste avant drawnow et j'ai mis movie2avi(mov,'exemple_anim.avi') après end. mais cela ne marche pas (voila l'erreur Warning: The frame height has been padded to be a multiple of four as required by the specified codec.)

    merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    th=0:0.02:2*pi;
    y=sin(th);
    fig=figure;
    set(fig,'doublebuffer','on')
    p=plot(th(1),y(1),'r-');
    pp=line([0 th(1)],[-1 y(1)]);
    xlim([min(th) max(th)])
    ylim([min(y) max(y)])
    for n=2:numel(th)
      set(p,'xdata',th(1:n),'ydata',y(1:n));
      set(pp,'xdata',[0 th(n)],'ydata',[-1 y(n)]);
      drawnow 
    end

  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 317
    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 317
    Par défaut
    Pour la première question.... j'ai pas compris

    Pour la seconde, il semble que ce soit un problème de compatibilité du codec utilisé. As-tu essayé avec un autre codec ?

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 142
    Par défaut
    Merci Dut.
    c'est vrai que la première question n'est pas bien formulée !
    Donc je reformule : j'ai modifié le code précédent pour éclaircir les choses.
    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
    clear all
    close all
    clc
     
    th=0:0.005:2*pi;
    y=sin(th);
    th_begin = pi/2;
    th_end = 3*pi/2;
    begin_index = find(abs(th-th_begin)==min(abs(th-th_begin)));
    end_index = find(abs(th-th_end)==min(abs(th-th_end)));
    fig=figure;
    hold on
    plot(th,y)
    set(fig,'doublebuffer','on')
    p=plot(th(1),y(1),'rp');
    p1=line([th(begin_index) th(begin_index)],[-1 y(begin_index)],'color','green')
    xlim([min(th) max(th)])
    ylim([min(y) max(y)])
    for n=1:numel(th)
      set(p,'xdata',th(n),'ydata',y(n));
      if (n>begin_index)&(n<end_index)
          set(p1,'xdata',[th(n) th(n)],'ydata',[-1 y(n)]);
      end
          drawnow 
    end
    Dans ce nouveau code, j'ai une courbe sinusoïdale sur laquelle se déplace un point. Ce que je souhaite faire c'est de marquer le passage de mon point entre deux points de la courbe. C'est pour cela, j'ai ajouté un segment de droite dont l'une des extrémités est le point en question et la seconde extrémité sera la projection de ce point sur l'axe des abscisses.

    Mon problème c'est je ne vois pas de moyen pour synchroniser l'affichage du segment avec le passage de mon point dans la zone d'intérêt (comme vous pouvez le voir l'affichage de segment commence dès le début de l'animation ce qui normal car c'est que je lui demande de faire dans la ligne "p1=line ....")


    Pour la deuxième question je ne vois pas comment choisir un autre codec. Peux-tu me donner une piste ?

    Merci

  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 317
    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 317
    Par défaut
    Tout d'abord :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    begin_index = find(abs(th-th_begin)==min(abs(th-th_begin)))
    end_index = find(abs(th-th_end)==min(abs(th-th_end)))
    se simplifie comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [pasbesoin,begin_index] = min(abs(th-th_begin));
    [pasbesoin,end_index] = min(abs(th-th_end));
    Et ensuite, tu peux faire comme ceci :
    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
    clear all
    close all
    clc
     
    th=0:0.005:2*pi;
    y=sin(th);
    th_begin = pi/2;
    th_end = 3*pi/2;
     
    [pasbesoin,begin_index] = min(abs(th-th_begin));
    [pasbesoin,end_index] = min(abs(th-th_end));
     
    fig=figure;
    hold on
    plot(th,y)
    set(fig,'doublebuffer','on')
    p=plot(th(1),y(1),'rp');
    p1=line([nan nan],[nan nan],'color','green');
    xlim([min(th) max(th)])
    ylim([min(y) max(y)])
     
    vis = {'off' 'on'};
    for n=1:numel(th)
     
    	set(p,'xdata',th(n),'ydata',y(n));
     
    	v = ((n>begin_index)&(n<end_index)) + 1;
        set(p1,'xdata',[th(n) th(n)],'ydata',[-1 y(n)],'visible',vis{v});
     
        drawnow 
    end
    Pour le problème de codec, regarde le paramètre Compression de la fonction MOVIE2AVI

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Tu peux aussi faire directement comme ceci :
    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
    clear all
    close all
    clc
     
    th=0:0.005:2*pi;
    y=sin(th);
    th_begin = pi/2;
    th_end = 3*pi/2;
     
    fig=figure;
    hold on
    plot(th,y)
    set(fig,'doublebuffer','on')
    p=plot(th(1),y(1),'rp');
    p1=line([nan nan],[nan nan],'color','green');
    xlim([min(th) max(th)])
    ylim([min(y) max(y)])
     
    vis = {'off' 'on'};
    v = ((th>th_begin) & (th<th_end))+1;
     
    for n=1:numel(th)
     
    	set(p,'xdata',th(n),'ydata',y(n));
        set(p1,'xdata',[th(n) th(n)],'ydata',[-1 y(n)],'visible',vis{v(n)});
     
        drawnow 
    end

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    142
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 142
    Par défaut
    merci Dut.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 30/09/2014, 00h08
  2. Faire une animation en courbe
    Par gup dans le forum jQuery
    Réponses: 7
    Dernier message: 25/05/2010, 17h05
  3. Flash Design | Une courbe animée ?
    Par peephole83 dans le forum Flash
    Réponses: 1
    Dernier message: 07/05/2010, 16h56
  4. Créer une courbe animée
    Par chilby dans le forum Flash
    Réponses: 1
    Dernier message: 16/04/2010, 17h40
  5. Resconstitution d'une courbe
    Par Mertyl dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 27/05/2005, 08h39

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