matlab画一个三角形的运动过程,并存储为gif文件,或者avi文件

matlab画一个三角形的运动过程,并存储为gif文件,或者avi文件

  1. 第一步,给出用matlab画一个三角形运动过程的代码。
  2. 第二步,修改代码,把此过程存储为gif动图。
  3. 第三步,进一步修改代码,把此过程存储为avi文件。

实现三角形运动

确定一个三角形位置、运动方向、大小

function [x y]=Triangle(pos,vec,dis)
% pos 定义三角形中心位置
% vec 定义三角形方向
% dis 定义三角形大小
vec  = vec/norm(vec);
vecL = [-vec(2) vec(1)]/sqrt(3);
pos1 = pos + dis*vec;
pos2 = pos - dis*vec + 2*dis*vecL;
pos3 = pos - dis*vec - 2*dis*vecL;
x = [pos1(1) pos2(1) pos3(1)];
y = [pos1(2) pos2(2) pos3(2)];

画出运动过程

pos = [-10,-10];
vec = [10,10];
dis = 8;

[x y] = Triangle(pos, vec, dis);
h = fill(x,y,'g'),hold on
axis([-30, 100, -30, 100]);
grid on

for k = 0:100
    pos = pos + [1 1];
    [x y] = Triangle(pos, vec, dis);
    set(h,'XData',x,'YData',y); %%重置绘图对象
    
   pause(0.001);
end

得到的效果:
三角形运动

把运动过程存储为gif文件

pos = [-10,-10];
vec = [10,10];
dis = 8;

[x y] = Triangle(pos, vec, dis);
h = fill(x,y,'g'),hold on
axis([-30, 100, -30, 100]);
grid on

pic_num = 1;%为了存储gif文件

for k = 0:100
    pos = pos + [1 1];
    [x y] = Triangle(pos, vec, dis);
    set(h,'XData',x,'YData',y); %%重置绘图对象
    
    %%%%%%%%%%存储gif文件代码段%%%开始
    F=getframe(gcf);
    I=frame2im(F);
    [I,map]=rgb2ind(I,256);
    if pic_num == 1
        imwrite(I,map,'test0.gif','gif', 'Loopcount',inf,'DelayTime',0.2);
    else
        imwrite(I,map,'test0.gif','gif','WriteMode','append','DelayTime',0.2);
    end
    pic_num = pic_num + 1;
    %%%%%%%%%%存储gif文件代码段%%%结束
    
   pause(0.001);
end

把运动过程存储为avi文件

pos = [-10,-10];
vec = [10,10];
dis = 8;

[x y] = Triangle(pos, vec, dis);
h = fill(x,y,'g'),hold on
axis([-30, 100, -30, 100]);
grid on

%%%%%%%%%%%%%%%%%%%%%%%%%%是否存为视频文件%%%%%%%%%%%%%%%%%%%%%开始
bSaveAVI = 1;  %%是否将重绘过程保存到视频文件

if bSaveAVI
    aviname = input('input the file name for avi: ','s');
    aviobj=VideoWriter(aviname);%, 'Uncompressed AVI');   %定义一个视频文件用来存动画
    open(aviobj);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%是否存为视频文件%%%%%%%%%%%%%%%%%%%%%结束

for k = 0:100
    pos = pos + [1 1];
    [x y] = Triangle(pos, vec, dis);
    set(h,'XData',x,'YData',y); %%重置绘图对象
    
    
    %%%%%%%%%%%%%%%%%%%%%%%%%%存为视频文件%%%%%%%%%%%%%%%%%%%%%开始
    if bSaveAVI 
        frame=getframe(gca);   %把图像存入视频文件中
        im=frame2im(frame);
        writeVideo(aviobj,im)
    end
    %%%%%%%%%%%%%%%%%%%%%%%%%%存为视频文件%%%%%%%%%%%%%%%%%%%%%结束
    
   pause(0.001);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%关闭视频文件句柄%%%%%%%%%%%%%%%%%%%%%开始
if bSaveAVI
    close(aviobj); %%关闭视频文件句柄
end
%%%%%%%%%%%%%%%%%%%%%%%%%%关闭视频文件句柄%%%%%%%%%%%%%%%%%%%%%结束
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值