首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab: Videowriter创建只有部分图形的视频。

Matlab: Videowriter创建只有部分图形的视频。
EN

Stack Overflow用户
提问于 2015-07-01 12:34:25
回答 1查看 638关注 0票数 0

我制作了一个剧本,描绘了火卫一、MEX和MAVEN环绕火星的轨道的动画。我想要这个动画的视频。它的工作几乎完美,但出于某种原因,创建的视频是一个放大的动画在Matlab和我不知道为什么。

这是我的代码(用cspice忽略一切,这是接收空间中物体位置的工具箱):

代码语言:javascript
复制
clear

%Load kernels
cspice_furnsh( 'de421.bsp' )
cspice_furnsh( 'MAR085.BSP' )
cspice_furnsh( 'maven_v03.tf' )
cspice_furnsh( 'MEX_130305_STEP.TSC' )
cspice_furnsh( 'MEX_V11.TF' )
cspice_furnsh( 'MVN_SCLKSCET.00000.tsc' )
cspice_furnsh( 'NAIF0010.TLS' )
cspice_furnsh( 'ORMF_______________00880.BSP' )
cspice_furnsh( 'PCK00010.TPC' )
cspice_furnsh( 'spk_m_141027-151027_110526.bsp')
cspice_furnsh( 'ORMM__150301000000_01138.BSP' )

% Flyby 09 APR 2015    
    ETbegin = cspice_str2et( '2015-04-09T06:30:00' );
    ETend = cspice_str2et( '2015-04-09T14:10:00' );

% Generation of calculation input array
    interval_ET=[ETbegin:1:ETend];

% Computation of positions of MAVEN, MEX and Phobos in reference to Mars
    position_MAVEN_Mars = cspice_spkpos...
        ( 'maven', interval_ET, 'J2000', 'none', 'mars' );
    position_MEX_Mars = cspice_spkpos...
        ( 'mex', interval_ET, 'J2000', 'none', 'mars' );
    position_Phobos_Mars = cspice_spkpos...
        ( 'phobos', interval_ET, 'J2000', 'none', 'mars' );

MEX_x = position_MEX_Mars(1,:);
MEX_y = position_MEX_Mars(2,:);
MEX_z = position_MEX_Mars(3,:);
MAVEN_x = position_MAVEN_Mars(1,:);
MAVEN_y = position_MAVEN_Mars(2,:);
MAVEN_z = position_MAVEN_Mars(3,:);
PHOBOS_x = position_Phobos_Mars(1,:);
PHOBOS_y = position_Phobos_Mars(2,:);
PHOBOS_z = position_Phobos_Mars(3,:);

writerObj = VideoWriter('video_flyby.avi');
writerObj.FrameRate = 30;
writerObj.Quality = 100;
open(writerObj);

figure
plot3(0,0,0,'ro-',MEX_x,MEX_y,MEX_z,'b',...
                  MAVEN_x,MAVEN_y,MAVEN_z,'r',...
                  PHOBOS_x,PHOBOS_y,PHOBOS_z,'k');
legend('Mars','MEX','MAVEN','Phobos');
xlabel('X-axis (km)');
ylabel('Y-axis (km)');
zlabel('Z-axis (km)');
xlim([-20000 20000]);
view([47.5 32]);
grid on;
hold on;
m1 = plot3(MEX_x(1),MEX_y(1),MEX_z(1),'b*','MarkerSize',10);
m2 = plot3(MAVEN_x(1),MAVEN_y(1),MAVEN_z(1),'r*','MarkerSize',10);
m3 = plot3(PHOBOS_x(1),PHOBOS_y(1),PHOBOS_z(1),'k*','MarkerSize',10);
axis tight
set(gca,'nextplot','replacechildren');
set(gcf,'Renderer','zbuffer');
for n = 1:100:numel(PHOBOS_x)
    set(m1, 'XData', MEX_x(n), 'YData', MEX_y(n), 'ZData', MEX_z(n));
    set(m2, 'XData', MAVEN_x(n), 'YData', MAVEN_y(n), 'ZData', MAVEN_z(n));
    set(m3, 'XData', PHOBOS_x(n), 'YData', PHOBOS_y(n), 'ZData', PHOBOS_z(n));
    drawnow;
    frame = getframe;
    writeVideo(writerObj,frame);
end

close(writerObj);

% Unload kernels
cspice_kclear;

这是Matlab中的结果。

这就是整个视频的样子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-01 12:50:28

如果使用不带参数的getframe,则只捕获当前轴。创建一个图形句柄,并将其作为参数提供给getframe。这样,您将捕获实际数字的所有内容。

以下是受影响的两条线,只是为了向您展示一下原理:

代码语言:javascript
复制
fh = figure;
frame = getframe(fh);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31161480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档