function [cm_Cima,Centros,mov]=DH(manipulador,Juntas,cmassa,mi,n_V,mov,PeApoiado,Origem,Pfinal);%para animar o manipulador
Pe=[-45 30 30 -45;-105 -105 95 95;0 0 0 0;1 1 1 1];             %PE generico
if PeApoiado==2
    Pe=[-30 45 45 -30;-105 -105 95 95;0 0 0 0;1 1 1 1];         %PE generico
end;
O=[1 0 0 Origem(1); 0 1 0 Origem(2);0 0 1 Origem(3); 0 0 0 1];  %origem
alteracoes=Juntas(:,n_V+1)-Juntas(:,n_V);                       %determinacao das alteracoes
t=0.001;                                                        %tempo de cada frame
n=7;                                                           %numero de frames
n_elos=size(manipulador,1);                                     %primeiro e necessario saber o numero de elos
for j=1:n_elos;                                                 %para cada elo (movimenta-los todos ao mesmo tempo)
    Oi(j)=manipulador(j,1);                                     %valor inicial de theta
	Of(j)=Oi(j)+alteracoes(j,1);                                %posiçao final de theta
	passoO(j)=(Of(j)-Oi(j))/n;                                  %incremento/passo a theta
end;                                                            %
if passoO(:)==0;                                                %verificar se existe "passo"
    inc=n;                                                      %
end;                                                            %  
inc=0;                                                          %numero de incremento
while inc<=n;                                                   %repete-se este ciclo n vezes (passos intermedios)
        inc=inc+1;                                              %faz-se incremento
        axis equal;                                             %todos eixos iguais
        axis([-50 200 -350 100 0 500]);                         %se nao, define-se os eixos
        hold on;                                                %fixa-se o grafico
		grid on;                                                %coloca-se grelha
        [Ref,Rcm,centromassa,junta]=Parte_inferior(n_elos,cmassa,mi,Pe,O,manipulador,Oi);
        [cm_Cima,Ref]=Parte_superior(Ref,cmassa,mi,Pfinal,O);
        [cm_Esquerda,Ref]=Parte_esquerda(Ref,cmassa,mi,Pfinal,O);
        [cm_Direita,Ref]=Parte_direita(Ref,cmassa,mi,Pfinal,O);
        cm_estrutura_sup=cm_Cima*(sum(mi(18:23)))+cm_Direita*(sum(mi(24:27)))+cm_Esquerda*(sum(mi(28:31)));
        cm_estrutura_inf=Rcm*(sum(mi(1:17)));
        Rcm=(cm_estrutura_inf+cm_estrutura_sup)/(sum(mi(1:31)));%
        Rcm_aux=Rcm+transpose(Origem);                          %centro de massa global auxiliar (para desenho)
        plot3(Rcm_aux(1),Rcm_aux(2),Rcm_aux(3),'ko');           %desenha centro de massa (global)
        plot3(Rcm_aux(1),Rcm_aux(2),0,'go','linewidth',3);      %projecçao do centro de massa no chao
        Oi=Oi+passoO;                                           %incremento o passo a posiçao anterior (theta)
        F = getframe(1);                                        %grava o frame
        mov = addframe(mov,F);                                  %e acrescenta-o ao video
        if inc<=n;                                              %caso ainda nao tenha acabado
			pause(t);                                           %pausa para visualizaçao
			clf;                                                %apaga passos anteriores
		end;                                                    %
end;                                                            %
Centros(1:4,1:n_elos)=centromassa(1:4,1:n_elos);                %atribuiçao de valores de saida (centros de massa)
Centros(5:8,1:n_elos)=junta(1:4,1:n_elos);                      %atribuiçao de valores de saida (posiçao dos elos)
cm_Cima=cm_estrutura_sup/(sum(mi(18:31)));                      %centro de massa da estrutura superior


