function [A,scale,a_euler,xyz0exp]=rot_cos_scale(x0,y0,z0,x,y,z)
% определение направлЯющих косинусов при повернутых СК
% и 3-х постоЯнных (между компонентами вектора)
% 
% x(k)*axx+y(k)*axy+z(k)*axz+d1=x0(k);
% x(k)*ayx+y(k)*ayy+z(k)*ayz+d2=y0(k);
% x(k)*azx+y(k)*azy+z(k)*azz+d3=z0(k);
%
% axx, ayy, azz - это масштабные коэффициенты, отличие которых от "1"
%       указывает масштабные искажения
%
%  [A [,scale [,a_euler [,xyz0exp]]]]=rot_cos(x0,y0,z0,x,y,z);
%
% A - матрица (3х4), последний столбец - постоЯнные d1,d2,d3
%
%     | axx/kx axy/ky axz/kz |
% A = | ayx/kx ayy/ky ayz/kz |
%     | azx/kx azy/ky azz/kz |
%
% scale=[kx ky kz]; - масштабные коэффициенты
%        kx=sqrt(axx^2+ayx^2+azx^2)
%        ky=sqrt(axy^2+ayy^2+azy^2)
%        kz=sqrt(axz^2+ayz^2+azz^2)
%
% a_euler - вектор Эйлеровых углов (fi,teta,psi) в градусах;
% xyz0exp - матрица вычисленных векторов [x0exp y0exp z0exp];

x0=x0(:); y0=y0(:); z0=z0(:);
x=x(:); y=y(:); z=z(:);
N=length(x);
A_abcd=[x y z ones(N,1)];

% направлЯющие косинусы
abcd1=A_abcd\x0;	% a1,b1,c1,d1
abcd2=A_abcd\y0;	% a2,b2,c2,d2
abcd3=A_abcd\z0;	% a3,b3,c3,d3

A=[abcd1'; abcd2'; abcd3'];

% масштабные коэффициенты
kx=sqrt(sum(A(:,1).^2));
ky=sqrt(sum(A(:,2).^2));
kz=sqrt(sum(A(:,3).^2));
scale=[kx ky kz];

% нормировка
A = [A(:,1)/kx A(:,2)/ky A(:,3)/kz A(:,4)];

% Вычиление углов Эйлера (крен, тонгаж, курс)
fi=r2d(atan2(-A(2,3),A(3,3)));
teta=r2d(atan2(A(1,3),sqrt(A(2,3)^2+A(3,3)^2)));
psi=r2d(atan2(-A(1,2),A(1,1)));
a_euler=[fi teta psi];

tmp0=(A(:,1:3)*[x(:) y(:) z(:)]')';
xyz0exp=[tmp0(:,1)+abcd1(4) tmp0(:,2)+abcd2(4) tmp0(:,3)+abcd3(4)];
