Matlab - Gráfica 3D

 
Vista:

Gráfica 3D

Publicado por Marina (19 intervenciones) el 28/07/2014 09:34:50
Hola a todos,
Estoy realizando un proyecto con programación en matlab y una de sus partes es la de mostrar el movimiento de una persona (pecho y espalda) durante la respiración. Tengo el programa implementado y he comprobado que los puntos sí tienen un movimiento, pero a la hora de ordenar que muestre ese movimiento, no se mueve.
Este es el script:
for Im=1:NumPuntos;

clear ptoEn;

%TrayectoriaX1(Im,:)=squeeze(SetP2(:,1,Im));
%TrayectoriaY1(Im,:)=squeeze(SetP2(:,5,Im));
%TrayectoriaZ1(Im,:)=squeeze(SetP2(:,9,Im));
%TrayectoriaX2(Im,:)=squeeze(SetP1(:,1,Im));
%TrayectoriaY2(Im,:)=squeeze(SetP1(:,5,Im));
%TrayectoriaZ2(Im,:)=squeeze(SetP1(:,9,Im));
%TrayectoriaZ1(Im,:)=squeeze(SetP2(:,7,Im));
%TrayectoriaY1(Im,:)=squeeze(SetP2(:,11,Im));
%TrayectoriaX2(Im,:)=squeeze(SetP1(:,3,Im));
%TrayectoriaZ2(Im,:)=squeeze(SetP1(:,7,Im));
%TrayectoriaY2(Im,:)=squeeze(SetP1(:,11,Im));
TrayectoriaX1(Im,:)=squeeze(SetP2(:,2,Im));
TrayectoriaY1(Im,:)=squeeze(SetP2(:,6,Im));
TrayectoriaZ1(Im,:)=squeeze(SetP2(:,10,Im));
TrayectoriaX2(Im,:)=squeeze(SetP1(:,2,Im));
TrayectoriaY2(Im,:)=squeeze(SetP1(:,6,Im));
TrayectoriaZ2(Im,:)=squeeze(SetP1(:,10,Im));
%TrayectoriaX1(Im,:)=squeeze(SetP2(:,4,Im));
%TrayectoriaY1(Im,:)=squeeze(SetP2(:,8,Im));
%TrayectoriaZ1(Im,:)=squeeze(SetP2(:,12,Im));
%TrayectoriaX2(Im,:)=squeeze(SetP1(:,4,Im));
%TrayectoriaY2(Im,:)=squeeze(SetP1(:,8,Im));
%TrayectoriaZ2(Im,:)=squeeze(SetP1(:,12,Im));

end


for i=1:6
for j=1:4
indice=(i-1)*4+j;
%indice=(j-1)*6+i;
X(i,j,:)=TrayectoriaX1(indice,:);
Z(i,j,:)=TrayectoriaY1(indice,:);
Y(i,j,:)=TrayectoriaZ1(indice,:);
X2(i,j,:)=TrayectoriaX2(indice,:);
Z2(i,j,:)=TrayectoriaY2(indice,:);
Y2(i,j,:)=TrayectoriaZ2(indice,:);
end
end


[Yin,IM]=max(Z,[],4);
[Yin,Im]=min(Z,[],4);

[Yin2,IM2]=max(Z2,[],4);
[Yin2,Im2]=min(Z2,[],4);

for i=1:6
for j=1:4
XM(i,j)=X(i,j,IM(i,j));
YM(i,j)=Y(i,j,IM(i,j));
ZM(i,j)=Z(i,j,IM(i,j));
Xm(i,j)=X(i,j,Im(i,j));
Ym(i,j)=Y(i,j,Im(i,j));
Zm(i,j)=Z(i,j,Im(i,j));
XM2=XM;
YM2=YM;
ZM2=ZM;
Xm2=Xm;
Ym2=Ym;
Zm2=Zm;
XM2(i,j)=X2(i,j,IM2(i,j));
YM2(i,j)=Y2(i,j,IM2(i,j));
ZM2(i,j)=Z2(i,j,IM2(i,j));
Xm2(i,j)=X2(i,j,Im2(i,j));
Ym2(i,j)=Y2(i,j,Im2(i,j));
Zm2(i,j)=Z2(i,j,Im2(i,j));
end
end


