Matlab实现振动弹簧的实时动画之欧阳体创编.docx

上传人:b****9 文档编号:24992162 上传时间:2023-06-03 格式:DOCX 页数:19 大小:20.75KB
下载 相关 举报
Matlab实现振动弹簧的实时动画之欧阳体创编.docx_第1页
第1页 / 共19页
Matlab实现振动弹簧的实时动画之欧阳体创编.docx_第2页
第2页 / 共19页
Matlab实现振动弹簧的实时动画之欧阳体创编.docx_第3页
第3页 / 共19页
Matlab实现振动弹簧的实时动画之欧阳体创编.docx_第4页
第4页 / 共19页
Matlab实现振动弹簧的实时动画之欧阳体创编.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

Matlab实现振动弹簧的实时动画之欧阳体创编.docx

《Matlab实现振动弹簧的实时动画之欧阳体创编.docx》由会员分享,可在线阅读,更多相关《Matlab实现振动弹簧的实时动画之欧阳体创编.docx(19页珍藏版)》请在冰豆网上搜索。

Matlab实现振动弹簧的实时动画之欧阳体创编.docx

Matlab实现振动弹簧的实时动画之欧阳体创编

Matlab实现振动弹簧的实时动画

时间:

2021.02.03

创作:

欧阳体

摘要:

Matlab是当前应用最广泛的科学与工程计算软件之一,本次课设将Matlab引入到图形学动画设计.本次课设主要可分为两大步骤:

一、应用Matlab对弹簧振子进行建模;二、应用Matlab实现弹簧振动的实时动画。

其中建模部分包括对天花板的建模、对连接直线的建模、对弹簧的建模、对振动小球的建模。

模拟弹簧振动的过程主要包括:

①更新小球和弹簧的位置。

②更新水平线的位置和长度。

③实时地画出弹簧高度与时间的关系曲线。

关键字:

Matlab,振动弹簧,建模,实时动画

1绪论.....................................................................................................1

1.1matlab基本功能介绍.......................................................................1

1.2matlab的动画制作...................................................................2

2振动弹簧的实时动画.................................................................4

2.1程序功能分析............................................................................4

2.2弹簧振子的matlab建模.........................................................6

2.2.1天花板的建模.......................................................................7

2.2.2直线的建模.............................................................................8

2.2.3弹簧的建模.............................................................................9

2.2.4球的建模...............................................................................10

2.2.5利用set函数返回句柄值改变来当前坐标轴....................11

2.3弹簧振动的实时动画..............................................................13

2.3.1弹簧振子简谐振动的物理模型...........................................13

2.3.2利用matlab实现弹簧的实时振动.......................................14

2.4调试结果..................................................................................19

3设计总结...................................................................................23

参考文献.......................................................................................24

致谢.......................................................................................................25

附录-弹簧阻尼振动程序......................................................................26

2.1程序功能分析

以下是利用matlab实现振动弹簧的事实动画的程序。

rectangle('position',[12,8.5,2,0.3],'FaceColor',[0.5,0.3,0.4]);

axis([0,15,-1,10]);%画顶板

holdon

plot([13,13],[7,8.5],'r','linewidth',2);

%画直线

y=2:

.2:

7;

M=length(y);

x=12+mod(1:

M,2)*2;

x

(1)=13;

x(end-3:

end)=13;

D=plot(x,y);

%弹簧

C=0:

.1:

2*pi;r=0.35;

t1=r*sin(C);

F1=fill(13+r*cos(C),2+t1,'r');

%球

set(gca,'ytick',[0:

2:

9]);

