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 :

intersection d'une courbe avec droites


Sujet :

MATLAB

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 18
    Points : 8
    Points
    8
    Par défaut intersection d'une courbe avec droites
    bonjour,
    J’ai une courbe qui se dessine point par point suite à un programme, cette courbe doit être limiter par deux droites y=-ax+b et y = -ax –b ( a et b sont demandés), comment arrêter ce programme dés que le deuxième point franchie une des deux droites ( cad j’accepte un première passage mais pas le deuxième).
    merci

  2. #2
    Membre confirmé
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Points : 639
    Points
    639
    Par défaut
    Ce que tu appelles un programme est une fonction matlab ?
    Si oui, il te suffit de combiner une condition "if" et break.
    Par exemple, pour une boucle qui devrait aller jusqu'à 100 mais que j'arrête au bout de 50 itérations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i=1:100
        disp(i);
        if i>=50
            break
        end
    end

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    merci thecrazydonut , mais je vois pas comment introduire les deux droites dans ton code , selon l'image jointe ma courbe se dessine dans la zone claire et si le deuxième point dépasse les deux droites qui limitent cette zone , le programme doit être stopper.
    Images attachées Images attachées  

  4. #4
    Membre confirmé
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Points : 639
    Points
    639
    Par défaut
    Je te donnais la démarche à suivre, pas la réponse toute faite. Mais dans mon immense mansuétude , je t'ai écrit un code en 2D.

    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
    clear
    clc
    close all
     
    x=1:100;
     
    % Définition des droites limites
    up_lim=-x+100;
    low_lim=-x+80;
     
    % tracé des droites limites
    plot(x,up_lim);
    hold on
    plot(x,low_lim);
     
    % Boucle pour générer des données qui rentreront ou non dans l'intervalle
    % défini par les deux droites
    for i=1:100
        % données 'presque' aléatoires.
        y=-i/1.2+90+(rand(1)-0.5)*10;
        x=i;
        % tracé des points à chaque pas de temps
        plot(x,y,'LineStyle','none','Marker','+')
        pause(0.1)
        % condition pour arrêter le programme si jamais la donnée sort de
        % l'intervalle
        if y>up_lim(i) || y<low_lim(i)
            break
        end
    end

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Encore merci thecrazydonut , j’ai rejoué ton code ça a donné un résultat satisfaisant , mais le programme arrête au premier passage et non au deuxième passage, j’ai essayé d’introduire une boucle mais j’ai pas pu y arrivé .

  6. #6
    Membre confirmé
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Points : 639
    Points
    639
    Par défaut
    Une deuxième fois que ta courbe sort de l'intervalle défini par tes 2 droites ? Tu peux par exemple rajouter une condition pour voir si ça s'est déjà produit. Tu peux initialiser une variable avant ta boucle qui change ensuite si ta courbe sort une première fois de l'intervalle. Ensuite tu rajoutes un if contenant le break pour vérifier la valeur de ta variable.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Peux tu être plus explicite sur le même code , ça fait plus de 15 ans que je n’ai pas touché matlab et les algorithmes

  8. #8
    Membre confirmé
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Points : 639
    Points
    639
    Par défaut
    Je cite un petit extrait de la charte :
    Vous cherchez un code tout fait ?
    Nous ne fournissons que très rarement du code tout fait sur nos forums.
    Vous pourrez trouver quelques codes dans notre forum Contribuez, l'interface Téléchargez et plus encore sur le File EXchange (FEX)
    Vous êtes étudiant et vous avez un exercice à résoudre ?
    Vous êtes bienvenu ici pour apprendre et vous former , mais en aucun cas pour que nous fassions le travail à votre place .

    Nous pouvons tout à fait vous aider ponctuellement sur vos exercices ou vous aider à finaliser vos travaux en cours, selon des limites que nous jugeons tolérables.

    En contrepartie, nous exigeons de votre part que vous montriez votre investissement et vos efforts dans la résolution de vos problèmes. Nous vous demandons donc de fournir impérativement un début de solution en code MATLAB.
    Essaye, propose nous un code (c'est 3 lignes supplémentaires) et nous le corrigerons si besoin !

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Je suis pas un étudiant, c’est juste un petit algorithme que je veux le faire afin de simplifier un travail ardu .J’ai reçue ta réponse y a plus d’une semaine, j’ai essayé d’introduire une boucle mais j’ai pas arrivé c’est pourcela j’ai encore demandé de l’aide. Si je suis ici c’est pour apprendre aussi ,d’ailleurs j’ai appris avec toi les opérateurs logiques court-circuités que je ne connaissant pas avant.
    je vais encore essayer.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    je viens d'essayer ça mais ça marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    k0=0
    for i=1:100
        % données 'presque' aléatoires.
        y=-i/1.2+90+(rand(1)-0.5)*10;
        x=i;
        % tracé des points à chaque pas de temps
        plot(x,y,'LineStyle','none','Marker','.')
        pause(0.2)
        % condition pour arrêter le programme 
        if y>up_lim(i) || y<low_lim(i)
        else k=k0+1
        if k=2
            break
    end

  11. #11
    Membre confirmé
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Points : 639
    Points
    639
    Par défaut
    Oui c'est ça l'idée !
    J'ai besoin de comprendre quelque chose avant de pouvoir t'aider. À quel moment le programme doit s'arrêter ?
    1) après que ta courbe soit sortie une fois qu'elle rerentre dans ton intervalle et qu'elle sorte à nouveau ?
    2) après que ta courbe soit sortie une fois et qu'elle rerentre ?

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    oui avec ça que j’ai essayé mais ça n’a pas donné de résultat, mettre un compteur dés qu’il ya un deuxième passage il ‘s’arrête, pour le moment je choisi k=2 .
    Le programme s’arrête:
    après que la courbe soit sortie une fois qu'elle rerentre dans ton intervalle (entre les deux droites) et qu'elle resorte à nouveau ( donc une deuxième violation).

  13. #13
    Membre confirmé
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Points : 639
    Points
    639
    Par défaut
    Ça, ça devrait fonctionner.
    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
    clear
    clc
    close all
     
    x=1:100;
     
    % Définition des droites limites
    up_lim=-x+100;
    low_lim=-x+80;
     
    % tracé des droites limites
    plot(x,up_lim);
    hold on
    plot(x,low_lim);
     
    count_out=0; % compteur out
    count_in=0; % compteur in 
    % Boucle pour générer des données qui rentreront ou non dans l'intervalle
    % défini par les deux droites
    for i=1:100
        % données 'presque' aléatoires.
        y=-i/1.2+90+(rand-0.5)*10;
        x=i;
        % tracé des points à chaque pas de temps
        plot(x,y,'LineStyle','none','Marker','+')
        pause(0.1)
        % condition pour arrêter le programme si jamais la donnée sort de
        % l'intervalle
        if y>up_lim(i) || y<low_lim(i) % regarde pour une première sortie
            count_out=1;
        end
        if count_out==1 && y<up_lim(i) && y>low_lim(i) % regarde la réentrée
            count_in=1;
        end
        if count_out==1 && count_in==1 && (y>up_lim(i) || y<low_lim(i)) % arrêt programme
            break
        end
    end
    Il est possible de le faire plus élégamment avec des elseif. Les grands manitous du forum corrigeront s'ils estiment la méthode trop laide

  14. #14
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    merci pour ton aide , ta proposition fonctionne bien , mais je voie que tu n’as pas utilisé un compteur de violation comme j’ai essayé de le faire, peux tu me signaler l’erreur dans mon compteur ?

  15. #15
    Membre confirmé
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Points : 639
    Points
    639
    Par défaut
    Citation Envoyé par max3232 Voir le message
    je voie que tu n’as pas utilisé un compteur de violation comme j’ai essayé de le faire
    Si si j'en ai bien utilisé, même 2 ! count_out et count_in qui passent de 0 à 1 lorsqu'il rencontrent les conditions spécifiées (lorsqu'il sort pour la première fois et lorsqu'il rerentre respectivement).

    Je ne fais pas d'incrément count_out=count_out+1 parce que ça n'a pas d'importance dans ton énoncé. Si jamais lorsque ta courbe sort de l'espace défini par les deux droites, on s'en fiche de savoir combien de points sont en dehors, on veut juste savoir que la courbe est passé une fois en dehors.

    Dans ce que tu as écrit, ton code s'arrêterait à partir du moment où il y a deux point tracés en dehors des limites (outre le fait que ton code ne peut pas tourner, il manque des "end". Chaque if prend son "end")

  16. #16
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par thecrazydonut Voir le message
    Dans ce que tu as écrit, ton code s'arrêterait à partir du moment où il y a deux point tracés en dehors des limites (outre le fait que ton code ne peut pas tourner, il manque des "end". Chaque if prend son "end")
    Dans le cas ou le veux que mon code s'arrêterait à partir du moment où il y a deux point tracés en dehors des limites, j’ai essayer d’utiliser deux boucles , la 1ere pour faire tourner le compteur et le second pour arrêter mais ça marche toujours pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     k0=0;
         if y>up_lim(i) || y<low_lim(i)
             k=k0+1
         else
             if k=2
             end
        end

  17. #17
    Membre confirmé
    Homme Profil pro
    Éternel universitaire
    Inscrit en
    Avril 2012
    Messages
    421
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Éternel universitaire

    Informations forums :
    Inscription : Avril 2012
    Messages : 421
    Points : 639
    Points
    639
    Par défaut
    Citation Envoyé par max3232 Voir le message
    Dans le cas ou le veux que mon code s'arrêterait à partir du moment où il y a deux point tracés en dehors des limites, j’ai essayer d’utiliser deux boucles , la 1ere pour faire tourner le compteur et le second pour arrêter mais ça marche toujours pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     k0=0;
         if y>up_lim(i) || y<low_lim(i)
             k=k0+1
         else
             if k=2
             end
        end
    C'est presque ça : attention, ta valeur k ne sera jamais supérieure à 1 puisque tu fais 0 +1 dans tous les cas. Pour vérifier les égalité tu dois utiliser == et non pas = qui sert à attribuer une valeur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    k=0;
    for blablablabla
       if y>up_lim(i) || y<low_lim(i)
            k=k+1;
            if k==2
                  break
            end
        end
    end

  18. #18
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 18
    Points : 8
    Points
    8
    Par défaut
    Merci hecrazydonut

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

Discussions similaires

  1. comment tracer une courbe avec gtk
    Par killer_instinct dans le forum GTK+ avec C & C++
    Réponses: 5
    Dernier message: 01/10/2007, 22h53
  2. tracer une courbe avec GtkCurve ou autre
    Par coax81 dans le forum GTK+ avec C & C++
    Réponses: 11
    Dernier message: 07/06/2007, 15h47
  3. Tracer une courbe avec GTK+
    Par insa59 dans le forum GTK+ avec C & C++
    Réponses: 11
    Dernier message: 16/03/2007, 15h29
  4. dessiner une courbe avec OleExcel
    Par blondelle dans le forum C++Builder
    Réponses: 9
    Dernier message: 28/09/2006, 22h05
  5. Tracer une courbe avec 2 tableau de points
    Par babarpapa dans le forum 2D
    Réponses: 3
    Dernier message: 19/04/2006, 15h24

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