UWBIns/lib/rotation/rv2m.m

19 lines
553 B
Matlab
Raw Normal View History

2025-04-16 20:15:33 +08:00
function m = rv2m(rv)
% <20><>Ч<EFBFBD><D0A7>תʸ<D7AA><CAB8>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA>ת<EFBFBD><D7AA><EFBFBD><EFBFBD>
%
% Input: rv - <20><>תʸ<D7AA><CAB8>
% Output: m -<2D><>ת<EFBFBD><D7AA><EFBFBD><EFBFBD> Cb2n <20>Ϲ<EFBFBD><CFB9><EFBFBD> 2.2.23
% m = I + sin(|rv|)/|rv|*(rvx) + [1-cos(|rv|)]/|rv|^2*(rvx)^2
% where rvx is the askew matrix or rv.
nm2 = rv'*rv; % <20><>תʸ<D7AA><CAB8><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
if nm2<1.e-8 % <20><><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̩<EFBFBD><CCA9>չ<EFBFBD><D5B9>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ǻ<EFBFBD><C7BA><EFBFBD>
a = 1-nm2*(1/6-nm2/120); b = 0.5-nm2*(1/24-nm2/720); % a->1, b->0.5
else
nm = sqrt(nm2);
a = sin(nm)/nm; b = (1-cos(nm))/nm2;
end
VX = askew(rv);
m = eye(3) + a*VX + b*VX^2;