matlab制作圆摆线动画

前言

matlab是一款非常著名的科学计算和仿真软件,以其强大的数学库、数据可视化功能和扩展工具箱而闻名,这里利用matlab绘制了圆的四种摆线的形成动画,话不多言,直接上代码。

圆滚线


%画圆滚线
t=0:pi/100:2*pi;       
r=1;        %圆的半径
v=1.5;        %圆心滚动的速度
w=v/r;      %圆滚动的角速度
s=0;
figure;
title('圆滚线');
hold on;
axis equal;
axis([-r 2*pi*r+r -r r]);
for time=0:0.1:2*pi/w
    s=v*time;
    x=s+r*cos(t);
    point_x = s+r*cos(-pi/2-w*time);
    y=r*sin(t);
    point_y = r*sin(-pi/2-w*time);
    h=plot(x,y,'r');
    l=plot([s point_x],[0 point_y],'-r');
    if(abs(time-0)<1e-3)
        plot(point_x,point_y,'.g');
        res_x=point_x;
        res_y=point_y;
        %生成第一张图片,并写入gif文件
        frame=getframe(gcf);
        imind=frame2im(frame);
        [imind,cm]=rgb2ind(imind,256);
        imwrite(imind,cm,'圆滚线.gif','gif','Loopcount',inf,'DelayTime',1e-3);
    else
        plot([res_x point_x],[res_y point_y],'-g');
        res_x=point_x;
        res_y=point_y;
        %生成后续图片,并写入gif文件
        frame=getframe(gcf);
        imind=frame2im(frame);
        [imind,cm]=rgb2ind(imind,256);
        imwrite(imind,cm,'圆滚线.gif','gif','WriteMode','append','DelayTime',1e-3);
    end
    %pause(0.1);               %制作gif时建议去掉时延
    delete(h);
    delete(l);
end
hold off;

运行后生成的gif图片:
使用matlab生成的圆滚线图片

螺旋线

%画螺旋线
v=2;         %圆心的增长速度
w=1.5;       %旋转的角速度
figure;
title('螺旋线');
hold on;
axis equal;
axis([-15 15 -15 15]);
for time=0:0.1:2*pi
    x=v*time*cos(w*time);
    y=v*time*sin(w*time); 
    l=plot([0 x],[0 y],'-r');
    if(abs(time-0)<1e-3)
        plot(x,y,'.g');
        res_x=x;
        res_y=y;
        %生成第一张图片,并写入gif文件
        frame=getframe(gcf);
        imind=frame2im(frame);
        [imind,cm]=rgb2ind(imind,256);
        imwrite(imind,cm,'螺旋线.gif','gif','Loopcount',inf,'DelayTime',1e-3);
    else
        plot([res_x x],[res_y y],'-g');
        res_x=x;
        res_y=y;
        %生成后续图片,并写入gif文件
        frame=getframe(gcf);
        imind=frame2im(frame);
        [imind,cm]=rgb2ind(imind,256);
        imwrite(imind,cm,'螺旋线.gif','gif','WriteMode','append','DelayTime',1e-3);
    end
    %pause(0.1);          %制作gif时建议去掉时延
    delete(l);
end
hold off;

执行后生成的gif图片:
在这里插入图片描述

外圆摆线

%画外圆摆线
w1 = 3;     %外圆圆心旋转的角速度
r1 = 4;     %内圆的半径
r2 = 1;     %外圆的半径
w2 = 9;     %外圆滚动的角速度
pp = 0:pi/100:2*pi;
figure;
title('外圆摆线');
hold on;
axis equal;
axis([-(r1+2*r2) r1+2*r2 -(r1+2*r2) r1+2*r2]);
x=r1*cos(pp);
y=r1*sin(pp);
plot(x,y,'r');
for time=0:0.01:2*pi/w1
    xx = (r1+r2)*cos(w1*time);
    yy = (r1+r2)*sin(w1*time);
    x = xx+r2*cos(pp);
    y = yy+r2*sin(pp);
    px = xx+r2*cos(w2*time);
    py = yy+r2*sin(w2*time);
    h=plot(x,y,'r');
    l=plot([xx,px],[yy,py],'-r') ;
    if(abs(time-0)<1e-3)
        plot(px,py,'.g');
        res_x=px;
        res_y=py;
        %生成第一张图片,并写入gif文件
        frame=getframe(gcf);
        imind=frame2im(frame);
        [imind,cm]=rgb2ind(imind,256);
        imwrite(imind,cm,'外圆滚线.gif','gif','Loopcount',inf,'DelayTime',1e-3);
    else
        plot([res_x px],[res_y py],'-g');
        res_x=px;
        res_y=py;
        %生成后续图片,并写入gif文件
        frame=getframe(gcf);
        imind=frame2im(frame);
        [imind,cm]=rgb2ind(imind,256);
        imwrite(imind,cm,'外圆滚线.gif','gif','WriteMode','append','DelayTime',1e-3);
    end
    %pause(0.01);        %制作gif时建议去掉时延
    delete(h);
    delete(l);