f=figure();
set(f, 'Position', [100 200 1600 600])
set(gcf,'PaperUnits','inches','PaperPosition',[0 0 16 6])
set(gcf, 'Color','white')
set(gca, 'nextplot','replacechildren', 'Visible','on');
camproj('perspective')

REFX=X(:);
REFY=Y(:);
REFZ=Z(:);
REFX2=X2(:);
REFY2=Y2(:);
REFZ2=Z2(:);
%nFrames = 2000;



% Ejes=[50 200 -300 0 200 260];
Ejes=[100 350 -100 250 170 470];
% Ejes2=[200 400 0 300 240 330];
for i=1:result
t=i/result;
subplot(231)
nombre=strcat(newDir,'/CapturaMov_C1_',num2str(i,'%04d'),'.png');

imagen=imread(nombre);
imagen=imrotate(imagen,270);
image(imagen);
hold on

plot(squeeze(C2(i,1,:))+(size(imagen,2)/2),-squeeze(C2(i,2,:))+(size(imagen,1)/2),'or','MarkerSize',15);

subplot(234)
nombre2=strcat(newDir,'/CapturaMov_C4_',num2str(i,'%04d'),'.png');

imagen2=imread(nombre2);
imagen2=imrotate(imagen2,270);
image(imagen2);
hold on

plot(squeeze(C1(i,1,:))+(size(imagen2,2)/2),-squeeze(C1(i,2,:))+(size(imagen2,1)/2),'or','MarkerSize',15);

subplot(2,3,[2 3 5 6])
camproj('perspective')
pbaspect([1 1 1]);
RADIO=1000;

campos([RADIO*cos(pi*sin(t*2*pi)/2-pi/4)+(Ejes(1)+Ejes(2))/2,+(Ejes(3)+Ejes(4))/2+RADIO*sin(pi*sin(t*2*pi)/2-pi/4),200]);
camva(40);
axis(Ejes)
cla(gca)
set(gca,'DataAspectRatio',[1 1 1])
hold on
box on


plot3(interp1(1:6,Xm,1:0.1:6,'cubic'),interp1(1:6,Ym,1:0.1:6,'cubic'),interp1(1:6,Zm,1:0.1:6,'cubic'),'--','Color',[0.2 0.5 0.2])

