《MATLAB与仿真系统课程设计》.docx
《《MATLAB与仿真系统课程设计》.docx》由会员分享,可在线阅读,更多相关《《MATLAB与仿真系统课程设计》.docx(31页珍藏版)》请在冰点文库上搜索。
《MATLAB与仿真系统课程设计》
自动化专业课程设计报告
《MATLAB与仿真系统课程设计》
班级
姓名
学号
时间2010.12.13-2010.12.17
地点电信实验中心软件机房
指导教师邓长辉
大连海洋大学信息工程学院
自动化教研
大连海洋大学课程设计报告纸
学院(系):
专业班级:
姓名:
学号:
图像与动画
一、课程设计的目的与要求
1、课程设计目的:
(1)进一步理解和消化书本知识,运用所学知识和技能进行简单的设计。
(2)通过课程设计提高应用能力,为专业课的学习打下基础。
(3)培养查阅资料的习惯,训练和提高独立思考和解决问题的能力。
(4)通过命令的调用来显示磁盘目录下的某个图像;
完成简单动画的制作,结合GUI可视化程序设计培养知识综合运用能力和技巧。
2、课程设计要求
从课程设计的目的出发,通过设计工作的各个环节,达到以下要求:
(1)能够正确理解课程设计的题目和意义,全面思考问题。
(2)运用科学合理的方法,认真按时完成。
二、课程设计课题的分析
MATLAB提供了一种能力,它可以存储一系列各种类型的二维或三维图,然后像放电影一样把它们按次序重放出来。
在某种意义上,动画提供的运动为图形增加另一个维数。
通常图形的次序不必以任意的方式关联起来。
一种明显的动画类型是取出三维图形然后缓慢地将它旋转,这样我们就可以从不同角度来观察它。
另一种类型是当一个参数变化时,依次显示某些问题解的图形。
MATLAB中的函数moviein,getframe和movie提供了捕捉和播放动画的所需工具。
函数moviein可以产生一个帧矩阵来存放动画中的帧;函数getframe对当前的图像进行快照;而函数movie按顺序回放各帧。
照这样,捕捉和回放动画的方法是:
(1)创建帧矩阵;
(2)对动画中的每一帧生成图形,并把它捕捉到到帧矩阵里;
(3)从帧矩阵里回放动画。
1、结合本身所学知识以及课程设计要求,确立自我方案的整体设计
整体设计一个可视化模块,该模块分图像显示模块和动画播放模块。
图像显示模块主要是用来显示磁盘目录下的某个图片;动画播放模块主要是用来播放动画。
2、对整体方案进行划分,分模块对各个小问题进行解决
i.图片显示模块:
在MATLAB中键入所需代码,使其能够调用磁盘目录下的图片文档;
ii.动画播放模块:
在MATLAB中键入所需代码,使其能够播放动画;
iii.GUI的设计:
建立一个GUI的模板,使其能都搭载图片显示模块和动画播放模块。
3、对各个模块进行整合,使其工作
三、课程设计的内容与安排
通过编程显示磁盘目录下的图像文件,对GUI中的CALLBACK进行编程,使其能够完成调用图片这一功能;编程实现不断变化的图形,该图为自己绘制,且观赏价值高。
时间安排参考如下教学时间安排
教学安排
周一布置任务,查阅资料
周二设计
周三设计
周四仿真、调试
周五验收、总结报告
四、课程设计的步骤
1、图片显示模块的设计。
图片显示模块是为了在MATLAB中显示本地磁盘中的图片文档而建立的一个模块
打开MATLAB程序,在弹出的“commandwindow”窗口中键入以下代码:
%=======================照片读取=================================
[x,cmap]=imread('E:
\picture\走走走\100815\DSC00285.JPG');
image(x);
colormap(cmap);
axisimageoff
该段代码调用的是本地磁盘E:
\picture\走走走\100815\目录的下DSC00285.JPG图片文档
2、动画播放模块的设计
动画播放模块是为了在MATLAB环境下绘制和播放动画而建立的一个模块
打开MATLAB编辑器,在空白处键入以下代码:
(1).布朗运动的代码
%=====================布朗运动==================================
n=50;%指定布朗运动的点数
s=0.02;%指定温度或速率
%产生n个随机点(x,y),处于-0.5到0.5之间
%==================================
x=rand(n,1)-0.5;
y=rand(n,1)-0.5;
h=plot(x,y,'.');%绘制随机点
axis([-11-11]);
axissquare
shadinginterp
gridoff
set(h,'EraseMode','Xor','MarkerSize',20);%设置擦除模式为Xor
%循环5000次,产生动画效果
%==================================
fori=linspace(1,10,5000)
drawnow
x=x+s*randn(n,1);%在坐标点附近添加随机噪声
y=y+s*randn(n,1);
set(h,'XData',x,'YData',y);%通过改变数据属性来重新绘图
end
(2).球体运动动画的代码
%==============================小球运动========================
fill([6,7,7,6],[5,5,0,0],[0,0.5,0]);%右边竖条的填充
holdon;%保持当前图形及轴系的所有特性
fill([2,6,6,2],[3,3,0,0],[0,0.5,0]);%左边竖条的填充
holdon;%保持当前图形及轴系的所有特性
t1=0:
pi/60:
pi;
plot(4-2*sin(t1-pi/2),5-2*cos(t1-pi/2));%绘制中间的凹弧图形
grid;%添加网格线
axis([0,9,0,9]);%定义坐标轴的比例
axis('off');%关闭所有轴标注,标记,背景
fill([1,2,2,1],[5,5,0,0],[0,0.5,0]);%中间长方形的填充
holdon;%保持当前图形及轴系的所有特性
title('Sphere');%定义图题
x0=6;
y0=5;
head1=line(x0,y0,'color','b','linestyle','.',...
'erasemode','xor','markersize',30);
head2=line(x0,y0,'color','b','linestyle','.',...
'erasemode','xor','markersize',50);%设置小球颜色,大小,线条的擦拭方式
t=0;%设置小球的初始值
dt=0.001;%设置运动周期
t1=0;%设置大球的初始值
dt1=0.001;
while1%条件表达式
t=t+dt;
x1=9-1*t;
y1=5;
x3=6;
y3=5;
ift>0
x2=6;
y2=5;%设置小球的运动轨迹
end
ift>2.8
t=t+dt;
a=sin(t-3);
x1=6.1;
y1=5.1;
x3=4-2*sin(1.5*a);
y3=5-2*cos(1.5*a);%设置大球的运动轨迹
end
set(head1,'xdata',x1,'ydata',y1);%设置球的运动
set(head2,'xdata',x3,'ydata',y3);
drawnow;
endguide
3、GUI的设计
建立一个GUI的模板,使其能都搭载图片显示模块和动画播放模块
(1)打开MATLAB软件,在弹出的“commandwindow”中键入:
guide回车,弹出如图1:
图1.GUI设计启动窗口
(2)选择“BlankGUI(Default)”点击“OK”按钮进入GUI编辑窗口,如图2:
图2.GUI编辑窗口
(3)添加组件。
组件名称
数量
String
Tag
FrontSize
axes
pushbutton
1
4
——
Brownian
Sphere
Picture
Quit
axes1
BT_Brownian
BT_Sphere
BT_PictureShow
BT_Quit
10.0
10.0
10.0
10.0
10.0
表1.组件列表及部分属性设置
图3.组件的摆放
在GUI界面内添加组件如图3所示,在修改完部分属性以后界面如图5所示,修改界面如图4所示。
图4.属性编辑栏
图5.属性修改完后的GUI界面
(4)菜单栏的设置(这里不添加默认的菜单栏,即GUI界面的MenuBar属性设置为none)
图6.菜单栏的编辑
为菜单栏添加组件组件清单如表2所示,组件添加如图7所示
图7.菜单栏的修改
名称
数量
Label
Tag
Accelerator
NewMen
NewMenuItemu
4
6
File
BackColor
Help
Abou
Brownian
Sphere
PictureShow
Exit
Yellow
Red
NM_File
NM_BackColor
NM_Help
NM_AboutNMI_Brownian
NMI_Sphere
NMI_PictureShow
NMI_Exit
NMI_Yellow
NMI_Red
--
--
--
--
Ctrl+B
Ctrl+S
Ctrl+P
Ctrl+E
--
--
表2.菜单栏的部分属性设置
(5)其余设置
GUI界面的Tag属性设为“CourseExercise”中文意思为“课程设计”
4、代码的添加以及模块的组合封装
按钮Quit功能实现:
%---ExecutesonbuttonpressinBT_Quit.
functionBT_Quit_Callback(hObject,eventdata,handles)
%hObjecthandletoBT_Quit(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%=================================================================
close(gcf)
%================================================================
注:
个人习惯在自己添加的代码处添加注释头文件%<>========尾文件%>========
按钮Brownian功能实现:
%---ExecutesonbuttonpressinBT_Brownian.
functionBT_Brownian_Callback(hObject,eventdata,handles)
%hObjecthandletoBT_Brownian(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%=============================================================
%=====================布朗运动==================================
n=50;%指定布朗运动的点数
s=0.02;%指定温度或速率
%产生n个随机点(x,y),处于-0.5到0.5之间
%==================================
x=rand(n,1)-0.5;
y=rand(n,1)-0.5;
h=plot(x,y,'.');%绘制随机点
axis([-11-11]);
axissquare
shadinginterp
gridoff
set(h,'EraseMode','Xor','MarkerSize',20);%设置擦除模式为Xor
%循环5000次,产生动画效果
%==================================
fori=linspace(1,10,5000)
drawnow
x=x+s*randn(n,1);%在坐标点附近添加随机噪声
y=y+s*randn(n,1);
set(h,'XData',x,'YData',y);%通过改变数据属性来重新绘图
end
%============================================================
按键Sphere功能实现:
%---ExecutesonbuttonpressinBT_Sphere.
functionBT_Sphere_Callback(hObject,eventdata,handles)
%hObjecthandletoBT_Sphere(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%===============================================================
%==============================小球运动========================
fill([6,7,7,6],[5,5,0,0],[0,0.5,0]);%右边竖条的填充
holdon;%保持当前图形及轴系的所有特性
fill([2,6,6,2],[3,3,0,0],[0,0.5,0]);%左边竖条的填充
holdon;%保持当前图形及轴系的所有特性
t1=0:
pi/60:
pi;
plot(4-2*sin(t1-pi/2),5-2*cos(t1-pi/2));%绘制中间的凹弧图形
grid;%添加网格线
axis([0,9,0,9]);%定义坐标轴的比例
axis('off');%关闭所有轴标注,标记,背景
fill([1,2,2,1],[5,5,0,0],[0,0.5,0]);%中间长方形的填充
holdon;%保持当前图形及轴系的所有特性
title('Sphere');%定义图题
x0=6;
y0=5;
head1=line(x0,y0,'color','b','linestyle','.',...
'erasemode','xor','markersize',30);
head2=line(x0,y0,'color','b','linestyle','.',...
'erasemode','xor','markersize',50);%设置小球颜色,大小,线条的擦拭方式
t=0;%设置小球的初始值
dt=0.001;%设置运动周期
t1=0;%设置大球的初始值
dt1=0.001;
while1%条件表达式
t=t+dt;
x1=9-1*t;
y1=5;
x3=6;
y3=5;
ift>0
x2=6;
y2=5;%设置小球的运动轨迹
end
ift>2.8
t=t+dt;
a=sin(t-3);
x1=6.1;
y1=5.1;
x3=4-2*sin(1.5*a);
y3=5-2*cos(1.5*a);%设置大球的运动轨迹
end
set(head1,'xdata',x1,'ydata',y1);%设置球的运动
set(head2,'xdata',x3,'ydata',y3);
drawnow;
end
%==============================================================
按钮PictureShow功能实现:
%---ExecutesonbuttonpressinBT_PictureShow.
functionBT_PictureShow_Callback(hObject,eventdata,handles)
%hObjecthandletoBT_PictureShow(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%==========================================================
%=======================照片读取=================================
[x,cmap]=imread('E:
\picture\走走走\100815\DSC00285.JPG');
image(x);
colormap(cmap);
axisimageoff
%=========================================================
颜色的实现:
%--------------------------------------------------------------------
functionNMI_Red_Callback(hObject,eventdata,handles)
%hObjecthandletoNMI_Red(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%=========================================
set(handles.CourseExercise,'color','r');%背景色为红色
%=========================================
%--------------------------------------------------------------------
functionUntitled_3_Callback(hObject,eventdata,handles)
%hObjecthandletoUntitled_3(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%--------------------------------------------------------------------
functionNMI_Yellow_Callback(hObject,eventdata,handles)
%hObjecthandletoNMI_Yellow(seeGCBO)
%eventdatareserved-tobedefinedinafutureversionofMATLAB
%handlesstructurewithhandlesanduserdata(seeGUIDATA)
%=========================================
set(handles.CourseExercise,'color','y');%背景色为黄色
%=========================================
五、课程设计的结果
程序所有代码为:
functionvarargout=CourseExercise(varargin)
%COURSEEXERCISEM-fileforCourseExercise.fig
%COURSEEXERCISE,byitself,createsanewCOURSEEXERCISEorraisestheexisting
%singleton*.
%
%H=COURSEEXERCISEreturnsthehandletoanewCOURSEEXERCISEorthehandleto
%theexistingsingleton*.
%
%COURSEEXERCISE('CALLBACK',hObject,eventData,handles,...)callsthelocal
%functionnamedCALLBACKinCOURSEEXERCISE.Mwiththegiveninputarguments.
%
%COURSEEXERCISE('Property','Value',...)createsanewCOURSEEXERCISEorraisesthe
%existingsingleton*.Startingfromtheleft,propertyvaluepairsare
%appliedtotheGUIbeforeCourseExercise_OpeningFunctiongetscalled.An
%unrecognizedpropertynameorinvalidvaluemakesproperty