function [Centros,mov]=DH(manipulador,Juntas,cmassa,mi,n_V,mov,PeApoiado,Origem);%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 350]);                         %se nao, define-se os eixos
        hold on;                                                %fixa-se o grafico
		grid on;                                                %coloca-se grelha
        Ref(:,:,1)=eye(4,4);                                    %matriz identidade 4*4 (especie de referencial para cada elo)
        junta(:,1)=[0;0;0;1];                                   %primeira junta
        centromassa(1:4,1:n_elos)=0;                            %centros de massa locais
        Rcm(1:3,1)=0;                                           %centro de massa global
        for i=1:n_elos;                                         %determino DH para todos os elos (i->numero do elo)
		    manipulador(i,1)=Oi(i);                             %actualiza-se o manipulador
	        theta=manipulador(i,1);                             %   "
	        alfa=manipulador(i,2);                              %   "
	        l=manipulador(i,3);                                 %   "
	        d=manipulador(i,4);                                 %   "
	        DH(1,1,i)=cos(theta);                               %   "
        	DH(1,2,i)=-sin(theta)*cos(alfa);                    %   "
        	DH(1,3,i)=sin(theta)*sin(alfa);                     %   "
        	DH(1,4,i)=l*cos(theta);                             %   "
        	DH(2,1,i)=sin(theta);                               %   "
        	DH(2,2,i)=cos(theta)*cos(alfa);                     %   "
        	DH(2,3,i)=-cos(theta)*sin(alfa);                    %   "
        	DH(2,4,i)=l*sin(theta);                             %   "
        	DH(3,1,i)=0;                                        %   "
        	DH(3,2,i)=sin(alfa);                                %   "
        	DH(3,3,i)=cos(alfa);                                %   "
        	DH(3,4,i)=d;                                        %   "
        	DH(4,1,i)=0;                                        %   "
        	DH(4,2,i)=0;                                        %   "
        	DH(4,3,i)=0;                                        %   "
        	DH(4,4,i)=1;                                        %   "
            Ref(:,:,i+1)=Ref(:,:,i)*DH(:,:,i);                  %   "
			junta(:,i+1)=Ref(:,:,i+1)*junta(:,1);               %determino nova junta (acrescento-a a matriz junta)            
            centromassa(:,i)=Ref(:,:,i+1)*cmassa(:,i);          %centros de massas locais
            Rcm=Rcm+centromassa(1:3,i)*mi(i);                   %centro de massa global
        end;                                                    %
        Rcm=Rcm/(sum(mi));                                      %correcçao do centro de massa
        PeA=O*Pe;                                               %origem do pe de apoio
        fill3(PeA(1,:),PeA(2,:),PeA(3,:),'y');                  %desenha PE de apoio
        PeS=Ref(:,:,i+1)*Pe;                                    %PE solto (nova posicao)
        PeS=O*PeS;                                              %pe solto (tendo em consideraçao a nova origem
        fill3(PeS(1,:),PeS(2,:),PeS(3,:),'y');                  %desenha PE solto
        j_aux=O*junta;                                          %junta auxiliar (para desenho)
        plot3(j_aux(1,:),j_aux(2,:),j_aux(3,:));                %desenho os elos
        plot3(j_aux(1,2:n_elos),j_aux(2,2:n_elos),j_aux(3,2:n_elos),'bo');  %desenha juntas
        cm_aux=O*centromassa;                                   %centros de massa auxiliares (para desenho)
        plot3(cm_aux(1,1:n_elos),cm_aux(2,1:n_elos),cm_aux(3,1:n_elos),'rx'); %desenha centros de massa (locais)
        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)