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 :

Représenter des données en 3D


Sujet :

MATLAB

  1. #1
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Par défaut Représenter des données en 3D
    Bonjour,

    Le problème que j'ai paraît assez simple mais je suis bloqué.

    J'ai des données de pression pour n points sur une surface plane.
    J'ai une matrice avec n lignes et 3 colonnes. Chaque ligne contient dans l'ordre : abscisse, ordonnée, et valeur de la pression au point correspondant.

    Je voudrais représenter la pression sur la surface à l'aide d'un plot de type surf(). Je crée donc un maillage 2D à partir des deux premières colonnes grâce à meshgrid().

    Comment faire ensuite pour mettre les pressions sous forme de matrice puis les représenter ?

    Merci d'avance pour votre aide.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Octobre 2007
    Messages : 769
    Par défaut
    Regardes du côté de griddata...

    J'ai rencontré ce problème et voici une de mes fonctions qui permet de passer de 3 coordonnées à une représentation avec maillage...

    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
    function apr = fa_pr(px,pz,visu)
     
    % px : position horizontal
    % pz : position vertical
    % apr : activation position rétinienne
    % visu : pour visualiser la répartition et la sortie des units
     
    %% initialisation
        units = 253;
        apr   = zeros(units,1);
        xz    = zeros(units,2);
        m     = 1;
        sigma = 20;
     
    %% coordonnées x et z
        x    = -90:10:90;
        z    = x;
     
        for t=1:length(x)
            for y=1:length(z)
                if sqrt((x(t))^2+(z(y))^2)<=max(x)
                    xz(m,:)= [x(t),z(y)];
                    m      = m+1;
                end
            end
        end
     
    %% calcul fonction d'activation
        for s=1:length(xz)
            apr(s) = exp(-((px-xz(s,1))^2+(pz-xz(s,2))^2)/(2*sigma^2));
        end
     
    %% visualisation
        if visu==1
            %% test sur les coordonnées xz
            XCentre = 0;
            YCentre = 0;
            Rayon = 90;
            VTheta = 0:pi/180:360*pi/180;
            XCercle = XCentre + Rayon * cos(VTheta);
            YCercle = YCentre + Rayon * sin(VTheta);
            figure
            hold on
            plot(xz(:,1),xz(:,2),'x')
            plot(XCercle, YCercle)
            %% fin test
     
            %% test de représentation 3D
            [xi,yi] = meshgrid(linspace(min(xz(:,1)),max(xz(:,1)),80),linspace(min(xz(:,2)),max(xz(:,2)),80));
            apri = griddata(xz(:,1),xz(:,2),apr,xi,yi);
     
            figure
            plot3(xz(:,1),xz(:,2),apr,'r*')
            hold on
            surf(xi,yi,apri)
            colorbar;
            plot3(px,pz,1,'bo');
            xlabel('x - horizontal')
            ylabel('z - vertical')
            zlabel('activity')
        end
    end
    Chrisotphe

  3. #3
    Membre du Club
    Inscrit en
    Mai 2009
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 6
    Par défaut
    Merci beaucoup !

    La fonction griddata est effectivement ce dont j'avais besoin ; elle m'évite de me casser la tête sur l'interpolation des données puisqu'elle le fait automatiquement.

    Encore 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 316
    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 316
    Par défaut
    Juste au passage, je rappelle que GRIDDATA n'est nécessaire que si les données ne sont pas sur une grille rectangulaire régulière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    X = [1 1 4 ; 1 2 5 ; 2 1 -3 ; 2 2 0]
     
    x = unique(X(:,1));
    y = unique(X(:,2));
    z = reshape(X(:,3),2,[]));
     
    figure
    surf(x,y,z)

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

Discussions similaires

  1. Comment représenter des données static et les mapper
    Par 0coco0 dans le forum Hibernate
    Réponses: 2
    Dernier message: 27/08/2008, 12h18
  2. [PDO] Représentation des données sqlite sous forme de tableau HTML
    Par boulamite dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/06/2008, 19h45
  3. [Histogramme] Représenter des données logarithmique
    Par Hobbes69 dans le forum MATLAB
    Réponses: 2
    Dernier message: 17/10/2007, 12h06
  4. Réponses: 7
    Dernier message: 02/11/2006, 03h15
  5. reprsentation des données
    Par zidenne dans le forum Bases de données
    Réponses: 1
    Dernier message: 10/11/2005, 09h24

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