已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Matlab实现振动弹簧的实时动画摘要: Matlab是当前应用最广泛的科学与工程计算软件之一,本次课设将Matlab引入到图形学动画设计.本次课设主要可分为两大步骤:一、应用Matlab对弹簧振子进行建模;二、应用Matlab实现弹簧振动的实时动画。其中建模部分包括对天花板的建模、对连接直线的建模、对弹簧的建模、对振动小球的建模。模拟弹簧振动的过程主要包括:更新小球和弹簧的位置。 更新水平线的位置和长度。实时地画出弹簧高度与时间的关系曲线。关键字:Matlab, 振动弹簧,建模,实时动画指导老师签字:目 录1 绪论11.1 matlab基本功能介绍11.2 matlab的动画制作22 振动弹簧的实时动画42.1 程序功能分析42.2 弹簧振子的matlab建模62.2.1 天花板的建模72.2.2直线的建模82.2.3弹簧的建模92.2.4球的建模102.2.5 利用set函数返回句柄值改变来当前坐标轴112.3 弹簧振动的实时动画132.3.1弹簧振子简谐振动的物理模型132.3.2 利用matlab实现弹簧的实时振动142.4 调试结果193 设计总结23参考文献24致谢25附录-弹簧阻尼振动程序26Matlab实现振动弹簧的实时动画1 绪论1.1 matlab基本功能介绍 MATLAB是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。 MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 图 1-1 matlab开发界面MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C+ ,JAVA的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用。1.2 matlab的动画制作常见的动画都是将离散的静态图形连续播放或快速变化并利用人眼的视觉暂留性来造成一种的感官上的连续化态效果。市面上流行甚广的FLASH等动画制作软件,都是基于这一原理,将现成图形图像进行处理和变化来制作动画的。Matlab是基于矩阵运算的工程科学计算软件,它不能简单的依靠图形图像的可视化编来制作动画,而是将矩阵、逻辑、函数等底层元素的变化通过图形外现来达到动画效果。在Matlab中,每一个图形元素就是一个对象,每个对象都有一个相应的唯一的标识符(句柄) ,并且每个对象都有一组可以根据需要进行调整的属性,对象的属性反映了对象的特征,通过设置、修改这些属性,用户可以灵活地改变、调整图形对象显示的方式。Matlab句柄图形的这一基本思想就是它实现动画功能的基本方法和重要原则。在Matlab中常用set语句来修改句柄图形对象的属性。基本语法为: set(H,PropertyName, PropertyValue) , 其中H为图形句柄,PropertyName为属性名称, PropertyValue为属性值,Matlab中允许在一个语句中对同一图形句柄的多个不同属性值进行设置。在Matlab绘图中常用line函数来定义动画的基本变化元素,基本语法为: line ( x, y, z) ,其中x、y、z为坐标点数据。函数line句柄常用的属性有: Color (颜色) 、XData ( x轴数据) 、YData ( y轴数据) 、ZData ( z轴数据) 、EraseMode (擦除模式) 、L ineStyle (线型) 、Marker (点型) 、MarkerSize (点尺寸) 、Visible (可视性)等等。其中EraseMode是制作动画时非常关键的一个属性,其擦除属性的设置主要有四个可选值: (1)“normal”,缺省值,计算整个画面的数据,重画整个图形,这种模式产生的图形最准确, 但是速度最慢; ( 2 ) “back2ground将旧对象的颜色变为背景颜色,实现擦除,这种模式将损坏被擦除对象下面的对象,但新对象会正确着色; (3)“none”,不做任何擦除; (4)“xor”,只画与屏幕颜色不一致的新对象点,只擦除与屏幕颜色不一致的原对象点,该方式不损坏被擦除对象下面的对象。我们用line函数绘出运动点,在循环体内结合set函数巧妙地设置line句柄的擦除属性,就能制作出令人惊异的动画效果了。在Matlab中实现动画还有一个很有用的函数: rotate,其功能是实现句柄图形的旋转,基本语法为: rotate (H, xyz , alpha) ,其中 xyz 为旋转中心轴, alpha为旋转角度。用rotate函数实现动画时常配合getframe函数使用,它可以在循环体中“拍”到句柄图形,然后在循环体外以movie函数将获得的图形回放,这种方式有点像将照相机抓拍的若干照片连动放映而成的动画。在动画设计中,如何产生动画,方法比较多,常用的手法有:改变图形中的某一参数,以产生一组动画;对某一三维图形,不断改变其观察视角,获得一组画面;对三维图形进行旋转,也可以得到一组动画;在MATLAB中,不断对图形色彩进行变幻,也可以产生不同的动画效果。272 振动弹簧的实时动画2.1 程序功能分析以下是利用matlab实现振动弹簧的事实动画的程序。rectangle(position,12,8.5,2,0.3,FaceColor,0.5,0.3,0.4);axis(0,15,-1,10);%画顶板hold onplot(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;text(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); 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);%画顶板hold onplot(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,生成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环境下球的建模图形。实现程序为: 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的运动微分方程为:通常将上式改写成 (1.2) 其中 (1.3)微分方程(1.2)的通解为 (1.4)式(1.4)就是小球M的运动学方程。式中A和是两个积分常数,他们的物理意义和确定方法将在后面讨论。将式(1.4)对时间求一阶和二阶导数,得到小球运动速度和加速度 (1.5) (1.6)因,故令,则解(1.4)还可以写成 (1.7)即微分方程(1.4)的解即可写成遇险函数的形式,也可以写成正弦函数形式。从解(1.4)看出,弹簧振子运动时,坐标x(即相对平衡未知的位移)按余弦(或正弦)函数规律随时间变化。因此,只在线性弹性回复力作用下的弹簧振子运动是谐振动。式(1.5)、(1.6)表明,作谐振动物体的速度和加速度也是按余弦或正弦函数规律随时间变化的。见下图,从式(1.2)看出,作谐振动物体的加速度大小总是与其位移大小成正比,二者符号相反,这一结论被视为谐振动的运动学特征。图2-10 简谐运动曲线2.3.2 利用matlab实现弹簧的实时振动由2.3.1节可知弹簧振动是的变化主要表现在弹簧和小球的位置随时间的变化,而且小球的位移是按正弦规律变化的。据此我们先设计一个算法。现用流程图表示如下:图2-11 流程图Matlab是通过以下程序实现弹簧振动的实时动画的:rectangle(position,12,8.5,2,0.3,FaceColor,0.5,0.3,0.4);axis(0,15,-1,10);%画顶板hold onplot(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;text(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); 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该程序的建模部分已经在前面介绍过了,现介绍实现振动的部分。在此之前先做一些准备工作。即为以下程序段: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);启动双缓存,设置渲染效果。 通过上面的可得到如下图所示的界面。图2-12 弹簧振子振动前的图形 模拟弹簧振子简谐振动的过程包括以下内容: 更新小球和弹簧的位置。 更新水平线的位置和长度。实时地画出弹簧高度与时间的关系曲线。以上几点将在下面程序介绍中解释。该弹簧振子的振动是通过一个while循环语句来实现的。程序语句为: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); 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的调试图形。图2-13 T=0的图形图2-14 T=3时的图形图2-15 T=6时的图形图2-16 T=9时的图形图2-17 T=12时的图形3 设计总结本次设计实现了设计要求,实现了利用matlab实现振动弹簧的实时动画,同时画出相应圆球质心随时间变化的曲线。通过此次课程设计,让我对matlab软件的应用有了更多的了解,对一些基本matlab函数的功能及算法有了一定的掌握。在学习的过程中,对matlab软件功能强大深有体会。参考文献1徐东艳.MATLAB函数库查询辞典.中国铁道出版社.2005.2苏金明.MATLAB实用教程.电子工业出版社.2008.3李丽.MATLAB工程计算及应用.人民邮电出版社.2001.4蔡旭辉.MATLAB基础与应用教程.人民邮电出版社.2009.5周建兴.MATLAB从入门到精通.人民邮电出版社.2008.6张铮.MATLAB程序设计与实例应用.中国铁道出版社.2003.致谢在本次设计的整个过程中,得到了敖老师和同学的大力帮助,借此机会向他们表示诚挚的感谢。 感谢在百忙之中对我的论文进行评审并提出宝贵意见的老师们。附录-弹簧阻尼振动程序 下面来模拟弹簧振子在阻尼力的作用下进行阻尼运动的过程,同时画出相应圆球质心随时间变化的曲线。相应的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; % 得到弹簧对应的纵坐标数据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);
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年会计财务岗位面试题及答案
- 2026年公务员面试试题及答案
- 2026年福建摩托车考试历年真题及答案(典优)
- 临时占道施工交通影响评价
- 2025华夏银行校园招聘笔试历年典型考题及考点剖析附带答案详解
- 2025北京世纪安泰建筑工程设计有限公司西安分公司招聘21人笔试历年典型考点题库附带答案详解
- 建筑工程地基基础施工方案
- 2025内蒙古能源集团招聘(114人)笔试历年备考题库附带答案详解
- 2025内蒙古呼和浩特永诚财产保险股份有限公司招聘3人笔试历年常考点试题专练附带答案详解
- 应急物资储备仓库建设项目水资源论证报告书
- 江苏省无锡市2025-2026学年五年级下学期6月数学期末调研试题(试卷+答案)
- 湖南省2026年全省政工专业知识考试(政治+中国近现代史)试题解析及核心考点
- 2026年国开电大法学本科《国际经济法》期末考试试题及答案
- 分班考小升初 2026年辽宁省大连市金普新区语文仿真模拟试卷 有答案
- 2026年高考语文全国一卷作文讲评:“词语是表达思想情感的载体”
- 2025年安徽合肥市初二学业水平地理生物会考题库及答案
- APD自动化腹膜透析机的使用
- 220kv输电线路工程建设监理实施细则
- GA/T 718-2007枪支致伤力的法庭科学鉴定判据
- 体育概论全部课件
- 《国际货币制度》课件
评论
0/150
提交评论