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' вариант, который звучит как то, что вам нужно.

Другие вопросы по тегам