Matlab - Dibujar valores por coordenadas

   
Vista:

Dibujar valores por coordenadas

Publicado por German (3 intervenciones) el 02/08/2016 18:44:22
Hola. Tengo una matriz de la forma:

0.5377 3.5784 -0.1241 10.0000
1.8339 2.7694 1.4897 13.0000
-2.2588 -1.3499 1.4090 45.0000
0.8622 3.0349 1.4172 23.0000
0.3188 0.7254 0.6715 64.0000
-1.3077 -0.0631 -1.2075 75.0000
-0.4336 0.7147 0.7172 86.0000
0.3426 -0.2050 1.6302 97.0000

Donde las tres primeras columnas corresponden a las coordenadas x,y, z y la tercera columna el valor que tiene esa variable en el punto.

me gustaría saber si hay alguna forma de hacer un dibujo 3d de las coordenadas donde cada punto tenga un color distinto dependiendo del valor de la variable

Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Daniel

Dibujar valores por coordenadas

Publicado por Daniel (212 intervenciones) el 02/08/2016 20:24:00
Lo que se me ocurre es usar plot3 modificando el color del punto en base a la funcion de xyz

Te dejo un código de ejemplo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
n=1000;
x=rand(1,n);
y=rand(1,n);
z=rand(1,n);
 
p=x.^2+y.^2+z.^2;
pmin=min(p);
pmax=max(p);
 
niveles=15;
pcol=jet(niveles);
 
for j=1:n
    plot3(x(j),y(j),z(j),'.','color',pcol(round((niveles-1)*(p(j)-pmin)/(pmax-pmin))+1,:)),hold on
end

Comentanos si te sirvió

Saludos

Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Jorge De Los Santos

Dibujar valores por coordenadas

Publicado por Jorge De Los Santos (212 intervenciones) el 02/08/2016 21:04:03
Puedes utilizar la función scatter3, por ej:

1
2
3
4
5
6
7
8
9
10
11
12
13
clear;clc;
X = [0.5377 3.5784 -0.1241 10.0000;
1.8339 2.7694 1.4897 13.0000;
-2.2588 -1.3499 1.4090 45.0000;
0.8622 3.0349 1.4172 23.0000;
0.3188 0.7254 0.6715 64.0000;
-1.3077 -0.0631 -1.2075 75.0000;
-0.4336 0.7147 0.7172 86.0000;
0.3426 -0.2050 1.6302 97.0000];
 
MARKER_SIZE = 30; % Tamaño de los puntos
MARKER_COLOR = X(:,4); % Color basado en la columna 4
scatter3(X(:,1), X(:,2), X(:,3), MARKER_SIZE, MARKER_COLOR, 'filled');


La documentación de MATLAB dice algo como:

scatter3(X,Y,Z,S,C) displays colored circles at the locations specified by the vectors X, Y, and Z (which must all be the same size).

S determines the area of each marker (specified in points^2). S can be a vector the same length as X, Y, and Z or a scalar. If S is a scalar, MATLAB draws all the markers the same size.

C determines the color of each marker. When C is a vector the same length as X and Y, the values in C are linearly mapped to the colors in the current colormap.



En resumen: el tamaño de marca puedes especificarlo como un escalar (caso anterior) o un vector de las mismas dimensiones de X, Y, Z. Para el color sucede lo mismo: si introduces un vector de las mismas dimensiones de X, Y, Z, entonces MATLAB hará una interpolación lineal sobre el mapa de color actual e internamente asignará el color correspondiente a cada "marca". Luego, si además de hacer una diferenciación por color necesitas una por tamaño, podrías sustituir el escalar de MARKER_SIZE por el vector correspondiente a la columna cuatro, es decir:

1
MARKER_SIZE = X(:,4);

Añadiendo además que puedes cambiar el mapa de color con la función colormap.



Saludos.

Jorge De Los Santos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Dibujar valores por coordenadas

Publicado por German (3 intervenciones) el 08/08/2016 11:00:42
muchas gracias, me ha sido muy útil
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar