format long g
clc
%ZADANI
%Poradi
% s1 s2 s3
% o1 o2 o3
% s1 s2 o3
% s1 o2 o3
% o1 o2 s1
% s1 s2 o1

% Zde napsat sve zadani pro priklad 1.1(v metrech a stupnich)
% ####################################################################################
R = 6378000;

data1 = [
    14112267.048/R 11701318.499/R 8977580.026/R                             % sss
    dms2rad([148 05 20.24]) dms2rad([127 45 39.98]) dms2rad([100 08 52.29]) % uuu
    6643155.301/R 7234145.505/R dms2rad([137 07 00.60])                     % sus
    5403578.479/R dms2rad( [ 52 57 51.85] ) dms2rad( [137 33 53.52] )       % usu
    dms2rad([92 02 47.80]) dms2rad([80 45 59.01]) 5846708.997/R             % uus
    9209974.123/R 13228119.435/R dms2rad([81 49 39.81])                     % ssu
];
% ####################################################################################
%---------------------------------------------------
%   Uloha 1.1     Vypocty na kouli
%---------------------------------------------------

%SSS
%o1
vysledky1(1,1) = acos( ( cos(data1(1,1)) - cos(data1(1,2)) * cos(data1(1,3)) )/( sin(data1(1,2)) * sin(data1(1,3)) ) );
%o2
vysledky1(1,2) = acos( ( cos(data1(1,2)) - cos(data1(1,1)) * cos(data1(1,3)) )/( sin(data1(1,1)) * sin(data1(1,3)) ) );
%o3
vysledky1(1,3) = acos( ( cos(data1(1,3)) - cos(data1(1,1)) * cos(data1(1,2)) )/( sin(data1(1,1)) * sin(data1(1,2)) ) );
%execes
vysledky1(1,4) = vysledky1(1,1) + vysledky1(1,2) + vysledky1(1,3) - pi;

%UUU
%s1
vysledky1(2,1) = acos( ( cos(data1(2,1)) + cos(data1(2,2)) * cos(data1(2,3)) )/( sin(data1(2,2)) * sin(data1(2,3)) ) );
%s2
vysledky1(2,2) = acos( ( cos(data1(2,2)) + cos(data1(2,1)) * cos(data1(2,3)) )/( sin(data1(2,1)) * sin(data1(2,3)) ) );
%s3
vysledky1(2,3) = acos( ( cos(data1(2,3)) + cos(data1(2,1)) * cos(data1(2,2)) )/( sin(data1(2,1)) * sin(data1(2,2)) ) );
%exces
vysledky1(2,4) = data1(2,1) + data1(2,2) + data1(2,3) - pi;

%SUS
%s3
vysledky1(3,1) = acos( cos(data1(3,1)) * cos(data1(3,2)) + sin(data1(3,1)) * sin(data1(3,2)) * cos(data1(3,3)) );
%o1
vysledky1(3,2) = acos( ( cos(data1(3,1)) - cos(data1(3,2)) * cos(vysledky1(3,1)) )/( sin(data1(3,2)) * sin(vysledky1(3,1)) ) );
%o2
vysledky1(3,3) = acos( ( cos(data1(3,2)) - cos(data1(3,1)) * cos(vysledky1(3,1)) )/( sin(data1(3,1)) * sin(vysledky1(3,1)) ) );
%exces
vysledky1(3,4) = data1(3,3) + vysledky1(3,2) + vysledky1(3,3) - pi;

%USU
%o1
vysledky1(4,1) = acos( -1*cos(data1(4,2)) * cos(data1(4,3)) + sin(data1(4,2)) * sin(data1(4,3)) * cos(data1(4,1)) );
%s2
vysledky1(4,2) = acos( ( cos(data1(4,2)) + cos(data1(4,3)) * cos(vysledky1(4,1)) )/( sin(data1(4,3)) * sin(vysledky1(4,1)) ) );
%s3
vysledky1(4,3) = acos( ( cos(data1(4,3)) + cos(data1(4,2)) * cos(vysledky1(4,1)) )/( sin(data1(4,2)) * sin(vysledky1(4,1)) ) );
%exces
vysledky1(4,4) = data1(4,2) + data1(4,3) + vysledky1(4,1) - pi;

%UUS
%s2
vysledky1(5,1) = asin( sin(data1(5,2)) * sin(data1(5,3)) /  sin(data1(5,1))); %Pozor na vysledek sinu
if (( vysledky1(5,1)/data1(5,3) ) < 1 && (data1(5,2)/data1(5,1)>1 ) ) || (( vysledky1(5,1)/data1(5,3) ) > 1 && (data1(5,2)/data1(5,1) < 1 ) )
    vysledky1(5,1) = pi - vysledky1(5,1);
end

%s3
vysledky1(5,2) = 2*atan( (tan((data1(5,3) + vysledky1(5,1))/2)) * (cos( (data1(5,1) + data1(5,2))/2 )) / (cos( (data1(5,1) - data1(5,2))/2 )) );
%o3
vysledky1(5,3) = acos( ( cos(vysledky1(5,2)) - cos(data1(5,3)) * cos(vysledky1(5,1)) )/( sin(data1(5,3)) * sin(vysledky1(5,1)) ) );
%exces
vysledky1(5,4) = data1(5,1) + data1(5,2) + vysledky1(5,3) - pi;

%SSU
%o2
vysledky1(6,1) = asin( sin(data1(6,2)) * sin(data1(6,3)) /  sin(data1(6,1))); %Pozor na vysledek sinu
if (( vysledky1(6,1)/data1(6,3) ) < 1 && (data1(6,2)/data1(6,1)>1 ) ) || (( vysledky1(6,1)/data1(6,3) ) > 1 && (data1(6,2)/data1(6,1) < 1 ) )
    vysledky1(6,1) = pi - vysledky1(6,1);
end
%s3
vysledky1(6,2) = 2*atan( (tan((data1(6,2) + data1(6,1))/2)) * (cos( (vysledky1(6,1) + data1(6,3))/2 )) / (cos( (data1(6,3) - vysledky1(6,1))/2 )) );
%o3
vysledky1(6,3) = acos( ( cos(vysledky1(6,2)) - cos(data1(6,1)) * cos(data1(6,2)) )/( sin(data1(6,1)) * sin(data1(6,2)) ) );
%exces
vysledky1(6,4) = data1(6,3) + vysledky1(6,1) + vysledky1(6,3) - pi;

%Prevod na stupne a metry
matice_prevodu2 = [
    180/pi 180/pi 180/pi 180/pi
    R R R 180/pi
    R 180/pi 180/pi 180/pi
    180/pi R R 180/pi
    R R 180/pi 180/pi
    180/pi R 180/pi 180/pi
];

vysledky1 = vysledky1 .* matice_prevodu2;

disp('Vysledky prikladu 1.1')
disp('Vysledky jsou v poradi')
disp('o1 o2 o3 exces')
disp('s1 s2 s3 exces')
disp('s3 o1 o2 exces')
disp('o1 s2 s3 exces')
disp('s2 s3 o3 exces')
disp('o2 s3 o3 exces')
vysledky1
rad2dms( nul22pi(vysledky1*pi/180) );
fprintf('\n')
rad2dms( data1 );

