《Matlab实现振动弹簧的实时动画.doc》由会员分享,可在线阅读,更多相关《Matlab实现振动弹簧的实时动画.doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Matlab实现振动弹簧的实时动画摘要:Matlab是当前应用最广泛的科学与工程计算软件之一,本次课设将Matlab引入到图形学动画设计.本次课设主要可分为两大步骤:一、应用Matlab对弹簧振子进行建模;二、应用Matlab实现弹簧振动的实时动画。其中建模部分包括对天花板的建模、对连接直线的建模、对弹簧的建模、对振动小球的建模。模拟弹簧振动的过程主要包括:更新小球和弹簧的位置。 更新水平线的位置和长度。实时地画出弹簧高度与时间的关系曲线。 关键字:Matlab, 振动弹簧,建模,实时动画 目录1 绪论 . 1 1.1 matlab基本功能介绍 . 1 1.2 matlab的动画制作 . 22
2、 振动弹簧的实时动画 . 42.1 程序功能分析. 4 2.2 弹簧振子的matlab建模 . 6 2.2.1 天花板的建模 . 72.2.2直线的建模 . 82.2.3弹簧的建模 . 92.2.4球的建模 . 102.2.5 利用set函数返回句柄值改变来当前坐标轴 . 112.3 弹簧振动的实时动画. 13 2.3.1弹簧振子简谐振动的物理模型 . 132.3.2 利用matlab实现弹簧的实时振动. 142.4 调试结果. 193 设计总结 . 23参考文献 . 24 致谢 . 25 附录-弹簧阻尼振动程序 . 26 2.1 程序功能分析以下是利用matlab实现振动弹簧的事实动画的程序
3、。rectangle(position,12,8.5,2,0.3,FaceColor,0.5,0.3,0.4); axis(0,15,-1,10); %画顶板 hold on 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); s
4、et(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); while T12; 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);
5、 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,
6、12,8.5,2,0.3,FaceColor,0.5,0.3,0.4); axis(0,15,-1,10); %画顶板 hold on 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,n
7、um2str(-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下的直线建模图形。 实现程
8、序为: 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向量的长度。len
9、gth为求向量长度的函数。M=26。x=12+mod(1:M,2)*2,生成14 12这样的重复数据26个。 mod(x,y)为x模除y。mod(1:26,2) ans=1 0 1 0等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环境下球的建模图形。
10、 实现程序为: 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)必须等于si
11、ze(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,num2s
12、tr(-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,
13、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?=? 通常
14、将上式改写成 20xx?+= (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)看出,弹簧振子运动时,
15、坐标x(即相对平衡未知的位移)按余弦(或正弦)函数规律随时间变化。因此,只在线性弹性回复力作用下的弹簧振子运动是谐振动。式(1.5)、(1.6)表明,作谐振动物体的速度和加速度也是按余弦或正弦函数规律随时间变化的。见下图,从式(1.2)看出,作谐振动物体的加速度大小总是与其位移大小成正比,二者符号相反,这一结论被视为谐振动的运动学特征。 图2-10 简谐运动曲线 2.3.2 利用利用利用利用matlab实现弹簧的实时振动实现弹簧的实时振动实现弹簧的实时振动实现弹簧的实时振动 由2.3.1节可知弹簧振动是的变化主要表现在弹簧和小球的位置随时间的变化,而且小球的位移是按正弦规律变化的。据此我们先设
16、计一个算法。现用流程图表示如下: 15 图2-11 流程图 Matlab是通过以下程序实现弹簧振动的实时动画的: rectangle(position,12,8.5,2,0.3,FaceColor,0.5,0.3,0.4); axis(0,15,-1,10); %画顶板 hold on 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)
17、; 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); while T12; pause(0.2); Dy=(3/2-1/2*sin(pi*
18、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);
19、% 运动曲线; 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);启动双缓存,设置渲染效
20、果。 通过上面的可得到如下图所示的界面。 18 图2-12 弹簧振子振动前的图形 模拟弹簧振子简谐振动的过程包括以下内容: 更新小球和弹簧的位置。 更新水平线的位置和长度。 实时地画出弹簧高度与时间的关系曲线。 以上几点将在下面程序介绍中解释。 该弹簧振子的振动是通过一个while循环语句来实现的。程序语句为: while T12; pause(0.2); Dy=(3/2-1/2*sin(pi*T)*1/2; 19 Y=-(y-2)*Dy+7; Yf=Y(end)+t1; td=td,T;yd=yd,Y(end); set(D,ydata,Y); set(F1,ydata,Yf,facecol
21、or,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
22、,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的调试图形。 20051015-1 0 1 2 3理理理理理理理理理理理理 图2-13 T=0的图形 051015-
23、1 0 1 2 3理理理理理理理理理理理理 图2-14 T=3时的图形 21051015-1 0 1 2 3理理理理理理理理理理理理 图2-15 T=6时的图形 051015-1 0 1 2 3理理理理理理理理理理理理 图2-16 T=9时的图形 22051015-1 0 1 2 3理理理理理理理理理理理理 图2-17 T=12时的图形 233 3 3 3 设计总结设计总结设计总结设计总结 本次设计实现了设计要求,实现了利用matlab实现振动弹簧的实时动画,同时画出相应圆球质心随时间变化的曲线。 通过此次课程设计,让我对matlab软件的应用有了更多的了解,对一些基本matlab函数的功能及
24、算法有了一定的掌握。在学习的过程中,对matlab软件功能强大深有体会。 24参考文献参考文献参考文献参考文献 1徐东艳.MATLAB函数库查询辞典.中国铁道出版社.2005. 2苏金明.MATLAB实用教程.电子工业出版社.2008. 3李丽.MATLAB工程计算及应用.人民邮电出版社.2001. 4蔡旭辉.MATLAB基础与应用教程.人民邮电出版社.2009. 5周建兴.MATLAB从入门到精通.人民邮电出版社.2008. 6张铮.MATLAB程序设计与实例应用.中国铁道出版社.2003. 25致谢致谢致谢致谢 在本次设计的整个过程中,得到了敖老师和同学的大力帮助,借此机会向他们表示诚挚的
25、感谢。 感谢在百忙之中对我的论文进行评审并提出宝贵意见的老师们。 26附录附录附录附录-弹簧阻尼振动弹簧阻尼振动弹簧阻尼振动弹簧阻尼振动程序程序程序程序 下面来模拟弹簧振子在阻尼力的作用下进行阻尼运动的过程,同时画出相应圆球质心随时间变化的曲线。相应的MATLAB程序如下: close all;clear;clc; rectangle(position,12,8,2,0.3,FaceColor,0.1,0.3,0.4); axis(0,15,-1,10);hold on; % 设置坐标轴范围 plot(13,13,7,8,r,linewidth,2); % 画与弹簧连接的线 y=2:.2:7;
26、 % 得到弹簧对应的纵坐标数据 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.3; % 圆球的半径 t1=r*sin(C); % 计算出圆球对中心的纵坐标数据 F1=fill(13+r*cos(C),2+t1,r); % 画出圆球 set(gca,ytick,0:2:9); % 设置y轴的刻度 set(gca,yticklabels,num2str(-
27、1:3); % 重新设置y轴的刻度值 plot(0,15,2,2,black); % 画出平衡位置 H1=plot(0,13,2,2,g); % 球心的跟踪线 Q=plot(0,2.5,color,r); % 画出运动曲线; td=; % 记录时间的变量 yd=; % 记录y轴位置的变量 T=0; % 设置初始时的时间值 text(2,8,damp osillation,fontsize,24); % 添加标注文字 set(gcf,doublebuffer,on); % 设置渲染效果 while T12; % 利用循环处理阻尼运动过程的模拟 pause(0.2); % 暂停一下,显示动画效果
28、Dy=1-0.5*exp(-T/4)*cos(pi*T); % 计算T时刻弹簧对平衡位置的位移 Y=-(y-2)*Dy+7; % 计算弹簧的纵坐标数值 27 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); % 更新圆球的
29、数据 T=T+0.1; % 更新时间 end Kd=find(diff(sign(diff(yd)=-2)+1; % 计算极大值的位置 X=td(Kd); % 得到极大值处的横坐标数值 Y=yd(Kd); % 得到极大值处的纵坐标数值 X=0,X,td(end); % 得到上侧包络线的横坐标数据 Y=yd(1),Y,yd(end); % 得到上侧包络线的纵坐标数据 plot(X,Y,:); % 画出上侧包络线 Kx=find(diff(sign(diff(yd)=2)+1; % 计算极小值的位置 X=td(Kx); % 得到极小值处的横坐标数值 Y=yd(Kx); % 得到极小值处的纵坐标数值
30、 X=0,X,td(end); % 得到下侧包络线的横坐标数据 Y=-(yd(1)-4),Y,-(yd(end)-4); % 得到下侧包络线的纵坐标数据 plot(X,Y,:); % 画出下侧包络线 30现 线包下簧%)实 动(据数坐包下% ( - 据据的线到 值标坐小得% 值值的处得 )(置位小 +=)( ( 线包侧% 据据纵线上% ,) 据数横线到% 0值标的大得 ) 值标的大极 (置置极计 +-) 间时 + 据数球 ), ( 据的踪新 , , ,( 据据球新 ; , , 据据位更 ( 据的曲新 ( 值数的球% 数纵簧 ;+* = 移移位簧刻算% )/(*0 果果示一暂; 0 拟模动阻处用
31、 果染设 ), 字注添 ), (值时始设 量的轴记%量变时%;线运%; , , 线跟球 ; , 置置出 ; 值刻的新 ; ( 度的 %;: ,球出 ; ,( +( 据标的对圆算; 径的球;据度角成 簧出画 , 值值的上出计% ): )据据坐成生; 度的数 ;( 据数纵簧到 :线接簧与 , , 围轴坐%; 0-,;0 00 , ; :序 的。曲间随相画,程尼行作力在簧模下 序程程振振阻动振阻-录附附。的宝并评论我忙谢 。挚向机借帮学同了,过的次 谢致致. .版国用例设 .0.出邮.门 .周.0 版邮程应基 .00出邮.算程 李. .版业程用 明.社国典辞数 东 献文文文考 会有大软 对程习在的有
32、及的函 些一解更了的软 我计设。曲化时心应画动实振 现求要现设 结总设结总计 形图 理理理理理 - 图 理理理理理 - 形的 理理理理理 - 形 理理理理理 - 图0 理理理理理 - 0 。图 、 =观果结调结 .=。曲, 动谐振的跟便,变的曲移的动用黄句。数踪更) ) , (色色小来这矩的个返 , 。数位更 ) 位位新 ( 数曲运 ( = , 值标的算计+ 值纵 +) =移置位对时 * * (果画示一 ;0 :能 ;0;) ( ;) , ( ;) , , , ; , ; , ; ) ;+ )- /) / ; 0 ; :语现来循 个通是的。解绍面将。曲的与度弹。度位平更 。位簧球更:括程动子弹
33、拟形的动簧 的下得可过。效置,动; ,( 为符字谐簧中理注,(注标添 动简振中, 。间设 0。的录记 ,变时记 色 为位柄 . , =:能; ; , ,简振中, ; ;曲;), ,0 黄;,. , 段段为。准做之此 分动现现,面在分建 ; + ;) ( ; , ;) , ( ; , ;) = ; ; *- ;/)( - ;0 ; ;) ; ,振振弹 ; ;线;, , ;, , 0 ; ,;)- ;) : 球;),+) * ; ;=; 簧; ( ;=:-( ; ;*, ; ;:线; 板;,;.,. , , :动的现程过 图程 下流用法一们据化律按位球的间位球簧表主是簧可.动动实振时弹实时簧振时弹
34、实 利利 动谐 图 学振为被结反者,正位与大物物,) (下的变时数弦是度加速物谐表) )式。谐簧的用回性线因变时律函正按移的未即标时子振, (从数正以也的数成即) 分即 = 写还) ,=/令,+ / ). =? ( ). = )度速和到到阶阶间) 将讨在方确物的他分是和。方的小)式 = ).(微)( 其 =? 写上? 方动 小定顿) ( = 力性受时标球正为标, 置取阻略 量小为数劲。动幅的振示上地量动动的振 模物动模物振子振理的简模物振子振.动时动弹。黑颜轴义, 。轴了定 , ,数常线 ,) , 0(设轴衡。的轴上、 、为、00属变改 过) -( 程一而 设间为开将将:, 。整属 需同置的个
35、下值每置号记标控,号刻坐制为 柄句 返 :能; ,0;)-( ;):, :图模轴初模模设。的如。前来值返 可 在坐定新们备做时图建置重图的所以们的轴标回数 。形来来顶与个后将 要有) 和 ( 等须 则向个 如, 须) ,行一果指色是或量十 色,边充发数的), ( 式形色建 函介 形) ,+ 的的元中 回( . =,生步间到 0; :0 能;), ) *+ ; *;=;*.:序。图的境 所图模球建的。配矩与是行是图曲的的矩量数 ,个 或。线定数和由制) :数 图画 个后令 - 值令 。等 ) : 。除) 。 数的 ) ( +。 数函向 。的量) 。向步.0到: 介;)( ; ) -; ;* ; ; :为序。的弹 ,所图模簧 建的 置设直, 色色线 的线的., 函的个是 介序 ), , :序。图线直 在示模模直建建. 的设是.0,0 、为和点一矩.,形矩画功 介能;. 0 , , 为序程。图的板境 为所模建 建的 。程建绍; , ;) - , ; , 球;),+) +( ; ; 0;* :簧 ; ; ):-; ; , ;) ;:线;) , 板;, ;.0. , ( :为。的振下境 在即示图模建簧建 簧 。的过振弹模,简子拟序的。曲随质球出,的运简弹模功 ;) ; )(, , (;) , ; , ; , = ; ) ; *) ;/) ( ( ; ( ; ;) ; , 振簧的理 ;