omnislerp.m 546 B

12345678910111213141516
  1. function [interp_value,slerpmat] = omnislerp(target_coord,data_coord,data_value,interp_func,mode)
  2. if ~exist('interp_func','var'),interp_func = @(x) x;end
  3. if ~exist('mode','var'),mode = 'slerp';end
  4. switch mode
  5. case 'slerp'
  6. target_coord = target_coord.normalize;
  7. data_coord = data_coord.normalize;
  8. slerpmat = interp_func(target_coord.Qangle(data_coord.T));
  9. case 'lerp'
  10. slerpmat = interp_func(norm(target_coord-data_coord.T));
  11. end
  12. slerpmat = slerpmat./sum(slerpmat);
  13. interp_value = slerpmat*data_value;
  14. end