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 :

Obtenir une surface à partir de coordonées de points éparpillés


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 23
    Points
    23
    Par défaut Obtenir une surface à partir de coordonées de points éparpillés
    Bonsoir,

    J'ai un problème pour représenter des données avec surf.J'ai 3 vecteurs colonnes: x, y qui sont les coordonnées dans le plan et z la valeur associée à chacun de ces couples (x,y). J'arrive à représenter avec plot3 les points (x,y,z) mais je ne vois pas comment les représenter graphiquement avec surf puisqu'il me faut des matrices, sachant que mes coordonnées ne sont pas rangées dans un ordre quelconque et que je ne veux pas désapparier les valeurs z à chaque couple (x,y). Comment donc construire les matrices X et Y et la fonction Z(x,y) à partir des trois vecteurs colonnes [x y z] ? Merci de votre aide

  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,

    A ma connaissance, plot3 et mesh ne font pas le même travail.
    • plot3 trace une courbe en 3D.
    • mesh et surf dessine une surface en 3D.


    donc si x,y et z sont des vecteur, tu trace une courbe en 3D, donc plot3
    MATLAB 7.4 (R2007a) WIN XP SP2
    -------------------------------------

  3. #3
    Expert confirmé
    Avatar de tug83
    Homme Profil pro
    MATLAB Geek !
    Inscrit en
    Juin 2006
    Messages
    1 781
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : MATLAB Geek !
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 781
    Points : 4 039
    Points
    4 039
    Par défaut
    regarde aussi:
    MATLAB 8.2 (R2013b)

    le blog des MATLAB geeks

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 23
    Points
    23
    Par défaut
    Mon problème est que je veux interpoler ces points que j'ai sous forme de trois vecteurs colonnes, mais pour cela une représentation matricielle est nécessaire pour utiliser interp2 ou griddata. De plus, je n'ai pas forcément un échantillonnage régulier des valeurs sur une grille (x,y)...

  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 304
    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 304
    Points : 52 886
    Points
    52 886
    Par défaut
    Je ne suis pas sur de bien comprendre ton problème, mais peut-être que ceci t'aidera : Surface Fitting using gridfit Si ce n'est pas le cas, penses à nous donner un petit exemple de points.
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 23
    Points
    23
    Par défaut
    Merci pour la fonction gridfit j'arrive bien à obtenir une surface à partir de mes 3 vecteurs colonnes, mais les valeurs obtenues aux noeuds de la surface ne sont pas celles qui correspondent à mes valeurs z pour un couple (x,y) donné. La fonction gridfit doit interpoler ce que je ne veut pas pour l'instant car je veux juste faire une réprésentation surfacique comme obtenue avec surf lorsqu'on a une matrice Z(x,y). Voici un exemple ci-dessous des trois vecteurs colonnes que j'ai et dont je veux faire une représentation surfacique dans l'espace: les deux premières sont les coordonnées (x,y) et la troisième l'altitude z pour le couple (x,y) donné. Il n'y a pas d'ordre existant dans l'apparition des coordonnées et des altitudes, il est possible qu'il y ait des doublons, et je ne peux pas utiliser surf puisqu'il me faut une matrice z(x,y)...

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    270	90	24.501
    270	90	24.501
    270	90	24.501
    0	150	-22.453
    0	210	3.2327
    0	180	2.1339
    0	150	1.4613
    0	120	2.8081
    0	90	2.3723
    0	60	3.5087
    0	30	4.4136
    0	0	6.9646
    30	240	0.45565
    30	210	0.65693
    30	180	-0.079168
    30	150	-0.031625
    30	120	0.62429
    30	90	0.38833
    30	60	0.47591
    30	30	1.5318
    30	0	2.9364
    60	240	-0.4368
    60	210	-1.3511
    60	270	0.69229
    60	180	0.034875
    60	150	-0.684
    60	120	-0.66749
    60	90	-0.69409
    60	60	-1.3871
    60	30	-0.0011186
    60	0	0.25243
    90	270	0.32384
    90	240	-1.0326
    90	210	-1.2634
    90	180	-1.2616
    90	150	-0.35766
    90	120	-0.80111
    90	90	-0.82434
    90	60	-0.81077
    90	30	-0.60745
    120	240	-1.5947
    120	150	0.27141
    120	270	-0.041114
    120	210	-1.1861
    120	180	-1.4168
    120	120	-1.1718
    120	60	-1.214
    120	30	-1.8974
    120	0	-1.1954
    120	90	-1.4307
    150	270	-1.2866
    150	240	-0.87817
    150	210	-0.85935
    150	180	-1.3396
    150	90	-1.3558
    150	60	-1.372
    150	30	-0.60255
    150	150	-0.20318
    150	120	-0.43391
    180	270	-2.0024
    180	240	-2.1681
    180	120	-1.4972
    180	210	-1.2371
    180	180	-1.2571
    180	150	-1.4931
    180	90	-1.271
    180	60	-1.7169
    180	30	-1.5249
    210	270	-2.7997
    210	240	-2.3326
    210	210	-1.7307
    210	180	-1.8582
    210	150	-1.8462
    210	120	-1.8226
    210	30	-2.2741
    210	90	-1.6282
    210	60	-1.6795
    240	270	-3.8575
    240	240	-2.9504
    240	30	-1.5369
    240	210	-2.2357
    240	180	-1.781
    240	90	-1.5436
    240	60	-2.0864
    240	150	-1.3281
    240	120	-1.5589
    270	270	20.116
    270	180	24.505
    270	90	24.501
    180	180	-1.2571
    180	150	-1.4931
    180	90	-1.271
    180	60	-1.7169
    180	30	-1.5249
    210	270	-2.7997
    210	240	-2.3326
    210	210	-1.7307
    210	180	-1.8582
    210	150	-1.8462
    210	120	-1.8226
    210	30	-2.2741
    210	90	-1.6282
    210	60	-1.6795
    240	270	-3.8575
    240	240	-2.9504
    240	30	-1.5369
    240	210	-2.2357
    240	180	-1.781
    240	90	-1.5436
    240	60	-2.0864
    240	150	-1.3281
    240	120	-1.5589
    270	270	20.116
    270	180	24.505
    270	90	24.501
    210	30	-2.2741
    210	90	-1.6282
    210	60	-1.6795
    240	270	-3.8575
    240	240	-2.9504
    240	30	-1.5369
    240	210	-2.2357
    240	180	-1.781
    240	90	-1.5436
    240	60	-2.0864
    240	150	-1.3281
    240	120	-1.5589
    270	270	20.116
    270	180	24.505
    270	90	24.501
    270	90	24.501

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    640
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 640
    Points : 776
    Points
    776
    Par défaut
    Voici une méthode (la seule?) pour avoir cette surface.

    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
     
    %Fait un petit scatter3. Ca te donne déjà une idée de ta surface.
    figure
    scatter3(x,y,z);
     
     
    %définition des limites de tes axes: 
     
    xy=0:0.5:270 % tu peux changer le pas...
    [XI,YI] = meshgrid(xy,xy);
    ZI=griddata(x,y,z,XI,YI);
    figure
    mesh(XI,YI,ZI);
    hold on
    scatter3(x,y,z,'ro');
    Regarde la doc de griddata, ca aide pas mal. En fait, ca revient à utiliser la méthode de Dut mais sans passer par le file exchange.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 50
    Points : 23
    Points
    23
    Par défaut
    Merci pour ton aide Merel, j'ai trouvé la même solution juste avant de lire ta réponse . Je marque ce post résolu !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/06/2013, 10h20
  2. Réponses: 7
    Dernier message: 29/03/2009, 06h07
  3. Interpolation d'une surface à partir de 5 points
    Par shrek.romaneo dans le forum Mathématiques
    Réponses: 19
    Dernier message: 22/12/2008, 15h53
  4. Obtenir une chaîne à partir d'une énumération
    Par zidenne dans le forum Langage
    Réponses: 1
    Dernier message: 12/11/2005, 10h39
  5. [Regexp] Obtenir une regexp à partir du texte ?
    Par Alec6 dans le forum Langage
    Réponses: 1
    Dernier message: 12/09/2005, 16h40

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