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 :

La courbe ne veut pas se dessiner


Sujet :

MATLAB

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut La courbe ne veut pas se dessiner
    Bonjour,

    Je suis encore un débutant à Matlab et je n'arrive pas à comprendre pourquoi dans mon dessin, je n'obtiens rien alors que je devrais avoir deux courbes.

    Voici mon code (je m'excuse de la longueur de l'expression de u) :

    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
    R = 4;
    k = 1;
    n = 4;
    a = input ('Entrez la position de la sphère selon axe des x : ');
    b = input ('Entrez la position de la sphère selon axe des y : ');
    c = input ('Entrez la position de la sphère selon axe des z : ');
    u = [ ];
    for (i = 1:length(v))
        u(i) = (-(2*a*(cos(v(i))) + 2*b*(sin(v(i))) + 2*k*c*(cos(n*v(i)))) - sqrt ((2*a*(cos(v(i))) + 2*b*(sin(v(i))) + 2*k*c*(cos(n*v(i))))^2 - 4*(1 + (k*(cos(n*v(i))))^2)*(a^2 + b^2 + c^2 - R^2))) / (2*(1 + (k*(cos(n*v(i))))^2));
    end
    x = u(i).*(cos(v(i)));
    y = u(i).*(sin(v(i)));
    z = k*u(i).*(cos(n*v(i)));
    plot3 (x,y,z)
    hold on
     
    for(i = 1:length(v))
        u(i) = (-(2*a*(cos(v(i))) + 2*b*(sin(v(i))) + 2*k*c*(cos(n*v(i)))) + sqrt ((2*a*(cos(v(i))) + 2*b*(sin(v(i))) + 2*k*c*(cos(n*v(i))))^2 - 4*(1 + (k*(cos(n*v(i))))^2)*(a^2 + b^2 + c^2 - R^2))) / (2*(1 + (k*(cos(n*v(i))))^2));
    end
    x = u(i).*(cos(v(i)));
    y = u(i).*(sin(v(i)));
    z = k*u(i).*(cos(n*v(i)));
    plot3 (x,y,z)

    Ai-je fait une grossière erreur dans mes plot ? ou bien n'ai-je pas bien compris l'utilisation du for ? ou ...
    J'ai également une petite question sur la division. Je n'arrive pas à savoir laquelle je dois mettre.

    Je vous remercie d'avance de vos éclaircissements car je souhaite savoir bien utiliser Matlab .

    Yawgmoth

  2. #2
    Membre éprouvé
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Points : 1 205
    Points
    1 205
    Par défaut
    Bonjour,
    les x,y et z dans la fonction plot sont des scalaires:
    x = u(i).*(cos(v(i)));
    y = u(i).*(sin(v(i)));
    z = k*u(i).*(cos(n*v(i)));
    en fait, il faut enlever le "i", donc c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    x = u.*(cos(v));
    y = u.*(sin(v));
    z = k*u.*(cos(n*v));
    PS: il faut mieux d'éviter les boucles, tu peux faire simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    u = (-(2*a*(cos(v)) + 2*b*(sin(v)) + 2*k*c*(cos(n*v))) - ...............

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup pour les (i) et le conseil.
    Mais si je ne mets pas de boucle for, comment je vais faire pour obtenir une courbe ?
    J'ai fait les changements mais il ne me dessine toujours rien du tout, aurais-je mal compris ce que tu m'as suggéré ?

    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
    R = 4;
    k = 1;
    n = 4;
    a = input ('Entrez la position de la sphère selon axe des x : ');
    b = input ('Entrez la position de la sphère selon axe des y : ');
    c = input ('Entrez la position de la sphère selon axe des z : ');
    v = [ ];
     
    u = (-(2*a*(cos(v)) + 2*b*(sin(v)) + 2*k*c*(cos(n*v))) - sqrt ((2*a*(cos(v)) + 2*b*(sin(v)) + 2*k*c*(cos(n*v)))^2 - 4*(1 + (k*(cos(n*v)))^2)*(a^2 + b^2 + c^2 - R^2))) / (2*(1 + (k*(cos(n*v)))^2));
     
    x = u.*(cos(v));
    y = u.*(sin(v));
    z = k*u.*(cos(n*v));
    plot3 (x,y,z)
    hold on
     
    u = (-(2*a*(cos(v)) + 2*b*(sin(v)) + 2*k*c*(cos(n*v))) + sqrt ((2*a*(cos(v)) + 2*b*(sin(v)) + 2*k*c*(cos(n*v)))^2 - 4*(1 + (k*(cos(n*v)))^2)*(a^2 + b^2 + c^2 - R^2))) / (2*(1 + (k*(cos(n*v)))^2));
     
    x = u.*(cos(v));
    y = u.*(sin(v));
    z = k*u.*(cos(n*v));
    plot3 (x,y,z)

  4. #4
    Membre éprouvé
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Points : 1 205
    Points
    1 205
    Par défaut
    Oui, le probleme est là:
    et aussi n'oublie pas de mettre "." avant les les puissance "^" et les divisions "/" où il y a des vecteurs.

  5. #5
    Membre actif Avatar de LordPeterPan2
    Inscrit en
    Février 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 247
    Points : 239
    Points
    239
    Par défaut
    C'est normal comme v est la matrice vide cos(v) est également la matrice vide, en gros tout tes calculs sont égaux à [] donc focément ploter le vide c'est invisible

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Mais je dois mettre quoi dans ces crochets alors ?

  7. #7
    Membre éprouvé
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Points : 1 205
    Points
    1 205
    Par défaut
    Que représentent v,u,k,n,.....?? et que veux-tu faire exactement ??

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Hum oui j'avoue que ma question n'avait pas beaucoup de contenu :s
    Je vais vous exposer tout ce que je dois faire (ce qui n'est pas grand chose dans l'absolu).
    Je dois dessiner une surface qui n'est pas de rotation que j'aurai choisie au préalable ainsi qu'une sphère sur le même dessin. J'ai jeté mon dévolu sur le cône sinusoïdal (pour savoir ce que représentent le k, le n et autres, voir ce site).
    Ca, je l'ai fait avec ce code-ci :

    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
    a = input ('Position de la sphère selon axe des x : ');
    b = input ('Position de la sphère selon axe des y : ');
    c = input ('Position de la sphère selon axe des z : ');
    n = input ('Caractérisation du cône sinusoïdal : ');
    k = 1;
    [u,v] = meshgrid(-5:0.1:5);
    R = 4;
    X = u.*(cos (v));
    Y = u.*(sin(v));
    Z = k*u.*(cos(n*v));
    surf(X,Y,Z)
    hold on
    x = R.*(cos (u)).*(cos(v)) + a;
    y = R.*(sin (u)).*(cos(v)) + b;
    z = R.*(sin (v)) + c;
    surf(x,y,z)
    alpha (.5)

    Ceci fait, on doit déterminer l'intersection entre la surface choisie la sphère. Vu que ce serait inutile de la représenter sur le même dessin car on ne verrait rien, j'ai décidé de faire un autre encodage qui ouvrirait une nouvelle fenêtre dessinant juste l'intersection c'est-à-dire deux courbes.

    J'ai donc calculé l'équation de ces deux courbes en fonction de u (car en fonction de v ce serait trop difficile) et j'ai tapé le code suivant :

    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
    R = 4;
    k = 1;
    n = 4;
    a = input ('Entrez la position de la sphère selon axe des x : ');
    b = input ('Entrez la position de la sphère selon axe des y : ');
    c = input ('Entrez la position de la sphère selon axe des z : ');
    v = [ ];
    for (i = 1:length(v))
    u(i) = (-(2*a*(cos(v(i))) + 2*b*(sin(v(i))) + 2*k*c*(cos(n*v(i)))) - sqrt ((2*a*(cos(v(i))) + 2*b*(sin(v(i))) + 2*k*c*(cos(n*v(i)))).^2 - 4*(1 + (k*(cos(n*v(i)))).^2)*(a^2 + b^2 + c^2 - R.^2))) ./ (2*(1 + (k*(cos(n*v(i)))).^2));
    end
    x = u.*(cos(v));
    y = u.*(sin(v));
    z = k*u.*(cos(n*v));
    plot3 (x,y,z)
    hold on
    for (i = 1:length(v))
    u(i) = (-(2*a*(cos(v(i))) + 2*b*(sin(v(i))) + 2*k*c*(cos(n*v(i)))) + sqrt ((2*a*(cos(v(i))) + 2*b*(sin(v(i))) + 2*k*c*(cos(n*v(i)))).^2 - 4*(1 + (k*(cos(n*v(i)))).^2)*(a^2 + b^2 + c^2 - R^2))) ./ (2*(1 + (k*(cos(n*v(i)))).^2));
    end
    x = u.*(cos(v));
    y = u.*(sin(v));
    z = k*u.*(cos(n*v));
    plot3 (x,y,z, 'R')

    Dans ce code, les deux équations en u(i) sont celles des deux courbes qui représentent l'intersection entre la surface et la sphère.
    Les deux séries d'équations paramétriques (qui sont identiques) sont celles du cône sinusoïdal.
    En supposant que je mette quelque chose entre les crochets du v = [ ], je ne comprends pas ce qui ne va pas .



    Je m'excuse de la longueur du post.

    Yawgmoth

  9. #9
    Membre éprouvé
    Avatar de rostomus
    Homme Profil pro
    Doctorant électronique et traitement du signal
    Inscrit en
    Décembre 2006
    Messages
    791
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant électronique et traitement du signal

    Informations forums :
    Inscription : Décembre 2006
    Messages : 791
    Points : 1 205
    Points
    1 205
    Par défaut
    Voila, normalement c'est ça, non ??
    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
    R = 4;
    k = 1;
    n = 4;
    a = input ('Entrez la position de la sphère selon axe des x : ');
    b = input ('Entrez la position de la sphère selon axe des y : ');
    c = input ('Entrez la position de la sphère selon axe des z : ');
    v =-5:.1:5;
     
    u= (-(2*a*(cos(v)) + 2*b*(sin(v)) + 2*k*c*(cos(n*v))) - sqrt ((2*a*(cos(v)) + 2*b*(sin(v)) + 2*k*c*(cos(n*v))).^2 - 4*(1 + (k*(cos(n*v))).^2)*(a^2 + b^2 + c^2 - R.^2))) ./ (2*(1 + (k*(cos(n*v))).^2));
     
    x = u.*(cos(v));
    y = u.*(sin(v));
    z = k*u.*(cos(n*v));
    plot3 (x,y,z)
    hold on
     
    u= (-(2*a*(cos(v)) + 2*b*(sin(v)) + 2*k*c*(cos(n*v))) + sqrt ((2*a*(cos(v)) + 2*b*(sin(v)) + 2*k*c*(cos(n*v))).^2 - 4*(1 + (k*(cos(n*v))).^2)*(a^2 + b^2 + c^2 - R^2))) ./ (2*(1 + (k*(cos(n*v))).^2));
     
    x = u.*(cos(v));
    y = u.*(sin(v));
    z = k*u.*(cos(n*v));
    plot3 (x,y,z, 'R')

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Je ne sais comment te remercier tellement ces courbes sont belles à mes yeux
    Je vais quand même essayer.

    Je te remercie infiniment de l'aide que tu m'as apportée. De plus, grâce aux posts successifs j'ai quand même compris le pourquoi de la chose ^^.

    Encore merci,

    Yawgmoth

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

Discussions similaires

  1. Application qui ne veut pas dessiner
    Par Invité dans le forum Qt
    Réponses: 10
    Dernier message: 11/04/2010, 12h02
  2. Ma fenêtre OpenGL ne veut pas rester ouverte
    Par Mynautor dans le forum OpenGL
    Réponses: 3
    Dernier message: 03/02/2005, 13h25
  3. [HARDWARE] le lecteur CD ne veut pas s'ejecter
    Par Petogaz dans le forum Périphériques
    Réponses: 4
    Dernier message: 15/12/2004, 10h21
  4. java web start qui veut pas se lancer
    Par calvin dans le forum JWS
    Réponses: 4
    Dernier message: 30/06/2004, 11h42
  5. [Kylix] Un programme compilé ne veut pas se lancer
    Par LightBeam dans le forum EDI
    Réponses: 1
    Dernier message: 05/08/2003, 10h15

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