MATLAB - вращать объект с помощью makehgtform - вращать только вокруг начала координат
Я пытаюсь использовать ползунок и вращать сферу в Matlab. Это работает, если сфера находится в начале координат. но моя сфера находится в точке (2.5,2.5,7.5), когда я поворачиваю ее, вся сфера все еще вращается вокруг начала координат. Я хочу, чтобы он оставался в точке и просто вращался.
Мой код: это моя функция слайдера
function slider_callback1(hObject, eventdata)
s1 = get(slider, 'value');
R1 = makehgtform('zrotate', s1);
set(t1, 'Matrix', R1);
drawnow;
end
куда
t1 = hgtransform;
set(sphere_1, 'Parent', t1);
2 ответа
Решение
Спасибо, вот как я это решил:
function slider_callback1(hObject, eventdata)
s1 = get(cabin, 'value');
R1 = makehgtform('zrotate', s1);
R1(1,4) = 2.5;
R1(2,4) = 2.5;
R1(3,4) = 7.5;
set(t1, 'Matrix', R1);
s1 = floor(s1 * (180/pi) * 10)/10;
set(sth1, 'String', num2str(s1));
drawnow;
end
Чтобы вращаться вокруг произвольной точки, вам нужно три преобразования; перевод на начало координат, сам поворот, а затем перевод обратно. Они, конечно, могут быть объединены в одну матрицу 4D преобразования.
Я никогда не использовал makehgtform
, но из документации, похоже, есть 'translate'
вариант, который звучит как то, что вам нужно.