set(gca,'yticklabels',num2str([-1:

3]'));

plot([0,15],[3.3,3.3],'black');

H1=plot([0,13],[3.3,3.3],'y');

%句柄[黄线]

Q=plot(0,3.8,'color','r');

%运动曲线;

td=[];yd=[];

T=0;

5text(2,9,'理想中的弹簧振子简谐振动','fontsize',16);

set(gcf,'doublebuffer','on');

whileT<12;

pause(0.2);

Dy=(3/2-1/2*sin(pi*T))*1/2;

Y=-(y-2)*Dy+7;

Yf=Y(end)+t1;

td=[td,T];yd=[yd,Y(end)];

set(D,'ydata',Y);

set(F1,'ydata',Yf,'facecolor',rand(1,3));

set(H1,'xdata',[T,13],'ydata',[Y(end),Y(end)]);

set(Q,'xdata',td,'ydata',yd);

T=T+0.1;

end

程序功能介绍:

模拟弹簧振子简谐运动的过程,同时画出相应圆球质心随时

间变化的曲线。

上面的程序为模拟弹簧振子的简谐振动,若要模拟弹簧阻尼振动过程的程

序,可见附录。

2.2弹簧振子的matlab建模

图2-1弹簧振子建模图

上图所示的图形即为在matlab环境下的弹簧振子的建模图形。

实现程序为:

rectangle('position',[12,8.5,2,0.3],'FaceColor',[0.5,0.3,0.4]);

axis([0,15,-1,10]);

%画顶板

holdon

plot([13,13],[7,8.5],'r','linewidth',2);

%画直线

y=2:

.2:

7;

M=length(y);

x=12+mod(1:

M,2)*2;

x

(1)=13;

x(end-3:

end)=13;

D=plot(x,y);

%弹簧

C=0:

.1:

2*pi;r=0.35;

t1=r*sin(C);

F1=fill(13+r*cos(C),2+t1,'r');

%球

set(gca,'ytick',[0:

2:

9]);

set(gca,'yticklabels',num2str([-1:

3]'));

plot([0,15],[3.3,3.3],'black');

下面分步介绍它的建模过程。

2.2.1天花板的建模

2-2天花板建模图

如上图所示,为在matlab环境下天花板的建模图形。

实现程序为:

rectangle('position',[12,8.5,2,0.3],'FaceColor',[0.5,0.3,0.4]);

程序功能介绍:

rectangle的功能就是画一个矩形,12,8.5为矩形的一个点,

他的长和宽分别为2、0.3。

'FaceColor',[0.5,0.3,0.4]是用来设置它的颜色的。

2.2.2直线的建模

2-3直线的建模图

如上图所示,为在matlab下的直线建模图形。

实现程序为:

plot([13,13],[7,8.5],'r','linewidth',2)

程序功能介绍:

plot是一个常用的画图函数,[13,13],[7,8.5]确定的直线的位

置,'r'设置直线颜色为红色。

linewidth',2,直线的粗细设置。

2.2.3弹簧的建模

2-4弹簧的建模图

如上图所示,为在matlab环境下弹簧的建模图形。

实现程序为:

y=2:

.2:

7;

M=length(y);

x=12+mod(1:

M,2)*2;

x

(1)=13;

x(end-3:

end)=13;

D=plot(x,y);

程序功能介绍:

y=2:

.2:

7,2到7之间0.2为步长生成向量。

M=length(y),

M=y向量的长度。

length为求向量长度的函数。

M=26。

x=12+mod(1:

M,2)*2,

生成1412这样的重复数据26个。

mod(x,y)为x模除y。

mod(1:

:

26,2)ans=1

010等26个。

x

(1)=13,令初始值为13。

x(end-3:

end)=13,令最后4个数为13。

D=plot(x,y),画出该图。

Plot函数介绍:

plot(X,Y)绘制所有由Xn和Yn数据对定义的曲线。

果仅Xn或者仅Yn是一个矩阵,plot函数绘制向量对矩阵的行或者列的曲线图,

取决于是向量的行还是列的尺寸与矩阵相匹配。

2.2.4球的建模

2-5球的建模图

如上图所示,为在matlab环境下球的建模图形。

实现程序为:

C=0:

.1:

2*pi;r=0.35;

t1=r*sin(C);

F1=fill(13+r*cos(C),2+t1,'r');

程序功能介绍:

C=0:

.1:

2*pi;r=0.35,0到2之间0.1步长生成向量,r=0.35.

t1=r*sin(C),返回r乘以C中每个元素的正弦值的值。

F1=fill(13+r*cos(C),2+t1,'r'),

画出多边形小球。

Fill函数介绍;函数fill用于创建彩色的多边形。

格式;fill(X,Y,C)

从X和Y中的数据出发创建填充的多边形,顶点颜色为C。

C十一哥向量或者

矩阵,它是指向色图的指标。

如果C是一个行向量,则length(C)必须等于size

(X,2)和size(Y,2);如果C是一个列向量,则length(C)必须等于size(X,1)和size(Y,1)。

如果有必要,fill将通过最后一个顶点与第一个顶点连接来封

闭多边形。

2.2.5利用set函数返回当前坐标轴

通过上几步的建模我们可以得到如下所示的图形

2-6未重新设置轴建模图

为下一步实时动画做好准备我们需要重新设定一下坐标。

在matlab中可以

利用set函数返回句柄值改变来当前坐标轴。

得到如下所示的图形。

2-7设置后建模图

2-8初步设置轴的建模图

实现程序为:

set(gca,'ytick',[0:

2:

9]);

set(gca,'yticklabels',num2str([-1:

3]'));

plot([0,15],[3.3,3.3],'black');

程序功能介绍:

gca未返回当前axes对象的句柄值,ytick为控制Y轴坐标刻度记号的位置,即控制坐标轴上刻度记号的位置以及每隔多少值会到下一个刻度记号的位置,同时还需配合yticklabel属性来调整。

set(gca,'ytick',[0:

2:

9]);将坐

标轴从0开始以2为间隔到9设置Y坐标。

而下一句程序

set(gca,'yticklabels',num2str([-1:

3]'))就是通过yticklabel来改变Y轴属性,即由0、

2、4、6、8变为-1、0、1、2、3。

上面是对Y轴的设置。

对平衡位置轴的设置

为:

plot([0,15],[3.3,3.3],'black'),plot为画直线的常用函数[0,15],[3.3,3.3]定义了平

衡位置轴的位置。

'black',定义平衡位置轴的颜色为黑。

2.3弹簧振动的实时动画

2.3.1弹簧振子简谐振动的物理模型

弹簧振子简谐振动的物理模型弹簧振子简谐振动的物理模型

弹簧振子简谐振动的物理模型图2-9弹簧振子的简谐振动

现在我们来定量地分析上图所示的弹簧振子的小振幅自由振动。

设弹簧的劲度系数为k,小球的质量为m,忽略各种阻力,取平衡位置O为

坐标原点,x坐标轴指向右为正。

小球位置坐标为x时,所受弹性回复力Fx可

表示为:

Fx=-kx(1.1)

根据牛顿定律,小球的M的运动微分方程为:

mxkx?

?

=?

通常将上式改写成20

xxω?

?

+=(1.2)其中2/kmω=(1.3)微分方程(1.2)的通解为cos()xAtω=+Φ(1.4)

14式(

1.4)就是小球M的运动学方程。

式中A和ω是两个积分常数,他们的物理

意义和确定方法将在后面讨论。

将式(1.4)对时间求一阶和二阶导数,得到小

球运动速度和加速度

sin()vxAt

ωω==?

+Φ(1.5)2cos()axAtωω?

?

==?

+Φ(1.6)

因cos()sin(/2)

ttωωπ+Φ=+,故令'/2πΦ=Φ+,则解(1.4)还可以写成'sin()xAtω=+Φ(1.7)即微分方程(1.4)的解即可写成遇险函数的形式,也可以写成正弦函数形式。

从解(1.4)看出,弹簧振子运动时,坐标x(即相对平衡未知的位移)按余

弦(或正弦)函数规律随时间变化。

因此,只在线性弹性回复力作用下的弹簧振

子运动是谐振动。

式(1.5)、(1.6)表明,作谐振动物体的速度和加速度也是按

余弦或正弦函数规律随时间变化的。

见下图,从式(1.2)看出,作谐振动物体

的加速度大小总是与其位移大小成正比,二者符号相反,这一结论被视为谐振动

的运动学特征。

图2-10简谐运动曲线2.3.2

利用

利用利用

利用matlab实现弹簧的实时振动

实现弹簧的实时振动实现弹簧的实时振动

实现弹簧的实时振动

由2.3.1节可知弹簧振动是的变化主要表现在弹簧和小球的位置随时间的变

化,而且小球的位移是按正弦规律变化的。

据此我们先设计一个算法。

现用流程

图表示如下:

15

图2-11流程图

Matlab是通过以下程序实现弹簧振动的实时动画的:

rectangle('position',[12,8.5,2,0.3],'FaceColor',[0.5,0.3,0.4]);

axis([0,15,-1,10]);

%画顶板

holdon

plot([13,13],[7,8.5],'r','linewidth',2);

%画直线

y=2:

.2:

7;

M=length(y);

x=12+mod(1:

M,2)*2;

x

(1)=13;

16x(end-3:

end)=13;

D=plot(x,y);

%弹簧

C=0:

.1:

2*pi;r=0.35;

t1=r*sin(C);

F1=fill(13+r*cos(C),2+t1,'r');

%球

set(gca,'ytick',[0:

2:

9]);

set(gca,'yticklabels',num2str([-1:

3]'));

plot([0,15],[3.3,3.3],'black');

H1=plot([0,13],[3.3,3.3],'y');

%句柄[黄线]

Q=plot(0,3.8,'color','r');

%运动曲线;

td=[];yd=[];

T=0;

text(2,9,'理想中的弹簧振子简谐振动','fontsize',16);

set(gcf,'doublebuffer','on');

whileT<12;

pause(0.2);

Dy=(3/2-1/2*sin(pi*T))*1/2;

Y=-(y-2)*Dy+7;

Yf=Y(end)+t1;

td=[td,T];yd=[yd,Y(end)];

set(D,'ydata',Y);

set(F1,'ydata',Yf,'facecolor',rand(1,3));

set(H1,'xdata',[T,13],'ydata',[Y(end),Y(end)]);

set(Q,'xdata',td,'ydata',yd);

T=T+0.1;

End

该程序的建模部分已经在前面介绍过了,现介绍实现振动的部分。

17在此之前先做一些准备工作。

即为以下程序段:

H1=plot([0,13],[3.3,3.3],'y');

%句柄[黄线]

Q=plot(0,3.8,'color','r');

%运动曲线;

td=[];yd=[];

T=0;

text(2,9,'理想中的弹簧振子简谐振动','fontsize',16);

set(gcf,'doublebuffer','on');

程序功能介绍:

H1=plot([0,13],[3.3,3.3],'y'),画句柄线。

位置为[0,13],[3.3,3.3],

颜色为黄色。

td=[];记录时间的变量,yd=[],记录y轴位置的变量。

T=0;设置

初始时的时间值。

text(2,9,'理想中的弹簧振子简谐振动','fontsize',16);添加标注文

字。

位置为(2,9),标注为‘理想中的弹簧振子简谐振动’字符串大小为16

号字体。

set(gcf,'doublebuffer','on');启动双缓存,设置渲染效果。

通过上面的可得到如下图所示的界面。

18

图2-12弹簧振子振动前的图形

模拟弹簧振子简谐振动的过程包括以下内容:

①更新小球和弹簧的位置。

②更新水平线的位置和长度。

③实时地画出弹簧高度与时间的关系曲线。

以上几点将在下面程序介绍中解释。

该弹簧振子的振动是通过一个while循环语句来实现的。

程序语句为:

whileT<12;

pause(0.2);

Dy=(3/2-1/2*sin(pi*T))*1/2;

19Y=-(y-2)*Dy+7;

Yf=Y(end)+t1;

td=[td,T];yd=[yd,Y(end)];

set(D,'ydata',Y);

set(F1,'ydata',Yf,'facecolor',rand(1,3));

set(H1,'xdata',[T,13],'ydata',[Y(end),Y(end)]);

set(Q,'xdata',td,'ydata',yd);

T=T+0.1;

End

程序功能介绍:

pause(0.2);暂停一下,显示动画效果。

Dy=(3/2-1/2*sin(pi*T))*1/2;计算T时刻弹簧对平衡位置的位移。

Y=-(y-2)*Dy+7;

计算弹簧的纵坐标数值。

Yf=Y(end)+t1;计算圆球的纵坐标数值。

td=[td,T];yd=[yd,Y(end)];更新运动曲线的数据。

set(D,'ydata',Y);更新弹簧的位置

数据。

set(F1,'ydata',Yf,'facecolor',rand(1,3)),更新圆球的位置数据。

rand(m,n)

函数是返回一个m*n的随机矩阵,这里用来改变小球的颜色。

set(H1,'xdata',[T,13],'ydata',[Y(end),Y(end)]),更新跟踪黄线的数据。

这里句柄黄线

的主要作用为将振动弹簧的位移以运动曲线的形式变现出来,以便我们跟好的了

解弹簧振子的简谐振动。

set(Q,'xdata',td,'ydata',yd),更新曲线的数据。

T=T+0.1;更

新时间。

2.4

调试结果

调试结果调试结果

调试结果观察T=0、3、6、9、12的调试图形。

200

51015

-1

0

1

2

3理理理理理理理理理理理理

图2-13T=0的图形0

51015

-1

0

1

2

3理理理理理理理理理理理理

图2-14T=3时的图形

210

51015

-1

0

1

2

3理理理理理理理理理理理理

图2-15T=6时的图形

0

51015

-1

0

1

2

3理理理理理理理理理理理理

图2-16T=9时的图形

220

51015

-1

0

1

2

3理理理理理理理理理理理理

图2-17T=12时的图形

233

33

3设计总结

设计总结设计总结

设计总结

本次设计实现了设计要求,实现了利用matlab实现振动弹簧的实时动画,

同时画出相应圆球质心随时间变化的曲线。

通过此次课程设计,让我对matlab软件的应用有了更多的了解,对一些基

本matlab函数的功能及算法有了一定的掌握。

在学习的过程中,对matlab软件

功能强大深有体会。

24参考文献

参考文献参考文献

参考文献

[1]徐东艳.MATLAB函数库查询辞典.中国铁道出版社.2005.

[2]苏金明.MATLAB实用教程.电子工业出版社.2008.

[3]李丽.MATLAB工程计算及应用.人民邮电出版社.2001.

[4]蔡旭辉.MATLAB基础与应用教程.人民邮电出版社.2009.

[5]周建兴.MATLAB从入门到精通.人民邮电出版社.2008.

[6]张铮.MATLAB程序设计与实例应用.中国铁道出版社.2003.

25致谢

致谢致谢

致谢

在本次设计的整个过程中,得到了敖老师和同学的大力帮助,借此机会向他

们表示诚挚的感谢。

感谢在百忙之中对我的论文进行评审并提出宝贵意见的老师们。

26附录

附录附录

附录-

--

-弹簧阻尼振动

弹簧阻尼振动弹簧阻尼振动

弹簧阻尼振动程序

程序程序

程序

下面来模拟弹簧振子在阻尼力的作用下进行阻尼运动的过程,同时画出相应

圆球质心随时间变化的曲线。

相应的MATLAB程序如下:

closeall;clear;clc;

rectangle('position',[12,8,2,0.3],'FaceColor',[0.1,0.3,0.4]);

axis([0,15,-1,10]);holdon;%设置坐标轴范围

plot([13,13],[7,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1