Matlab surf/plot
Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
-
fatal_error
- Membre Légendaire
- Messages: 6610
- Enregistré le: 22 Nov 2007, 12:00
-
par fatal_error » 13 Mai 2009, 21:34
Bonjour à tous,
une question bidon mais qui m'ôterait certainement pas mal de temps perdu ...
J'ai une liste de points 3D de la forme :
x y z
1 2 3
3 2 4
1 2 4
Je voudrais tracer un surf(z) ( altitude en fonction de la position, et coloriage des facettes). En tenant compte des cordonnées x et y. Le problème, c'est que la fonction surf n'est pas définie pour trois vecteurs.
Il y a bien plot3 qui marche, mais les faces ne sont ni créées, ni coloriées.
J'ai aussi regardé du coté de mesh qui ressemble tres fortement a surf. Du coté de meshgrid, ca n'a pas trop l'air de coller non plus.
Une piste bancale qu'il semble tout de même y avoir :
bidouiller mon vecteur x pour en faire une matrice, de même pour mon vecteur y. Et encore pareil pour z. De cette manière, j'obtiens alors qqch que je peux envoyer a surf/mesh.
Est-ce qu'il y a une fonction toute faite? Ou un enchainement de fonctions toute faites?
Merci d'avance :happy2:
la vie est une fête

-
fatal_error
- Membre Légendaire
- Messages: 6610
- Enregistré le: 22 Nov 2007, 12:00
-
par fatal_error » 13 Mai 2009, 23:14
Bon, ben a défaut d'avoir plus propre, on peut y aller a coup de reshape :
supposant que le nombre delements soit divisible par m*n, on a :
- Code: Tout sélectionner
A=reshape(x,m,n);
B=reshape(y,m,n);
C=reshape(z,m,n);
surf(A,B,C);
la vie est une fête

-
noha
- Messages: 1
- Enregistré le: 14 Mai 2009, 13:10
-
par noha » 14 Mai 2009, 13:12
bonjour
est ce que vous avez trouvé une solution?
merci d'avance
-
fatal_error
- Membre Légendaire
- Messages: 6610
- Enregistré le: 22 Nov 2007, 12:00
-
par fatal_error » 14 Mai 2009, 18:05
salut,
ben avec les reshape.
Sinon une autre maniere, c'est d'utiliser patch.
En gros, tu definis des facettes (définit par des points). Pour chaque facette, tu peux choisir une couleur. (ex typique : une certaine couleur pour un intervalle d'altitudes).
la vie est une fête

-
kazeriahm
- Membre Irrationnel
- Messages: 1608
- Enregistré le: 04 Juin 2006, 09:49
-
par kazeriahm » 14 Mai 2009, 23:01
j'ai pas bien compris ce que tu attends mais si tu veux tracer z=f(x,y) alors
[x y]=meshgrid(l'intervalle en x, l'intervalle en y);
z=f(x,y);
surf(x,y,z);
marche très bien
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 48 invités