Matlab实现振动弹簧的实时动画论文
- 格式:doc
- 大小:197.00 KB
- 文档页数:29
Matlab实现振动弹簧的实时动画摘要:Matlab是当前应用最广泛的科学与工程计算软件之一,本次课设将Matlab引入到图形学动画设计.本次课设主要可分为两大步骤:一、应用Matlab 对弹簧振子进行建模;二、应用Matlab实现弹簧振动的实时动画。
其中建模部分包括对天花板的建模、对连接直线的建模、对弹簧的建模、对振动小球的建模。
模拟弹簧振动的过程主要包括:①更新小球和弹簧的位置。
②更新水平线的位置和长度。
③实时地画出弹簧高度与时间的关系曲线。
关键字:Matlab,振动弹簧,建模,实时动画指导老师签字:目录1 绪论 (1)1.1 matlab基本功能介绍 (1)1.2 matlab的动画制作 (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)Matlab实现振动弹簧的实时动画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 中,不断对图形色彩进行变幻,也可以产生不同的动画效果。
2 振动弹簧的实时动画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 T<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 建模051015-1123图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 天花板的建模1212.212.412.612.81313.213.413.613.8148.58.558.68.658.78.758.88.85图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。