Если вы привязываете тело к объекту hgtransform, вы можете использовать команду makehgtform для создания матрицы преобразования для этого объекта. Самый простой способ - использовать эту форму makehgtform:
h = hgtransform;
m = makehgtform('axisrotate', [ax ay az], r);
set(h, 'Matrix', m);
Опция axisrotate позволяет вращаться вокруг произвольной оси. В этом случае [ax ay az] - это вектор, который является нормалью к плоскости, в которой вы хотите повернуть. Это плоскость, которая проходит через два вектора, между которыми вы пытаетесь вращаться. Таким образом, вы используете перекрестное произведение оси Z и нормали. Это дает вам вектор, который является нормальным для обоих ваших векторов, и который определяет ориентацию плоскости, которая проходит через оба из них.
Теперь вам нужно выяснить угол поворота. Значение r - это угол, который вы хотите повернуть вокруг этой оси в радианах. Есть несколько способов получить это. Проще всего, если ваши два вектора нормализованы. Тогда величина перекрестного произведения равна греху угла, а величина точечного произведения равна cos угла. Имеет ли это смысл?