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 :

Matrice hemisphère tel que z=f(x,y)


Sujet :

MATLAB

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Matrice hemisphère tel que z=f(x,y)
    Bonjour!

    J'essaie de créer une hémisphère sur Matlab, J'ai réussi à en faire une grâce à la fonction Sphere,
    mais il me faudrait une hémisphère définie comme une matrice 400x400
    tel que z = f(x,y);
    Sphere renvoie 3 vecteurs X,Y,Z et je ne sais pas comment faire pour avoir une matrice 2D en partant de ces coordonnées.

    J'ai donc essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    a=sqrt(320000);
    r=0.5;
     
    for i=1:400
        for j=1:400
               z(i,j) = sqrt(r^2 - ((i-200)/a)^2 - ((j-200)/a)^2) ;
        end
    end

    mais ça me donne pas le résultat escompté, l'hémisphère n'est pas complète, elle est bien à 0 dans les quatre coins, mais pas sur tout un pourtour (voir pièce jointe),
    pourriez-vous m'aider, s'il vous plait ?

    Cordialement

    Kkarhh
    Images attachées Images attachées  

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

    La fonction sphere renvoie bel et bien des tableaux 2D...

    Une solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    N = 20;
    [X Y Z] = sphere(2*N);
    X(1:N,:) = [];
    Y(1:N,:) = [];
    Z(1:N,:) = [];
    surf(X,Y,Z)

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Merci de votre réponse

    Le problème, en fait,
    c'est que je dois comparer 2 hémisphères,
    la première est une simple matrice décrivant la hauteur de la demi-sphère Z (400x400).
    Mais avec Sphere, j'obtiens 3 matrices 2D décrivant la sphère,
    et donc je ne peux pas simplement faire la différence entre 2 matrices pour pouvoir tracer la surface de différence entre les deux hémisphères.

    Il me faudrait juste une matrice 2D dont la valeur serait la hauteur de l'hémisphère au point voulu, et c'est là où je bloque...

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 94
    Points : 122
    Points
    122
    Par défaut
    Hey!!

    D'abord tu te sers de la fonction Sphere pour récupérer les coordonnées des points de la sphère:
    Ensuite, tu les ordonnes de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    liste_points = [x(:) y(:) z(:)];
    Avec ça, tu obtiens les (n+1)² points utilisés pour la construction de la sphère.

    Désormais, selon le x et le y voulu, tu obtiens directement le z correspondant sur la ligne où se trouvent x et y.
    J'ai bien répondu à ta question ou je me suis gouré?

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour et merci!

    J'ai essayé, j'ai donc une matrice à 3 colonnes (x, y et z)
    mais je ne vois pas comment lire cette matrice,
    si je veux le point en (0,0) par exemple, si je prends la première ligne, j'ai :

    et les suivantes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    -0,0157466807718579	0	0
    -0,0236188008947980	0	0
    Je n'arrive pas à utiliser ces données...

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mars 2011
    Messages
    94
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 94
    Points : 122
    Points
    122
    Par défaut
    Si tu veux le point en x=0 et y=0, il te suffit de balayer la matrice en recherchant la ligne où l'on trouve ta_matrice(ligne_a_rechercher,1) == x, et
    ta_matrice(ligne_a_rechercher,2) == y. La valeur que tu devras récupérer est z = ta_matrice(ligne_a_rechercher,3);


    Il faut cependant faire attention aux doublons (2 solutions différentes pour un même x et y donné), mais comme tu travailles sur une hémisphère, il ne devrait pas y avoir de problème.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Kkarhh Voir le message
    Il me faudrait juste une matrice 2D dont la valeur serait la hauteur de l'hémisphère au point voulu, et c'est là où je bloque...
    Ce n'est ni plus ni moins que le Z obtenu de la fonction sphere.

    IL faudrait nous en dire un peu plus sur ce que tu cherches à obtenir, si ce Z ne te convient pas.

  8. #8
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Août 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2012
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Effectivement, la variable z semble bien contenir ce que je cherche, mise à part qu'elle est "déroulée", donc en fait, c'est une sorte de nappe, tous les points sur la ligne i=400 sont à 1, etc...
    pour obtenir la sphère, il faudrait fermer la nappe de telle façon que la ligne i=400 ne soit qu'un seul point (le haut de la sphère).
    Je vais essayer de me débrouiller, mais si vous avez une idée comment faire, je suis preneur.

    Encore merci de votre aide,

    Cordialement

    Kkarhh

  9. #9
    Invité
    Invité(e)
    Par défaut
    Sauf que tu sembles oublier que l'on se situe sur un maillage, et que tu cherches à obtenir une forme ronde là dedans.
    Bref, si tu veux supprimer ces valeurs visuellement, tu peux les mettre à NaN.

Discussions similaires

  1. Modifier un dossier tels que
    Par zizo89 dans le forum Delphi
    Réponses: 6
    Dernier message: 26/05/2007, 09h09
  2. Comment je peux modifier mon project tels que..
    Par zizo89 dans le forum Delphi
    Réponses: 3
    Dernier message: 07/05/2007, 13h03
  3. Réponses: 28
    Dernier message: 25/07/2006, 14h59
  4. Algorithme pour trouver i entier tel que n + i² est un carré
    Par duchere dans le forum Algorithmes et structures de données
    Réponses: 16
    Dernier message: 22/04/2006, 08h24
  5. Réponses: 25
    Dernier message: 08/03/2006, 17h03

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