为Matlab创建不同帧的3D点的轨迹

时间:2013-09-02 08:39:03

标签: matlab plot

我有一个显示here的向量,代表视频X的3d点YZframe1。我有另一个矢量用于视频X的3D点YZframe2,等等。

假设我有10帧。我希望在接下来的9帧中跟踪frame1中的每个3D点。换句话说,我想通过下一帧获得frame1中每个3D点的轨迹,如图trajectories of 3d points所示。

如果有人可以请建议或指导我如何做到这一点。

1 个答案:

答案 0 :(得分:2)

首先:这些点对我来说就像一个表面......你确定你想要个别粒子的轨迹吗?恕我直言,通过你的点动画插值曲面将是更好的选择,但我可能是错的。

现在,有几种方法可以做你想要的。首先使用movie命令与getframe结合使用。假设您有一个名为frames的单元格数组,其中包含

frames{1} = XX;

您已关联的数据,以及frames{2}frames{N}剩余N帧的数据。然后

% This could take a while....
figure(1);
set(gca, 'NextPlot', 'ReplaceChildren');
for ii = 1:N      
    pts = frames{ii};
    plot3(pts(:,1), pts(:,2), pts(:,3), 'r.');    
    F(ii) = getframe;  
end

% Then playback the movie 100 times
movie(F, 100)

如果你不想要一张动态影像,而是想要所有点的轨迹的静态多色图,你可以通过一次调用plot3来完成所有这些。 2帧的示例:

YY = XX;
YY(:,1) = YY(:,1) + 10*rand(size(YY(:,1)))-5;
YY(:,2) = YY(:,2) - 2*rand(size(YY(:,2)))+1;

plot3([XX(:,1) YY(:,1)].', [XX(:,2) YY(:,2)].', [XX(:,3) YY(:,3)].')

警告:这可能需要年龄并且看起来完全无法理解超过20分(这就是为什么我会通过这些点设置内插曲面的动画,并使用surf来制作框架:)

另一种选择是使用comet3,它会描绘出一个给定的轨迹。在MATLAB命令窗口中键入doc comet3以获取更多信息。