end
hold off;

执行后生成的图片:
在这里插入图片描述

内圆摆线

%画外圆摆线
w1 = 3;     %内圆圆心旋转的角速度
r1 = 4;     %外圆的半径
r2 = 1;     %内圆的半径
w2 = 9;     %内圆滚动的角速度
pp = 0:pi/100:2*pi;
figure;
title('内圆摆线');
hold on;
axis equal;
axis([-(r1+2*r2) r1+2*r2 -(r1+2*r2) r1+2*r2]);
x=r1*cos(pp);
y=r1*sin(pp);
plot(x,y,'r');
for time=0:0.01:2*pi/w1
    xx = (r1-r2)*cos(w1*time);
    yy = (r1-r2)*sin(w1*time);
    x = xx+r2*cos(pp);
    y = yy+r2*sin(pp);
    px = xx+r2*cos(w2*time);
    py = yy+r2*sin(w2*time);
    h=plot(x,y,'r');
    l=plot([xx,px],[yy,py],'-r'); 
    if(abs(time-0)<1e-3)
        plot(px,py,'.g');
        res_x=px;
        res_y=py;
        %生成第一张图片,并写入gif文件
        frame=getframe(gcf);
        imind=frame2im(frame);
        [imind,cm]=rgb2ind(imind,256);
        imwrite(imind,cm,'内圆滚线.gif','gif','Loopcount',inf,'DelayTime',1e-3);
    else
        plot([res_x px],[res_y py],'-g');
        res_x=px;
        res_y=py;
        %生成后续图片,并写入gif文件
        frame=getframe(gcf);
        imind=frame2im(frame);
        [imind,cm]=rgb2ind(imind,256);
        imwrite(imind,cm,'内圆滚线.gif','gif','WriteMode','append','DelayTime',1e-3);
    end
    %pause(0.01);             %制作gif时建议去掉时延
    delete(h);
    delete(l);
end
hold off;

执行后生成的gif图片:
在这里插入图片描述

  • 27
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
动画可以使用Matlab的“animation”工具箱。下面是一个简单的制作动画的步骤: 1.创建一个figure对象并设置其属性,例如标题和尺寸。 2.使用subplot函数为动画创建一个轴。 3.使用plot函数在轴上绘制初始状态。 4.使用“animation”工具箱中的“VideoWriter”函数创建一个视频文件。 5.使用“animation”工具箱中的“animation”函数创建一个动画对象。 6.使用“animation”对象的“FrameRate”属性设置帧速率(每秒的帧数)。 7.使用“animation”对象的“addFrame”方法添加每个帧的图像。 8.使用“animation”对象的“writeVideo”方法将动画写入视频文件。 9.使用“animation”对象的“finish”方法完成动画。 以下是一个简单的Matlab动画代码示例: ``` % 创建figure对象 fig = figure('Name','Simple Animation','Position',[200 200 500 500]); % 创建轴 ax = subplot(1,1,1); % 绘制初始状态 x = linspace(0,2*pi,100); y = sin(x); h = plot(ax,x,y); % 创建视频文件 vidObj = VideoWriter('myAnimation.avi'); vidObj.FrameRate = 10; open(vidObj); % 创建动画对象 anim = animation(fig); % 添加帧 for i = 1:100 % 更新数据并绘制新状态 y = sin(x+i/10); set(h,'YData',y); % 添加帧 anim.addFrame(fig); % 写入视频文件 writeVideo(vidObj,getframe(fig)); end % 完成动画 anim.finish(); % 关闭视频文件 close(vidObj); ``` 这个代码将创建一个简单的正弦波动画,并将其写入名为“myAnimation.avi”的视频文件中。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值