MATLAB - 使用makehgtform旋转对象 - 仅在原点周围旋转

时间:2013-03-02 23:32:10

标签: matlab math rotation transform

我正在尝试使用滑块并在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 个答案:

答案 0 :(得分:2)

要围绕任意点旋转,您需要三个变换;翻译到原点,旋转本身,然后翻译回来。这些当然可以组合成一个4D变换矩阵。

我从未使用makehgtform,但是从文档中看来它似乎有'translate'选项,听起来就像你需要的那样。

答案 1 :(得分:0)

谢谢,这就是我解决它的方法:

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