2010-05-17 4 views
7

Je sais que je peux créer une parcelle de surface 3D en Matlab en faisant:Comment faire un tracé de surf dans MATLAB avec des données espacées irrégulièrement?

x = linspace(1,10,100); 
y = linspace(10,20,100); 

[X Y] = meshgrid(x,y); 

Z = X * Y; 

surf(X,Y,Z); 

Mais cela exige que tous les noeuds de la carte de hauteur ligne générée vers le haut. J'ai un ensemble de données qui a des points arbitraires (x, y) et une hauteur (z). Existe-t-il un moyen simple de tracer un graphique qui va générer une surface entre les points d'une manière similaire à surf?

Répondre

9

appologies, j'ai réussi à répondre à ma propre question après une chasse:

Vous pouvez utiliser la fonction trisurf:

tri = delaunay(x,y); 
trisurf(tri,x,y,z); 

Si vous avez des données denses que vous aurez envie de faire shading interp (ou une autre valeur , vérifiez doc shading) de sorte que vous n'obtenez pas un blob noir en raison de la grille.

+2

En fait, la meilleure façon d'éviter le BLOB noir est de définir la propriété 'edgeColor' sur' none'. – Jonas

3

Il semble que vous ayez trouvé votre réponse en utilisant DELAUNAY et TRISURF pour générer et tracer une surface triangulée. En alternative, vous pouvez également adapter une grille régulièrement espacée à vos points non uniformément espacés afin de générer une surface qui peut être tracée avec la commande SURF. Je discute comment cela peut être fait en utilisant le TriScatteredInterp class (ou la fonction obsolète GRIDDATA) dans my answer à this other question on SO.

Questions connexes