function DH(manipulador,alteracoes);                            %para animar o manipulador
t=0.01;                                                         %tempo de cada frame
n=20;                                                           %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;                                                %
    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 150 -150 100 0 500]);                            %se nao, define-se os eixos
        hold on;                                                %fixa-se o grafico
		grid on;                                                %coloca-se grelha
        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;                                        %   "
        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
        end;                                                    %
		Oi=Oi+passoO;                                           %incremento o passo a posiçao anterior (theta)
		if inc<=n;                                              %caso ainda nao tenha acabado
			pause(t);                                           %pausa para visualizaçao
			clf;                                                %apaga passos anteriores
		end;                                                    %
		clear junta;                                            %inicializa junta
end;                                                            %