matlab画一个三角形的运动过程
matlab画一个三角形的运动过程,并存储为gif文件,或者avi文件
- 第一步,给出用matlab画一个三角形运动过程的代码。
- 第二步,修改代码,把此过程存储为gif动图。
- 第三步,进一步修改代码,把此过程存储为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
%%%%%%%%%%%%%%%%%%%%%%%%%%关闭视频文件句柄%%%%%%%%%%%%%%%%%%%%%结束