matlab课程设计.docx
《matlab课程设计.docx》由会员分享,可在线阅读,更多相关《matlab课程设计.docx(12页珍藏版)》请在冰豆网上搜索。
matlab课程设计
一种“会走路的模拟人“的matlab设计与实现
专业:
电子信息科学与技术
班级:
0314412
学号:
031441215
学生姓名:
洪琳子
指导教师:
刘嵩
2016年6月18日
一.设计任务
1、自行设计一个MatlabGUI来完成某一项功能任务。
2、熟悉MATLAB的GUI设计流程。
二.设计方案
利用MATLAB GUI设计实现一个图形用户界面的“一种会走路的模拟人”,要求实现:
(1)通过鼠标控制模拟人的动作,可以实现3D姿态旋转
(2)可以控制模拟人行走的速度、步子大小、跳动等
(3)可以进行模拟人的背景设计,行走参数设计
(4)具有GUI控制界面及文本框控制
三.功能展示
首先用MATLAB GUI功能,在绘制一个静态文本框和一个文本编辑框,设置背景为白色,以及滑动条设置为Sliders和控制界面controls,组织好各控件大小、颜色,各个标志的名称,如speed,stride,sway等,以及“会走路的模拟人”的整体轮廓,接着设置整个GUI的3D效果,可以通过鼠标进行旋转,功能如下:
通过鼠标点击sliders可以控制滑动条的移动,控制“模拟人”的行走速度,行走步幅,身子摇摆,跳舞,跳动,性别等,另外还附加笑脸功能,整体GUI界面如下:
GUI界面
3D旋转过后
模拟人跳动
附加笑脸功能
性别转化(从走路姿势可以看出该图为女性)
四.程序设计
(1)背景颜色、滑动条、字体的相关设置
1、Uicontrol函数
Uicontrol:
是userinterfacecontrol的缩写(用户界面控制)。
在各计算机平台上,窗口系统都采用控制框和菜单,让用户进行某些操作,或设置选项或属性。
控制框是图形对象,如图标、文本框和滚动条,它和菜单一起使用以建立用户图形界面,称之为窗口系统和计算机窗口管理器。
MATLAB控制框,又称与窗口管理器所用的函数十分相似。
它们是图形对象,可以放置在MATLAB的图形窗中的任何位置并用鼠标激活。
MATLAB的uicontrol包括按钮、滑标、文本框。
sliders(j)=uicontrol('style','slider','units','norm','back',r'','pos',[.16*j-.13.07.14.03],'min',smin,'max',smax,'val',start,.sliderstep',[1/(4*smax),1/(10*smax)],'userdata',txt,'callback',...'set(get(gco,''userd''),''str'',sprintf(''%4.2f'',get(gco,''val'')))');
2、style设置:
pushbutton'(按钮键)|'togglebutton'(触发器)|'radiobutton'(无线按钮)|'chechbox'(检查框)|'edit'(编辑)
%'text'(文本)|'slider'(滑标)|'frame'(框)|'listbox'(列表)|'popupmenu'(跃上型)这个属性声明了要生成的uicontrol对象类型。
3、'units设置:
{‘pixels'}|'normalized'|'inches'|'centimeters'|'points'这个属性声明了uicontrol对象属性所使用的度量单位
4、%back设置(background):
背景颜色设置
5、%pos设置(position):
6、%min设置:
滑动条最小值
7、%max设置:
滑动条最大值
我们设置背景为、滑动条、字体的相关属性,结果如下
(2)设置speed','stride','sway','hop','bounce','gender属性
labels={'speed','stride','sway','hop','bounce','gender'};
(给滑动条标名以及设置最大值最小值))
forj=1:
6
switchj
case1,smin=0;start=1;smax=3;
case6,smin=-3;start=0;smax=3;
otherwise,smin=-2;start=1;smax=2;
end
设置结果如下(我们设置为“行走的模拟人”label,及最大值为12最小值为-12)
(3)模拟机器人行走设计、3D旋转姿态设计
whileget(stop,'value')==0
s=cell2mat(get(sliders,'value'));
%cell2mat:
把一个由多个矩阵构成的元胞数组转换成一个矩阵。
意即把元胞数组中的多个矩阵合并成一个矩阵。
c=[sin(omega*t);cos(omega*t);sin(2*omega*t);cos(2*omega*t)];
X=(F+M)/2+s(6)*(F-M)/2;
w=[1;s(2:
5).*c];
X=reshape(X*w,15,3);
H=get(p
(1),'userdata');
e=ones(size(H,1),1);
XH=[H+X(e,:
);X(5,:
)];
set(p
(1),'xdata',XH(:
1),'ydata',XH(:
2),'zdata',XH(:
3))
fork=2:
4
set(p(k),'xdata',X(L{k},1),'ydata',X(L{k},2),'zdata',X(L{k},3));
end
pause(.0001)
(4)整体程序设计
clf
shg
set(gcf,'doublebuf','on','color','y','name','Walker','numbertitle','off')
set(gca,'pos',get(gca,'pos')+[0.0700])
loadwalkersX=reshape((F(:
1)+M(:
1))/2,15,3);L={[15],[512],[2345678],[9101112131415]};
fork=1:
4
p(k)=line(X(L{k},1),X(L{k},2),X(L{k},3),'marker','o',...
'markersize',10,'linestyle','-','erasemode','background');
end
set(p
(1),'tag','head','userdata',zeros(1,3));
axis([-750750-75075001500])
set(gca,'xtick',[],'ytick',[],'ztick',[])
view(160,10)
labels={'speed','stride','sway','hop','bounce','gender'};
forj=1:
6
switchj
case1,smin=0;start=1;smax=3;
case6,smin=-3;start=0;smax=3;
otherwise,smin=-2;start=1;smax=2;
end
txt=uicontrol('style','text','string',sprintf('%4.2f',start),...
'back','g','units','norm','pos',[.16*j-.10.11.08.03]);
sliders(j)=uicontrol('style','toggle','units','norm','back','r',...
'pos',[.16*j-.13.07.14.03],'min',smin,'max',smax,'val',start,...
'sliderstep',[1/(4*smax),1/(10*smax)],'userdata',txt,'callback',...
'set(get(gco,''userd''),''str'',sprintf(''%4.2f'',get(gco,''val'')))');
uicontrol('style','text','string',labels{j},'back','w',...
'units','norm','pos',[.16*j-.12.02.10.04])
end
cameratoolbar
stop=uicontrol('style','toggle','units','norm','pos',[.91.94.08.05],...
'backgr','w','fontw','bold','string','stop');
uicontrol('style','text','units','norm','pos',[.00.92.25.06],...
'backgr','w','fontangle','italic','string',...
{'Changetheview','withthemouse'})
uicontrol('style','radio','units','norm','pos',[.94.90.03.03],...
'userdata',H,'background','white',...
'callback',['p1=findobj(''tag'',''head'');ifget(gco,''val''),'...
'set(p1,''userd'',get(gco,''userd''),''marker'',''none''),'...
'else,set(p1,''userd'',zeros(1,3),''marker'',''o''),end']);
period=151.5751;
omega=2*pi/period;
t=0;
whileget(stop,'value')==0
s=cell2mat(get(sliders,'value'));
t=t+s
(1);
c=[sin(omega*t);cos(omega*t);sin(2*omega*t);cos(2*omega*t)];
X=(F+M)/2+s(6)*(F-M)/2;
w=[1;s(2:
5).*c];
X=reshape(X*w,15,3);
H=get(p
(1),'userdata');
e=ones(size(H,1),1);
XH=[H+X(e,:
);X(5,:
)];
set(p
(1),'xdata',XH(:
1),'ydata',XH(:
2),'zdata',XH(:
3))
fork=2:
4
set(p(k),'xdata',X(L{k},1),'ydata',X(L{k},2),'zdata',X(L{k},3));
end
pause(.0001)
end;
cameratoolbarclose
set(stop,'val',0,'str','close','fontw','bold','callb','close(gcf)')