function DH(manipulador,alteracoes)                 %para animar o manipulador
t=0.001;                                            %tempo de cada frame
n=10;                                               %numero de frames
n_elos=size(manipulador,1);                         %primeiro e necessario saber o numero de elos
for j=1:n_elos;                                     %para cada elo (movimento de um de cada vez)
    Oi=manipulador(j,1);                            %valor inicial de theta
	Of=Oi+alteracoes(j,1);                          %posiçao final de theta
	passoO=(Of-Oi)/n;                               %incremento/passo a theta
   	Di=manipulador(j,4);                            %valor inicial de D
	Df=Di+alteracoes(j,2);                          %posiçao final de D
	passoD=(Df-Di)/n;                               %incremento/passo de D
    inc=0;                                          %numero de incremento
    while inc<=n;                                   %repete-se este ciclo n vezes (passos intermedios)
        if passoD==0;                               %se o passo for 0 vai-se logo para o ultimo encremento
			if passoO==0;                           %
                inc=n;                              %
            end;                                    %  
        end;                                        %
        inc=inc+1;                                  %faz-se incremento
        axis equal;                                 %todos eixos iguais
        axis([-500 500 -500 500 0 500]);            %se nao, define-se os eixos
        hold on;                                    %fixa-se o grafico
		grid on;                                    %coloca-se grelha
		manipulador(j,1)=Oi;                        %actualiza-se o manipulador
		manipulador(j,4)=Di;                        %actualiza-se o manipulador
        for i=1:n_elos;                             %determino DH para todos os elos (i->numero do elo)
	        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;                            %   "
        end;                                        %   "
        Ref=eye(4,4);                               %matriz identidade 4*4 (especie de referencial para cada elo)
		junta(:,1)=[0;0;0;1];                       %inicializo nova junta
        ponta=[0 50 0;0 0 100;0 0 0;1 1 1];         %figura da ponta
        for k=1:n_elos;                             %em todos os elos
			Ref=Ref*DH(:,:,k);                      %aplico DH a R e obtenho "novo referencial" (orientaçao a frente da anterior)
			junta(:,k+1)=Ref*junta(:,1);            %determino nova junta (acrescento-a a matriz junta)
            plot3(junta(1,:),junta(2,:),junta(3,:));%desenho as juntas unidas por linhas
            ponta(:,:,k+1)=Ref*ponta(:,:,1);        %determino nova figura
        end;                                        %
        fill3(ponta(1,:,k+1),ponta(2,:,k+1),ponta(3,:,k+1),'r');%desenho a figura
		Oi=Oi+passoO;                               %incremento o passo a posiçao anterior (theta)
		Di=Di+passoD;                               %incremento o passo a posiçao anterior (D)
		if inc<=n;                                  %caso ainda nao tenha acabado
			pause(t);                               %pausa para visualizaçao
			clf;                                    %apaga passos anteriores
		end;                                        %
		clear junta;                                %inicializa junta
	end;                                            %
end;                                                %