武汉理工大学毕业设计(论文)
4.2图形用户界面的制作
从上面的界面编辑中可以看出界面的关键的控件是编辑框、文本显示框、按钮和轴控件,开始的时候要求编辑框里是空的或0,在各个控件的属性编辑框中的string中设置为空或0就可以了,根据上面的步骤和参数和属性的清单,运行上面的上面的GUI就可以得到要求的初始界面,由MATLAB figure file和MATLAB M-file组成。要实现光学拍的MATLAB仿真,在主界面的初始化程序中的MATLAB M-file中加入光学拍的MATLAB仿真程序,具体是在function pushbutton1_Callback(hObject, eventdata, handles)里面加入光学拍的MATLAB仿真代码。
在前面我们已经做过了MATLAB的仿真程序,图形用户界面的MATLAB的设计可以有两种方式实现:第一,用图形figure函数调用相关程序,实现用户界面,然而这种方法需要用函数调用且布局都要以坐标函数调用的来布局,一个地方错了要改所有的程序,可视化不好;第二,用MTALAB自带的图形用户界面设计工具guide,在目录file---new—gui就可以新建一个gui图形用户界面,这里可以根据需要来添加控件,按要求布局而且修改起来也比较简单方便,不需要更改程序,只在界面上调整和修改就可以了,可视化好且方便,初始化后在相关位置加入代码就可以实现了图形用户界面设计了。
前面的程序是用图形figure函数调用实现了光学拍的计算机仿真,但是只是实现了仿真而没有完成人机式的界面设计,而且各个参数的修改都要在程序里更改,图形也是分3个实现的不在一个界面上,现在就在以前的基础上利用MATLAB的gui图形用户界面设计工具来设计光学拍的MATLAB仿真,需要对前面的程序做一下修改[15]。
具体工作如下:
以前的程序中各变量定义为常数,现在要用变量,具体的修改方法如下为: scale1=str2double(get(handles.edit1,'String')); scale2=str2double(get(handles.edit2,'String')); scale3=str2double(get(handles.edit3,'String')); scale4=str2double(get(handles.edit4,'String')); w1=scale1; w2=scale2; k1=scale3; k2=scale4;
此前的仿真程序中我们用单独的图形函数实现,而现在要求3个输出图形分别在设计的3个轴控件窗口中显示,其方法为:将图形制作figure进行修改成轴控件函数调用对应的程序
axes(handles.axes1); axes(handles.axes2);
18
武汉理工大学毕业设计(论文)
axes(handles.axes3);
此前的设计没有对坐标轴做标注,对图形上的曲线也没有对应的标注,对个轴控件图形也没做相应的名称,现在对界面上的坐标轴标注、对坐标轴窗口命名和对各曲线做标注。其方法为:利用xlabel(‘字符串’)和ylabel(‘字符串’)分别对x和y轴标注;利用title(‘字符串’)对图形标题;利用legend(字符串1,字符串2,?.,参数)对图例注解。
通过以上的修改和代码的添加,基于MATLAB下的GUI的光学拍的仿真界面的程序为: scale1=str2double(get(handles.edit1,'String')); scale2=str2double(get(handles.edit2,'String')); scale3=str2double(get(handles.edit3,'String')); scale4=str2double(get(handles.edit4,'String')); w1=scale1; w2=scale2; k1=scale3; k2=scale4; t=0.1:0.2:1.3; a =1;x =0:0.001:5; A2= a*cos(k2*x-w2*t(end)); A1= a*cos(k1*x-w1*t(end)); axes(handles.axes1); plot(x,A1,x,A2)
set(gcf,'color',[0 1 0]); set(gca,'YTick',[-1:0.5:1]); set(gca,'XTick',[0:1:5]); xlabel('变量 X') ylabel('振幅变化 A') title('两列单色平面波') legend('wave1','wave2') axes(handles.axes2); %%plot the optical beats x =0:0.001:20;k =0;
m2= moviein(length(0.1:0.2:1.3)); for t=0.1:0.2:1.3 k = k+1;
A =2*a*cos((k1-k2)/2*x-(w1-w2)/2*t);
19
武汉理工大学毕业设计(论文)
v = a*cos(k1*x -w1*t)+a*cos(k2*x-w2*t); plot(x,v,'k-',x,A,x,-A); axis([0 20 -2 2]); set(gcf,'color',[0 1 0]) set(gca,'YTick',[-2:1:2]) set(gca,'XTick',[0:5:20]) xlabel('变量 X') ylabel('振幅变化 A') title('合成波即光学拍') legend('wave','amp1','amp2') m2(:,k) = getframe; end movie(m2,3)
axes(handles.axes3); x =0:0.001:20;
A =2*a*cos((k1-k2)/2*x-(w1-w2)/2*t(end)); l= A.*A; plot(x,l)
set(gcf,'color',[0 1 0]) set(gca,'YTick',[0:1:4]) set(gca,'XTick',[0:5:20]) xlabel('变量 X') ylabel('振幅变化 A') title('合成波光强曲线')
legend('intensity of synthesis of wave') 将此程序添加到光学拍仿真的的界面:
GUI
的初始化程序中的
function
pushbutton1_Callback(hObject, eventdata, handles)下,然后保存并运行后得到如下
20
武汉理工大学毕业设计(论文)
图10 光学拍的仿真界面
4.3仿真演示
在MATLAB中file—open中打开光学拍的仿真的界面设计的程序,Editor中的
Debug下的点击run进入光学拍的仿真的界面。在编辑框中输入参数就得到相应的输出,输入一组参数:w1=8,w2=8,k1=8,k2=8,运行后得到如下的界面:
图11 等频率等波数下的情况
21
武汉理工大学毕业设计(论文)
从中可以看出没有光学拍现象。再次输入一组数据w1=8,w2=15,k1=8,k2=15,得到如下的界面:
图 12 当光频率和波数相差很大的时候的情况
从中可以看出光学拍现象不是很明显,再次输入一组数据:w1=8,w2=9,k1=8,k2=9,得到如下的界面:
22
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库光学拍的计算机模拟(完整)(5)在线全文阅读。
相关推荐: