避免错误/生涩的动画

时间:2016-08-04 21:02:08

标签: matlab animation 3d matlab-figure

我在下面有这个代码。它基本上以3D形式旋转一个盒子。我知道我可以使用camorbit旋转相机,但实际上我想旋转物体,而不是旋转相机。所以策略是在so(3)中创建一个元素,并将指数映射到SO(3),因为元素随时间不断变化。

% Create object

 yo = unique([-1 -1 -1; perms([1 1 -1]); perms([1 -1 -1]); 1 1 1], 'rows');
 yo2 = delaunay(yo(:,1), yo(:,2), yo(:,3));
 box=tetramesh(yo2, yo);

% Create prescribed rotation

seedMat=skewdec(3,1)*skewdec(3,2)*skewdec(3,3);         % so(3)
t=linspace(0,20,500);
r=zeros(1,4,length(t));
reqTraj=zeros(3,3,length(t));

for i=1:length(t)
    reqTraj(:,:,i)=expm(seedMat*t(i));                  % SO(3)
    r(:,:,i) = vrrotmat2vec(expm(seedMat*t(i)));        %Axis angle form
end

% Freeze axis

axis vis3d
axis([   -2    2   -2    2   -2    2])

% Rotate

for i=1:length(t)
rotate(box,r(1,1:3,i),r(1,4,i))
pause(0.001)
end

我的问题是为什么这个动画生涩?我有什么办法可以解决它吗?

编辑:如下更改最后一部分,使得错误/不稳定行为消失,但导致了全新的旋转行为。所以我不确定这是否是正确的方法。有人可以评论吗?

% Rotate
for i=2:length(t)
rotate(box,r(1,1:3,i),r(1,4,i-1)-r(1,4,i))
pause(0.001)
end

0 个答案:

没有答案