Matlab - Representar en 3D una matriz 3d

 
Vista:
sin imagen de perfil

Representar en 3D una matriz 3d

Publicado por David (42 intervenciones) el 01/02/2014 08:17:34
Si dispongo de una matriz 3d creada con (d es un entero, por ejemplo 2):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
R = (rand(2^d,2^d,2^d));    % Rellenamos la matriz de dimensión 2^d de
                            % números aleatorios entre 0 y 1
for k=1:size(R,3)
for i=1:size(R,1)           % Etiquetamos las posiciones de la matriz con 
                            % 1 y 0 para poder usar en HK3d.m 
    for j=1:size(R,2)
 
            if R(i,j,k)<=p
                R(i,j,k)=1; % Si el contenido de la matriz es menor o igual 
                            % que la probabilidad rellenamos con 1
            else
                R(i,j,k)=0; % Si es contenido de cada posición de la matriz 
                            % es mayor que p con 0
            end
        end
    end
end

¿cómo se haría la representación en 3d de los puntos que son 1 en 3 dimensiones? Estoy intentando hacerlo con el comando scatter3 pero no lo consigo
Gracias
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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Representar en 3D una matriz 3d

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 01/02/2014 13:37:23
la forma de usar scatter3
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
>> clear all
       [x,y,z] = sphere(16);
       X = [x(:)*.5 x(:)*.75 x(:)];
       Y = [y(:)*.5 y(:)*.75 y(:)];
       Z = [z(:)*.5 z(:)*.75 z(:)];
       S = repmat([1 .75 .5]*10,numel(x),1);
       C = repmat([1 2 3],numel(x),1);
       x=X(:);
       y=Y(:);
       z=Z(:);
       s=S(:);
       c=C(:);
 
       scatter3(x,y,z,s,c,'filled'), view(-60,60)
>> whos
  Name        Size            Bytes  Class     Attributes
 
  C         289x3              6936  double
  S         289x3              6936  double
  X         289x3              6936  double
  Y         289x3              6936  double
  Z         289x3              6936  double
  c         867x1              6936  double
  s         867x1              6936  double
  x         867x1              6936  double
  y         867x1              6936  double
  z         867x1              6936  double
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
sin imagen de perfil

Representar en 3D una matriz 3d

Publicado por David (42 intervenciones) el 01/02/2014 17:21:59
Muchas gracias por la rápida respuesta. De todas formas no tengo mucha experiencia en la representación de funciones en 3d y sigo sin verlo.
Realmente lo que quiero ver es si hay percolación. Cuando tengo una matriz de dos dimensiones no hay problema, si la matriz es C hago la representación gráfica de la forma:
1
2
3
4
5
6
7
8
C =
 
     1     0     1     1
     1     1     1     1
     1     0     0     1
     0     1     0     1
z=zeros(size(C));
image(cat(3,C,z,z));
Y veo si hay percolación desde la fila de arriba a la de abajo.

Quiero hacer algo similar si tengo los datos en 3 dimensiones de la forma:

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
C(:,:,1) =
 
     1     1     0     1
     1     0     1     1
     0     1     0     0
     1     1     0     1
 
 
C(:,:,2) =
 
     1     0     1     1
     0     1     0     0
     1     0     0     1
     1     0     1     0
 
 
C(:,:,3) =
 
     1     0     1     0
     0     0     0     1
     0     0     1     1
     1     1     1     0
 
 
C(:,:,4) =
 
     0     1     0     0
     0     1     0     1
     1     0     0     0
     0     1     0     1

Es decir, necesitaría ver si hay percolación desde la cara C(:,:,1) a C(:,:,4) y hacer una representación gráfica.

Gracias y perdón por no haber compredido la anterior respuesta.
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
sin imagen de perfil

Representar en 3D una matriz 3d

Publicado por David (42 intervenciones) el 01/02/2014 17:36:19
Perdón, M es lo mismo que C lo que pasa es que tenía hecha una función y he copiado el contenido de la función a la que pasaba C.
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
sin imagen de perfil

Representar en 3D una matriz 3d

Publicado por David (42 intervenciones) el 02/02/2014 07:14:46
Si a partir de la matriz R:
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
R(1,1,1)=1;
R(1,2,1)=1;
R(1,3,1)=0;
R(1,4,1)=1;
 
R(2,1,1)=1;
R(2,2,1)=0;
R(2,3,1)=1;
R(2,4,1)=1;
 
R(3,1,1)=0;
R(3,2,1)=1;
R(3,3,1)=0;
R(3,4,1)=0;
 
R(4,1,1)=1;
R(4,2,1)=1;
R(4,3,1)=0;
R(4,4,1)=1;
 
R(1,1,2)=1;
R(1,2,2)=0;
R(1,3,2)=1;
R(1,4,2)=1;
 
R(2,1,2)=0;
R(2,2,2)=1;
R(2,3,2)=0;
R(2,4,2)=0;
 
R(3,1,2)=1;
R(3,2,2)=0;
R(3,3,2)=0;
R(3,4,2)=1;
 
R(4,1,2)=1;
R(4,2,2)=0;
R(4,3,2)=1;
R(4,4,2)=0;
 
R(1,1,3)=1;
R(1,2,3)=0;
R(1,3,3)=1;
R(1,4,3)=0;
 
R(2,1,3)=0;
R(2,2,3)=0;
R(2,3,3)=0;
R(2,4,3)=1;
 
R(3,1,3)=0;
R(3,2,3)=0;
R(3,3,3)=1;
R(3,4,3)=1;
 
R(4,1,3)=1;
R(4,2,3)=1;
R(4,3,3)=1;
R(4,4,3)=0;
 
R(1,1,4)=0;
R(1,2,4)=1;
R(1,3,4)=0;
R(1,4,4)=0;
 
R(2,1,4)=0;
R(2,2,4)=1;
R(2,3,4)=0;
R(2,4,4)=1;
 
R(3,1,4)=1;
R(3,2,4)=0;
R(3,3,4)=0;
R(3,4,4)=0;
 
R(4,1,4)=0;
R(4,2,4)=1;
R(4,3,4)=0;
R(4,4,4)=1;

LLamo a la función construida scatter3_3d:
1
scatter3_3d(R)

Donde la función es:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function scatter3_3d(M)
cont=1;
for k=1:size(M,3)
    for i=1:size(M,1)
        for j=1:size(M,2)
            if M(i,j,k) ~= 0
                X(cont)=i;
                Y(cont)=j;
                Z(cont)=k;
                cont=cont+1;
            end
        end
    end
end
 
 
scatter3(X,Y,Z,'r','filled')
Puedo representar los "1" de la matriz R como puntos, pero me gustaría representarlos como pequeños cubos en la posición que tengan.
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
sin imagen de perfil

Representar en 3D una matriz 3d

Publicado por David (42 intervenciones) el 02/02/2014 22:36:12
También podrían representarse los "1" de la matriz R como esferas en lugar de como cubos.

Gracias
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