function Q=invkinRRRantro(x,y,z,L1,L2,L3)

q3=acos((x^2+y^2+(z-L1)^2-L2^2-L3^2)/2/L2/L3);
if imag(q3) ~=0
    Q=NaN;
    return
end
q3=[q3 -q3];%2 sol do cotovelo

r=sqrt(x^2+y^2);
q2A=atan2((L2+L3*cos(q3)).*(z-L1)-L3*sin(q3).*r , (L2+L3*cos(q3)).*r+L3*(z-L1).*sin(q3));

r=-r; %solução para o ombro direiro
q2B=atan2((L2+L3*cos(q3)).*(z-L1)-L3*sin(q3).*r , (L2+L3*cos(q3)).*r+L3*(z-L1).*sin(q3));
%==============================================
%Solução alternativa para q2:
k1=L3*sin(q3); k2=(L2+L3*cos(q3));k3=z-L1;
q2Ab=2*atan2((k2+sqrt(k1.^2+k2.^2-k3.^2)), (k1+k3));
q2Bb=2*atan2((k2-sqrt(k1.^2+k2.^2-k3.^2)), (k1+k3));

q2b=[q2Ab q2Bb];
%=================================================
q3=[q3 q3]; %criar as quatro possibilidades de q3(2x2)
q2=[q2A q2B]; %juntar as 4 possibilidades de q2 função de r e q3

k=sign(L3*cos(q2+q3)+L2*cos(q2)); %important for atan2 to operate
q1=atan2(k*y,k*x);
Q=[q1;q2;q3];
end
