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 :

Tracer une surface à partir de listes de valeurs


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 20
    Par défaut Tracer une surface à partir de listes de valeurs
    Je dispose de trois vecteurs : a, b, c.
    a contient les abscisses.
    b contient les ordonnées.
    c contient la valeur d'une fonction au points de coordonnées (a,b).

    Je souhaite tracer la fonction qui va de R² dans R : c = f(a,b)

    Par exemple (exemple simple):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    a = [ 0 1 2 0 1 2 0 1 2 ] ;
    b = [ 0 0 0 1 1 1 2 2 2 ] ;
    c = [ 0 1 2 1 2 3 2 3 4 ] ;
    Permettrait de représenter c = f(a,b) = a+b

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    Tu veux dire une surface plutôt qu'une courbe, non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    a = [ 0 1 2 0 1 2 0 1 2 ] ;
    b = [ 0 0 0 1 1 1 2 2 2 ] ;
    c = [ 0 1 2 1 2 3 2 3 4 ] ;
     
    x = reshape(a,3,[]);
    y = reshape(b,3,[]);
    z = reshape(c,3,[]);
     
    figure
    surf(x,y,z)
    axis equal

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 20
    Par défaut
    Merci, c'est exactement ce que je voulais.

    PS : J'ai corrigé le titre, il s'agissait bien de surface.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 20
    Par défaut
    Je pensais que c'était bon au début, mais l'exemple que je propose est un peu trop simple... j'ai donné neuf points, donc divisible par 3 ; et les points sont dans un certain ordre "agréable".
    En réalité, c'est un peu plus bordélique...

    Comment ferais-tu pour l'exemple suivant, avec des listes de 11 éléments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    a = [ 0 1 2 0 1 2 0 1 2 .5 1.2] ;
    b = [ 0 0 0 1 1 1 2 2 2 .4 1.9] ;
    c = [ 0 1 2 1 2 3 2 3 4 .9 3.1] ;
    Je précise que dans mon cas, j'ai quelques dizaines de milliers de points...!

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    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 317
    Par défaut
    GRIDDATA est ton ami
    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
    a = [ 0 1 2 0 1 2 0 1 2 .5 1.2] ;
    b = [ 0 0 0 1 1 1 2 2 2 .4 1.9] ;
    c = [ 0 1 2 1 2 3 2 3 4 .9 3.1] ;
     
     
    [ai,bi] = meshgrid(linspace(min(a),max(a),10),linspace(min(b),max(b),10));
     
    ci = griddata(a,b,c,ai,bi);
     
    figure
    colormap(gray)
    surf(ai,bi,ci);
    hold on
    plot3(a,b,c,'r*')
     
    axis equal vis3d
    Fais une recherche sur ce forum, ce problème a déjà été traité plusieurs fois...

    Citation Envoyé par Bebs7 Voir le message
    Je précise que dans mon cas, j'ai quelques dizaines de milliers de points...!
    Afin d'alléger le travail, tu peux te demander si tous ces points sont représentatifs ou si certains ne pourraient pas être mis de coté

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 20
    Par défaut
    Merci, cette fois c'est définitivement correct.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 29/09/2014, 23h08
  2. [Débutant] Tracer une fonction à partir de valeurs données dans l'interface
    Par scraven dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 23/04/2008, 07h53
  3. Réponses: 2
    Dernier message: 28/04/2007, 19h35
  4. Tracer une surface en cylindriques
    Par Kingi dans le forum MATLAB
    Réponses: 2
    Dernier message: 10/08/2006, 09h49
  5. [VB5] Tracer une surface (3D) avec un MSChart ?
    Par winnipeg dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 27/07/2006, 10h04

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