2016-05-12 1 views
0

Une forme de maillage triangle 3D est représentée par des sommets et des faces de triangle. Par exemple, shape dans matlab qui a shape.X, shape.Y, shape.Z(the vertices) and shape.TRIV(the triangle faces) peut être vu comme une forme de triangle triangulaire 3D.Comment tracer une forme de maillage triangulaire 3D avec une palette de couleurs spécifique dans MATLAB?

Ma question est comment visualiser une telle forme dans MATLAB avec une palette de couleurs spécifique.

(par exemple, la palette de couleurs peut être défini comme un vecteur de distance de length(shape.X) dont les éléments sont distances euclidiennes de tous les sommets à un seul sommet M, dans cette situation, les couleurs froides relatives à la les petites distances, et les couleurs plus chaudes liées aux distances plus grandes.)

Répondre

-1

Basé sur @ réponse de Suever, j'ajouter un code supplémentaire pour faire le tracé de forme plus lisse et ajouter une lumière de la caméra. Par ailleurs, si la forme est un nuage de points sans visages, il est préférable de choisir scatter3 au lieu de plot3.

vertices = cat(2, shape.X(:), shape.Y(:), shape.Z(:)); 

%// Compute distance of each vertex from the origin 
distances = sqrt(sum(bsxfun(@minus, vertices, [0 0 0]).^2, 2)); 

%// Create the patch object 
h = patch('Vertices', vertices, 'Faces', shape.TRIV); 

%// Set the vertex colors and use interpolation to shade the faces 
set(h, 'FaceColor', 'interp', 'FaceVertexCData', distances,'EdgeColor', 'none'); 
%or use shading interp instead of setting 'EdgeColor'=='none' to make the shape smooth; 

%// Scale the color limits to your data 
set(gca, 'clim', [min(distances(:)), max(distances(:))]) 

% add a colorbar 
colorbar 

% change the colormap 
colormap(jet(64)) 

%use the same unit length along each axis and fit the axes box tightly around the data. 
axis image 

% turn off the coordinate 
axis off 

% set the camlight strength, trial and error 
set(h, 'AmbientStrength',0.25, 'SpecularStrength',0.0,'DiffuseStrength',0.5); 
lighting phong; 
camlight left; %left,right,head 
set(gcf,'Renderer','opengl'); %‘opengl’,'zbuffer' 

Si c'est un nuage de points:

h2=scatter3(X,Y,Z,'.'); 
view([0,90]); 
h2.CData=distances; 
axis image; 
set(gca, 'clim', [min(distances(:)), max(distances(:))]); 
colormap(jet(64)); 
5

Vous pouvez utiliser un objet patch pour montrer votre forme 3D puis utilisez les propriétés FaceVertexCData et FaceColor du patch résultant Sé t une valeur qui peut être automatiquement mappée aux limites de couleur des axes.

vertices = cat(2, shape.X(:), shape.Y(:), shape.Z(:)); 

%// Create the patch object 
h = patch('Vertices', vertices, ... 
      'Faces', shape.TRIV); 

%// Compute distance of each vertex from the origin 
distances = sqrt(sum(bsxfun(@minus, vertices, [0 0 0]).^2, 2)); 

%// Set the vertex colors and use interpolation to shade the faces 
set(h, 'FaceColor', 'interp', ... 
     'FaceVertexCData', distances); 

%// Scale the color limits to your data 
set(gca, 'clim', [min(distances(:)), max(distances(:))]) 
+0

si la forme est un nuage de points sans visages (shape.TRIV)? –

+0

@GuWang Si vous avez un nuage de points, alors vous devrez utiliser 'plot3' ou' scatter3' – Suever

+0

Comment est-ce que je peux faire la forme tracée par patch plus lisse? Et comment ajouter une source de lumière à la forme? –