plot3(interp1(1:4,Xm',1:0.1:4,'cubic'),interp1(1:4,Ym',1:0.1:4,'cubic'),interp1(1:4,Zm',1:0.1:4,'cubic'),'--','Color',[0.2 0.5 0.2])
surf(X(:,:,i),Y(:,:,i),Z(:,:,i),'FaceColor',[.8 .6 .4],'FaceLighting','phong','EdgeColor','none')

plot3(interp1(1:6,X(:,:,i),1:0.1:6,'cubic'),interp1(1:6,Y(:,:,i),1:0.1:6,'cubic'),interp1(1:6,Z(:,:,i),1:0.1:6,'cubic'),'Color',[.3 .2 .1])

plot3(interp1(1:4,X(:,:,i)',1:0.1:4,'cubic'),interp1(1:4,Y(:,:,i)',1:0.1:4,'cubic'),interp1(1:4,Z(:,:,i)',1:0.1:4,'cubic'),'Color',[.3 .2 .1])
plot3(X(:,:,i),Y(:,:,i),Z(:,:,i),'.','MarkerSize',30,'Color',[.3 .2 .1])
camlight left
alpha .7

%plot3(interp1(1:6,XM,1:0.1:6,'cubic'),interp1(1:6,YM,1:0.1:6,'cubic'),interp1(1:6,ZM,1:0.1:6,'cubic'),'--','Color',[0.2 0.6 0.2])

%plot3(interp1(1:4,XM',1:0.1:4,'cubic'),interp1(1:4,YM',1:0.1:4,'cubic'),interp1(1:4,ZM',1:0.1:4,'cubic'),'--','Color',[0.2 0.6 0.2])

%LIMITE=length(REFX);
%plot3(REFX(:),REFY(:),REFZ(:),'.','MarkerSize',1,'Color',[0.2 0.6 0.2])


set(gcf,'PaperPositionMode','auto')
%%print('-dpng','-r72',['Salida_C4_' num2str(i,'%04d') '.png']);


% subplot(224)
% camproj('perspective')
% pbaspect([1 1 1]);
% RADIO=300;

% campos([RADIO*cos(pi*sin(t*2*pi)/2-pi/4)+(Ejes2(1)+Ejes2(2))/2,+(Ejes2(3)+Ejes2(4))/2+RADIO*sin(pi*sin(t*2*pi)/2-pi/4),300]);
% camva(40);
% axis(Ejes2)
% cla(gca)
% set(gca,'DataAspectRatio',[1 1 .5])
% hold on
% box on

hold on
% plot3(interp1(1:6,Xm2,1:0.1:6,'cubic'),interp1(1:6,Ym2,1:0.1:6,'cubic'),interp1(1:6,Zm2,1:0.1:6,'cubic'),'--','Color',[0.2 0.5 0.2])

%plot3(interp1(1:4,Xm2',1:0.1:4,'cubic'),interp1(1:4,Ym2',1:0.1:4,'cubic'),interp1(1:4,Zm2',1:0.1:4,'cubic'),'--','Color',[0.2 0.5 0.2])
surf(X2(:,:,i),Y2(:,:,i),Z2(:,:,i),'FaceColor',[.8 .6 .4],'FaceLighting','phong','EdgeColor','none')

plot3(interp1(1:6,X2(:,:,i),1:0.1:6,'cubic'),interp1(1:6,Y2(:,:,i),1:0.1:6,'cubic'),interp1(1:6,Z2(:,:,i),1:0.1:6,'cubic'),'Color',[.3 .2 .1])

plot3(interp1(1:4,X2(:,:,i)',1:0.1:4,'cubic'),interp1(1:4,Y2(:,:,i)',1:0.1:4,'cubic'),interp1(1:4,Z2(:,:,i)',1:0.1:4,'cubic'),'Color',[.3 .2 .1])
plot3(X2(:,:,i),Y2(:,:,i),Z2(:,:,i),'.','MarkerSize',30,'Color',[.3 .2 .1])
camlight left
alpha .7

%plot3(interp1(1:6,XM2,1:0.1:6,'cubic'),interp1(1:6,YM2,1:0.1:6,'cubic'),interp1(1:6,ZM2,1:0.1:6,'cubic'),'--','Color',[0.2 0.6 0.2])

%plot3(interp1(1:4,XM2',1:0.1:4,'cubic'),interp1(1:4,YM2',1:0.1:4,'cubic'),interp1(1:4,ZM2',1:0.1:4,'cubic'),'--','Color',[0.2 0.6 0.2])

%LIMITE2=length(REFX2);
%plot3(REFX2(:),REFY2(:),REFZ2(:),'.','MarkerSize',1,'Color',[0.2 0.6 0.2])

hold off

set(gcf,'PaperPositionMode','auto')
print('-dpng','-r72',['Salida_C1_' num2str(i,'%04d') '.png']);
i
clf
end

os lo agradecería muchísimo si me pudierais echar una mano y decirme si veis dónde está el fallo.
Un saludo,
Marina
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

Gráfica 3D

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 28/07/2014 15:44:58
Tu código que pones no esta completo.

Saludos.
JOSE JEREMÍAS CABALLERO
Asesoría online y Presencial en Matlab
programador en matlab
Servicios de programación matlab
[email protected]
Estimado Usuario de Matlab, el correo es para servicios de programación, toda ayuda gratuita es vía foro.


http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
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

Gráfica 3D

Publicado por Marina (19 intervenciones) el 28/07/2014 16:15:25
Antes de nada gracias por la respuesta.
Sé que el código no está completo, porque tengo varios scripts relacionados, pero mi problema es en este.
Mirando los datos de X,X2,Y,Y2,Z,Z2 sí aparece una variación en ellos a lo largo del tiempo; pero a la hora de hacer los plot3 y los surf, el resultado que obtengo es constante a lo largo del tiempo.
No sé qué fallo puede haber en el programa, ya que lo he revisado varias veces ya. Si alguien me pudiera ayudar lo agradecería enormemente.
un saludo,
Marina
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
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Gráfica 3D

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 28/07/2014 16:35:19
Justamente como tu código no esta completo no se puede ejecutar y por tanto no se puede ver los errores, ejecutando es la forma mas rápida ver el error y además filtrar el código. Claro que hay otra manera de ver el error con el código que haz puesto, pero implica tiempo, seria revisar línea por línea con datos aleatorios y revisando a profundidad.
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