我在下面有这个代码。它基本上以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