Matlab - Representar en 3D una matriz 3d

   
Vista:

Representar en 3D una matriz 3d

Publicado por David (40 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
información
Otras secciones de LWP con contenido de Matlab
- Código fuente de Matlab
- Cursos de Matlab
- Temas de Matlab
- Chat de Matlab
información
Códigos de Matlab
- Fixed Pivot
- Elige una carta
- Fuerzas de Coulomb
Imágen de perfil de JOSE JEREMIAS CABALLERO

Representar en 3D una matriz 3d

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 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

Representar en 3D una matriz 3d

Publicado por David (40 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
Imágen de perfil de JOSE JEREMIAS CABALLERO

Representar en 3D una matriz 3d

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3432 intervenciones) el 01/02/2014 17:29:45
que es M?.
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

Representar en 3D una matriz 3d

Publicado por David (40 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

Representar en 3D una matriz 3d

Publicado por David (40 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

Representar en 3D una matriz 3d

Publicado por David (40 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