Matlab 在视频中使用aero.animation

Matlab 在视频中使用aero.animation,matlab,animation,aero,Matlab,Animation,Aero,我正在尝试使用aero.animation在matlab中为导弹运动设置动画。 当我使用以下代码时,它会播放视频,但只保存第一帧 *数据以[time,x,y,angle]矩阵的形式存在,其中所有的时间,x,y和角度都是我预先计算的nx1向量。在我的例子中,n=1312,我把x和y作为列向量的零。角度是解的第五列,它是1312x7的矩阵,我以前计算过 data = [time, zeros(length(time), 1), zeros(length(time), 1), SOLUTION(:,

我正在尝试使用aero.animation在matlab中为导弹运动设置动画。 当我使用以下代码时,它会播放视频,但只保存第一帧

*数据以[time,x,y,angle]矩阵的形式存在,其中所有的时间,x,y和角度都是我预先计算的nx1向量。在我的例子中,n=1312,我把x和y作为列向量的零。角度是解的第五列,它是1312x7的矩阵,我以前计算过

data = [time, zeros(length(time), 1), zeros(length(time), 1), SOLUTION(:, 5)];
h=Aero.Animation;
f=figure;
h.Figure=f;
h.initialize();
h.FramesPerSecond=10
h.TimeScaling = 5;
idx1=h.createBody('testrocket.ac','ac');
h.bodies{1}.TimeseriesSourceType='Array3DoF';
h.bodies{1}.timeseriesSource=data;

h.Camera.offset=[-150 -150 0];
h.show()

h.VideoRecord = 'on';
h.VideoQuality = 50;
h.VideoCompression = 'Motion JPEG AVI'
h.VideoFilename = 'astMotion_JPEG';
h.play()
h.VideoRecord='off';
代码现在看起来是这样的,但视频仍然记录了几秒钟相同的图像,而不是记录导弹运动的实际视频。当我播放录制的视频时,它会显示冻结的情况


谢谢。

我找到了一个解决方案,但你必须知道动画的持续时间

现在您的问题是由运行h.VideoRecord='off'引起的;在h.play命令后不久发出命令,但h.VideoRecord='off';命令不等待上一个命令完成。无论如何,你可以使用暂停功能来避免这个问题

% // ...
h.play()
pause(timeDurationOfAnimation) % // timeDurationOfAnimation -> time unit in seconds
h.VideoRecord = 'off';
编辑:动画/视频的持续时间取决于您指定的FramesPerSecond和TimeScale属性值

+++更多说明: 我的数据是100x4,矩阵表示时间向量的长度是100。时间分辨率是0.1秒,所以时间向量像时间=[0,0.1,0.2,0.3,…,9.8,9.9,10]'。如果我使用你的时间设置,即FramesPerSecond=10和TimeScaling=5,我会得到2秒的视频。因为TimeScaling=5意味着每秒显示5个数据包,但一个数据包包含10帧,因此根据设置动画每秒显示50帧。我的整个数据包含100帧,所以100/50=2秒,所以动画/视频的持续时间为2秒。请记住,时间刻度是由于加速动画而产生的,您可以将动画录制为加速动画

我的建议是根据时间更新的频率指定FramesPerSecond的值:


它帮助我获得了几秒钟的视频,但它在整个视频中显示的图像仍然是第一帧。这就像视频录制30秒一样。首先感谢你的帮助,我试着按照你说的做,它在matlab中播放视频的速度比以前慢,录制了5分钟的视频。老问题仍然存在,例如,当我播放我在media player中录制的视频时,它会显示5分钟相同的图像。@ben-不客气,ben,没问题:事实上,你原来的问题已经解决了。你不再只录制一帧了。另一方面,您可以使用TimeScaling=5和FramesPerSecond=10。您可以省略pause dataend、1和h.VideoRecord='off';命令。完成动画后,将这些命令写入命令窗口。。我刚刚对时间刻度和FramesPerSecond的工作原理做了额外的解释。它可能记录了多个帧,但问题是,当播放视频时,它显示的是相同的图像。假设我没有看到导弹的任何运动,只看到它在记录文件中的第一个位置。@ben-别担心,我看到你了,我只是假设它只有在你使用我建议的设置时才显示相同的图像。无论如何,我复制了这个案例,我看到了导弹的运动。我想这是因为在我的例子中,导弹飞行了数百公里。所以,你们的新问题一定是由于导弹的规模和你们的弹道范围和相机的位置包括缩小因子。实际上,我以前并没有使用过aero.animation,所以我没什么可说的,但你们应该看看导弹的规模。祝你好运,本。。
% // ...
h.FramesPerSecond = 1 / ( data(2, 1) - data(1, 1) ) % // According to my Time resolution that would be 10;
h.TimeScaling = 1;
% // ...
pause( data(end, 1) )
h.VideoRecord = 'off';