RotationVecVec.m 708 B

1234567891011121314151617181920212223
  1. % RotationVecVec.m
  2. %
  3. % Calculates the rotation matrix between 2 vectors based on the Rodrigues' formula.
  4. function [rot] = RotationVecVec(vec1, vec2)
  5. assert(size(vec1,1) > size(vec1,2), 'Not using column vectors');
  6. assert(size(vec1,2) == 1, 'Not using column vectors');
  7. assert(size(vec1,1) == size(vec2,1), 'Vector dimensions mismatch');
  8. assert(size(vec1,2) == size(vec2,2), 'Vector dimensions mismatch');
  9. vec1 = vec1 / norm(vec1);
  10. vec2 = vec2 / norm(vec2);
  11. if (sum(abs(vec1 + vec2) < 0.000001) == 3) % opposite vectors
  12. midVec = Perpendicular(vec1);
  13. else
  14. midVec = vec1 + vec2;
  15. end
  16. midVec = midVec/norm(midVec);
  17. rot = Rodrigues(midVec, pi);
  18. end