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 :

présentation aléatoire de point


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Homme Profil pro
    ingénieur de recherche clinique
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : ingénieur de recherche clinique
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Points : 5
    Points
    5
    Par défaut présentation aléatoire de point
    bonjour, je suis nouveau sur matlab, et j'ai des problème avec les fonctions aléatoires sous matlab.

    je vous explique mon problème.

    Je dois créer un tâche de présentation de point sr un écran qui apparaisent a droite, a gauche, en haut et en bas de l'écran. crée la fonction qui permet de les afficher avec PLOT a été possible, mais maintenant, je n'arrive pas a les faire apparaitre aléatoirement 1 par 1 et 4 fois maximun par pression de la barre d'espace. je n'y arrive pas avec la fonction rand ou randi, qui génère des nombre aléatoire, alors que moi je veux faire une présentation aléatoire de point que j'ai crée.

    auriez vous une solution a mon problème?

    Merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    peux-tu nous montrer ton code, même si il est faux, et nous expliquer un peu plus ce qui ne fonctionne pas?
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    ingénieur de recherche clinique
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : ingénieur de recherche clinique
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    bonjour,

    je vais le récupéré car je ne suis pas chez moi pendant ses périodes de fêtes, mais je peux expliquer mieux.

    Je souhaite réalisé une tâche d'antisaccade sur un écran.

    on demande au gens de fixer un point central du regard, puis ont fais apparaitre un cible en périphérie de l'écran, et on leur demande de regarder à l'opposé de la cible.

    moi je voudrais réalisé la tâche qui me permettrais de présenter des points sur l'écran en haut, bas, gauche et droite et de manière aléatoire, avec un retour sur point central entre chaque cibles, et par pression de la barre d'espace.

    merci d'avance.

    PS: je me dépêche de mettre le programme que j'ai déjà fais.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    ingénieur de recherche clinique
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : ingénieur de recherche clinique
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    voila le programme

    je vous explique mon souci

    je veux faire apparaître les huit point de manière aléatoire sur l'écran, mais aussi qu'il n’apparaissent que 4 fois chacun, se qui correspond à 32 essais.

    je voudrais savoir s'il est possible de dire que le compteur a atteint sont max et qu'il ne doit plus afficher lorsque que ça a atteint 4.

    Est-il possible de définir un maximum d'affichage pour une variable, car je n'ai réussi à dire compteur max = une valeur, ce qui aurait été plus facile.

    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
    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
    function pageconsigne
      TailleEcran = get(0,'ScreenSize');
     
     figure('Name','TESTANTISACCADE','Position',[TailleEcran(1) TailleEcran(2) TailleEcran(3) ... 
        TailleEcran(4)],'MenuBar','none',...
       'ToolBar','none','KeyPressFcn',@printfig);
     
    set(gcf,'Color',[0 0 0])
     text(0.2,0.7,'Fixez le point noir qui va apparaitre au centre de l''écran.','Fontsize',30,'fontname','Times new roman','fontweight','bold', 'color','red') 
     text(0.2,0.5,'Dans un second temps, vous devrez pointer du doigt aussi','Fontsize',30,'fontname','Times new roman','fontweight','bold', 'color','red') 
     text(0.25,0.43,'rapidement et aussi précisement que possible','Fontsize',30,'fontname','Times new roman','fontweight','bold', 'color','red')
     text(0.22,0.36,'à l''opposé des points rouges apparaissant à l''écran.','Fontsize',30,'fontname','Times new roman','fontweight','bold', 'color','red')
     axis off
     pause (3)
    clear ('f')
    set(gcf,'Color',[0 0 0])
     
     
    point0 = [0 0]; %coordonnée point central
    plot(point0,point0,'.w','markersize',50);% dessine le point de taille 50 de coordonnée 0 0, de forme point en blanc 
    axis([-3 3 -3 3]); % défini la taille des axe suivant X et Y, min et max
    axis off % dit qu'il ne doit pas afficher les axes
     
    compteur1 = 0;
    compteur2 = 0;
    compteur3 = 0;
     
    function printfig(~,~)
     
        essai = randi([1 3],1,1);
     
      if (essai == 1);
          x1 = -2;
          y1 = 0;
           plot(x1,y1,'.r','markersize',50);
           axis([-3 3 -3 3]);
           axis off
        pause (2)
     
        if compteur1 <= 3
            compteur1 = compteur1 + 1
            plot (x1,y1,'.r','markersize',50);
        end
        if compteur1 > 3
            plot (point0,point0,'.w','markersize',50)
           essai = randi ([2 3],1,1)
        end
     
      end
    %___________________________________________________________________  
     if (essai == 2);
          x2 = -1;
          y2 = 0;
           plot(x2,y2,'.r','markersize',50);
           axis([-3 3 -3 3]);
           axis off
        pause (2)
     
        if compteur2 <= 3
            compteur2 = compteur2 + 1
            plot (x2,y2,'.r','markersize',50);
        end
        if compteur2 > 3
            plot (point0,point0,'.w','markersize',50)
           essai = randi ([1],[3],1,1)
        end
      end
    %__________________________________________________________________
     if (essai == 3);
          x3 = 1;
          y3 = 0;
           plot(x3,y3,'.r','markersize',50);
           axis([-3 3 -3 3]);
           axis off
        pause (2)
     
        if compteur3 <= 3
            compteur3 = compteur3 + 1
            plot (x3,y3,'.r','markersize',50);
        end
        if compteur3 > 3
            plot (point0,point0,'.w','markersize',50)
           essai = randi ([1 2],1,1)
        end
     end
    plot(point0,point0,'.w','markersize',50);
     axis([-3 3 -3 3]);
    axis off
    end
      end

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Une façon de faire serait de te fixer au début les valeurs possibles:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Nb_directions = 8;
    Nb_Max = 4;
    directions = kron(1:Nb_directions,ones(1,Nb_Max ));
    Puis d'effectuer un tirage aléatoire de Nb_directions*Nb_Max valeurs, avec RANDPERM par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    idx = randperm(Nb_directions*Nb_Max);
    Enfin, faire le parcours des i = 1:Nb_directions*Nb_Max directions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    essai = directions(idx(i))
    Remarque: en ajoutant au début la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set(gca,'Nextplot','replacechildren')
    Tu n'auras pas à écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    axis([-3 3 -3 3]);
    axis off
    après chaque plot.
    Ta fonction printfig pourra alors se simplifier en:
    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
        function printfig(~,~)
            essai = directions(idx(i));
            i = 1+1;
            switch essai
                case 1
                    x = ...
                    y = ...
                case 2
                    x = ...
                    y = ...
     
                % ...
     
                case 8
                    x = ...
                    y = ...
            end
            plot(gca,x,y,'.r','markersize',50);
            pause (2)
       end

  6. #6
    Futur Membre du Club
    Homme Profil pro
    ingénieur de recherche clinique
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : ingénieur de recherche clinique
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    merci,

    je vais essayer et je vous dirais si cela à marcher.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    ingénieur de recherche clinique
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : ingénieur de recherche clinique
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    j'ai encore des soucis, j'ai essayé ac votre méthode, mais je n'y arrive pas. je débute et je ne suis pas très doué.

    j'ai bien compris le début qui nous permet d'avoir au maximun 4 essais pour huit condition de manière aléatoire avec le fonction randperm, mais c'est ensuite que cela se corse.

    lorsque que je demande d'afficher les points lorsque je tape sur la barre d'espace, j'ai de nouvelle fenètre qui s'ouvre mais sans les point cible que j'ai défini dans case. de plus je voulais qu'il continue à s'ouvrir dans la même fenêtre que celle de consigne, mais à la suite, et qu'entre chaque essais s'intercalle le point 0 au centre de l'écran et que chaque essais soit démarrer par une pression sur le clavier.

    merci de votre aide
    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
     function nico 
      TailleEcran = get(0,'ScreenSize');
     
     figure('Name','TESTANTISACCADE','Position',[TailleEcran(1) TailleEcran(2) TailleEcran(3) ... 
        TailleEcran(4)],'MenuBar','none',...
       'ToolBar','none','KeyPressFcn',@printfig);
     
    set(gcf,'Color',[0 0 0])
     text(0.2,0.7,'Fixez le point noir qui va apparaitre au centre de l''écran.','Fontsize',30,'fontname','Times new roman','fontweight','bold', 'color','red') 
     text(0.2,0.5,'Dans un second temps, vous devrez pointer du doigt aussi','Fontsize',30,'fontname','Times new roman','fontweight','bold', 'color','red') 
     text(0.25,0.43,'rapidement et aussi précisement que possible','Fontsize',30,'fontname','Times new roman','fontweight','bold', 'color','red')
     text(0.22,0.36,'à l''opposé des points rouges apparaissant à l''écran.','Fontsize',30,'fontname','Times new roman','fontweight','bold', 'color','red')
     axis off
     pause (3)
    clear ('f')
    set(gcf,'Color',[0 0 0])
     
     
    point0 = [0 0]; %coordonnée point central
    plot(point0,point0,'.w','markersize',50);% dessine le point de taille 50 de coordonnée 0 0, de forme point en blanc 
    axis([-3 3 -3 3]); % défini la taille des axe suivant X et Y, min et max
    axis off % dit qu'il ne doit pas afficher les axes
     
     
    function printfig (~,~)
     
    TailleEcran = get(0,'ScreenSize');
    figure('Name','ESSAIS','Position',[TailleEcran(1) TailleEcran(2) TailleEcran(3) ... 
        TailleEcran(4)],'MenuBar','none',...
       'ToolBar','none','KeyPressFcn',@printfig);
     
    Nb_directions = 8
    Nb_Max = 4
    directions = kron(1:Nb_directions,ones(1,Nb_Max))
    idx=randperm(Nb_directions*Nb_Max)
    i = 1:Nb_directions*Nb_Max
     
    set(gcf,'Color',[0 0 0]);
     
        essai = directions(idx(i));
        i = 1+1;
        switch essai
            case 1
             x = -2
             y = 0
            case 2
             x = -1
             y = 0
            case 3
             x = 1
             y = 0
     	    case 4
             x = 2
             y = 0
            case 5
             x = 0
             y = 2
            case 6
             x = 0
             y = 1
     	    case 7
             x = 0
             y = -1
            case 8
             x = 0
             y = -2
        end
    plot(gcf,x,y,'.r','markersize',50);
    pause (2)
    end
      end

  8. #8
    Invité
    Invité(e)
    Par défaut
    Deux problèmes importants:
    • Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      function printfig (~,~)
        
      TailleEcran = get(0,'ScreenSize');
      figure('Name','ESSAIS','Position',[TailleEcran(1) TailleEcran(2) TailleEcran(3) ... 
          TailleEcran(4)],'MenuBar','none',...
         'ToolBar','none','KeyPressFcn',@printfig);
      C'est figure(...) qui te crée à chaque appuis sur une touche une nouvelle figure. Ces lignes créant ta figure principale sont déjà dans ton programme principal et n'ont nulle place ici.
    • Code : Sélectionner tout - Visualiser dans une fenêtre à part
      plot(gca,x,y,'.r','markersize',50);
      GCF renvoie le handle de ta figure actuelle, à ne pas confondre avec GCA qui renvoie le handle de ton Axes courant.

    Ensuite attention de créer ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Nb_directions = 8
    Nb_Max = 4
    directions = kron(1:Nb_directions,ones(1,Nb_Max))
    idx=randperm(Nb_directions*Nb_Max)
    i=1;
    Dans ton programme principal, et d'initialiser i à 1.

    Au final, tu auras ton programme:
    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
    function nico
     
    TailleEcran = get(0,'ScreenSize');
    figure('Name','TESTANTISACCADE',...
        'Position',TailleEcran, ...
        'MenuBar','none',...
        'ToolBar','none',...
        'Color',[0 0 0],...
        'KeyPressFcn',@printfig);
     
    h(1) = text(0.2,0.7,'Fixez le point noir qui va apparaitre au centre de l''écran.','Fontsize',30,'fontname','Times new roman','fontweight','bold', 'color','red');
    h(2) = text(0.2,0.5,'Dans un second temps, vous devrez pointer du doigt aussi','Fontsize',30,'fontname','Times new roman','fontweight','bold', 'color','red');
    h(3) = text(0.25,0.43,'rapidement et aussi précisement que possible','Fontsize',30,'fontname','Times new roman','fontweight','bold', 'color','red');
    h(4) = text(0.22,0.36,'à l''opposé des points rouges apparaissant à l''écran.','Fontsize',30,'fontname','Times new roman','fontweight','bold', 'color','red');
    axis off
    pause (3)
    delete(h) % détruit les objets TEXT créés
     
    set(gca,'Nextplot','replaceChildren',... % Garde les mêmes limites lors des plot
        'Visible','off',... % axis off
        'XLim',[-3 3],...   % défini la taille des axes suivant X
        'YLim',[-3 3])      % défini la taille des axes suivant Y
     
    point0 = [0 0]; %coordonnée point central
    plot(point0,point0,'.w','markersize',50);% dessine le point de taille 50 de coordonnée 0 0, de forme point en blanc
     
    Nb_directions = 8;
    Nb_Max = 4;
    directions = kron(1:Nb_directions,ones(1,Nb_Max));
    idx=randperm(Nb_directions*Nb_Max);
    i = 1;
     
        function printfig (~,~)
     
            essai = directions(idx(i));
            i = i+1;
            switch essai
                case 1
                    x = -2;
                    y = 0;
                case 2
                    x = -1;
                    y = 0;
                case 3
                    x = 1;
                    y = 0;
                case 4
                    x = 2;
                    y = 0;
                case 5
                    x = 0;
                    y = 2;
                case 6
                    x = 0;
                    y = 1;
                case 7
                    x = 0;
                    y = -1;
                case 8
                    x = 0;
                    y = -2;
            end
            plot(x,y,'.r','markersize',50) % Ou plot(gca,x,y,'.r','markersize',50) exactement pareil
            pause (2)
        end
    end
    Reste plus que la gestion lorsque i atteindra 32.
    Dernière modification par Invité ; 06/01/2012 à 11h43.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    ingénieur de recherche clinique
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : ingénieur de recherche clinique
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Points : 5
    Points
    5
    Par défaut
    merci bcp,

    je vais essayer de finir les dernier ajustement seul.

    il me reste a rajouter le point central blanc entre chaques essais et de bloquer à 32 essais.

    merci.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 09/02/2010, 20h46
  2. Déplacement vers un point aléatoire qui change à chaque tour
    Par Lulou40 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 13/10/2009, 12h54
  3. Présentation aléatoire
    Par Garra dans le forum Flash
    Réponses: 4
    Dernier message: 23/07/2009, 18h41
  4. Génération aléatoire de points - Anticollision
    Par damilari dans le forum MATLAB
    Réponses: 11
    Dernier message: 11/06/2009, 12h14
  5. Ouverture d'access durant ma présentation Powert Point
    Par dodie84 dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 19/06/2008, 18h40

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