function [cm_Cima,Ref]=Parte_superior(Ref,cmassa,mi,Pfinal);                  %
%CONFIGURAÇOES INICIAIS                                                 %
dimensoes=dimensions;              	 	                                %lê comprimento dos elos
manip_cima=manipCIMA(dimensoes);                                        %configuraçao do "manipulador" de cima (tronco)
n_elos=size(manip_cima,1);                                              %numero de elos deste "manipulador"
Ref_cima(:,:,1)=eye(4,4);                                               %matriz identidade 4*4 (especie de referencial para cada elo)
junta_cima(:,1)=[0;0;0;1];                                              %primeira junta
centromassa_cima(1:4,1:n_elos)=0;                                       %centros de massa locais
Rcm_cima=0;                                                             %centro de massa do "manipulador" (do tronco)
                                                                        %
%ANGULOS PEDIDOS PELO UTILIZADOR                                        %
    manip_cima(2,1)=manip_cima(2,1)+Pfinal(8);                          %cintura ao lado
    manip_cima(3,1)=manip_cima(3,1)+Pfinal(9);                          %cintura a frente
    manip_cima(5,1)=manip_cima(5,1)+Pfinal(10);                         %pescoço ao lado
    manip_cima(6,1)=manip_cima(6,1)+Pfinal(11);                         %pescoço a frente
                                                                        %
%CALCULO DE TODO O MANIPULADOR                                          %
Ref_cima(:,:,1)=Ref(:,:,9);                                             %o referencial inicial ´e o ponto medio da anca
for i=1:n_elos;                                                         %determino DH para todos os elos (i->numero do elo)
	        theta=manip_cima(i,1);                                      %   "
	        alfa=manip_cima(i,2);                                       %   "
	        l=manip_cima(i,3);                                          %   "
	        d=manip_cima(i,4);                                          %   "
	        DH_cima(1,1,i)=cos(theta);                                  %   "
        	DH_cima(1,2,i)=-sin(theta)*cos(alfa);                       %   "
        	DH_cima(1,3,i)=sin(theta)*sin(alfa);                        %   "
        	DH_cima(1,4,i)=l*cos(theta);                                %   "
        	DH_cima(2,1,i)=sin(theta);                                  %   "
        	DH_cima(2,2,i)=cos(theta)*cos(alfa);                        %   "
        	DH_cima(2,3,i)=-cos(theta)*sin(alfa);                       %   "
        	DH_cima(2,4,i)=l*sin(theta);                                %   "
        	DH_cima(3,1,i)=0;                                           %   "
        	DH_cima(3,2,i)=sin(alfa);                                   %   "
        	DH_cima(3,3,i)=cos(alfa);                                   %   "
        	DH_cima(3,4,i)=d;                                           %   "
        	DH_cima(4,1,i)=0;                                           %   "
        	DH_cima(4,2,i)=0;                                           %   "
        	DH_cima(4,3,i)=0;                                           %   "
        	DH_cima(4,4,i)=1;                                           %   "
            Ref_cima(:,:,i+1)=Ref_cima(:,:,i)*DH_cima(:,:,i);           %   "
			junta_cima(:,i+1)=Ref_cima(:,:,i+1)*junta_cima(:,1);        %determino nova junta (acrescento-a a matriz junta)            
            centromassa_cima(:,i)=Ref_cima(:,:,i+1)*cmassa(:,i+17);     %centros de massas locais
            Rcm_cima=Rcm_cima+centromassa_cima(1:3,i)*mi(i+17);         %centro de massa global
        end;                                                            %     
Rcm_cima=Rcm_cima/(sum(mi(18:23)));                                     %correcçao do centro de massa global
junta_cima(:,1)=Ref_cima(:,4,1);                                        %correcçao do ponto inicial
                                                                                                    %
%REPRESENTAÇAO DO MANIPULADOR                                                                       %
plot3(junta_cima(1,1:end),junta_cima(2,1:end),junta_cima(3,1:end));                                 %desenho os elos
plot3(junta_cima(1,2:n_elos),junta_cima(2,2:n_elos),junta_cima(3,2:n_elos),'bo');                   %desenha juntas
plot3(centromassa_cima(1,1:n_elos),centromassa_cima(2,1:n_elos),centromassa_cima(3,1:n_elos),'rx'); %desenha centros de massa (locais)
Camara=[0 0 0;0 -30 0;-10 0 10;1 1 1];                                                              %Camara (configuraçao)
Camara=Ref_cima(:,:,i+1)*Camara;                                                                    %Camara (nova posicao)
fill3(Camara(1,:),Camara(2,:),Camara(3,:),'y');                                                     %desenha Camara

%VALORES DE SAIDA    
cm_Cima=Rcm_cima;
Ref(:,:,18:23)=Ref_cima(:,:,2:7);