




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第6章MATLAB高級圖形設計
6.1句柄圖形對象6.2交互式開發APP設計工具6.3對話框6.4圖像和聲音6.5視頻與動畫設計本章小結和練習MATLAB中的每個具體圖形都是由不同的圖形對象構成的,圖形對象按層次結構組織如圖。6.1圖形對象
6.1.1圖形對象體系1.圖形對象的創建h_obj=funname('PropertyName',PropertyValue,……)h_obj是圖形對象變量;funname是函數名,每個創建的圖形對象函數名與對象名相同。當創建子對象時,如果父對象不存在,則MATLAB會自動創建父對象,并將子對象置于父對象中;PropertyName是屬性名;PropertyValue是屬性值。例:>>h_f=figure('Position',[200300500400])>>h_a1=axes('position',[0.1,0.05,.85,.85]) %創建條形圖的坐標軸6.1.2圖形對象的屬性%銷售業績數據>>a1=[25.330.542.851.2];>>a2=[15.320.738.859.2];>>a3=[35.140.758.875.2];%創建圖形窗口>>h_f=figure();>>h_f.Position=[200300500400];>>h_a1=axes('position',[0.1,0.05,.85,.85]) %創建條形圖的坐標軸>>h_bar=bar(h_a1,[a1;a2;a3])>>h_a2=axes('position',[0.15,0.65,.2,.2]) %創建餅圖的坐標軸>>h_pie1=pie(h_a2,a1)>>h_a3=axes('position',[0.4,0.65,.2,.2])>>h_pie2=pie(h_a3,a2)>>h_a4=axes('position',[0.65,0.65,.2,.2])>>h_pie3=pie(h_a4,a3,[0100])例
繪制三個部門四個季度的銷售業績,使用條形圖顯示三部門數據,每個部門使用餅圖顯示所占份額的百分比。運行以下命令,正確的說法是______>>h_a=axes('position',[0.1,0.1,0.5,0.5])A.在窗口中位置為(0.1,0.1)處創建坐標軸B.在窗口中位置為(0.1,0.5)處創建坐標軸C.在窗口中位置為窗口橫坐標的十分之一處創建坐標軸D.在窗口中創建寬度為0.5的坐標軸練習C2.屬性的獲取和設置在運行過程中屬性值還可以進行修改和查詢,set函數用來設置和修改屬性值,get函數用來查詢和獲取屬性值。命令格式如下:a=set(h_obj,'PropertyName',PropertyValue,...) %設置圖形對象的屬性值a=get(h_obj,'PropertyName') %獲取圖形對象的屬性值例
使用句柄圖形對象繪制正弦曲線。>>x=0:0.1:10;>>y=sin(x);%創建無標題窗口>>h_f=figure('Position',[200300300300],'menubar','none');>>h_a1=axes('position',[0.1,0.1,.8,.8]);>>h_t=title(h_a1,'正弦曲線'); %創建標題>>h_l=line(x,y); %設置坐標軸刻度>>set(gca,'xtick',[0pi/2pi3*pi/22*pi5*pi/23*pi])%設置坐標軸刻度標注>>set(gca,'xticklabel',{'0','pi/2','pi','3*pi/2','2pi','5*pi/2','3pi'})>>set(gca,'xgrid','on','ygrid','on’); %設置坐標軸屬性>>set(h_l,'linewidth',2) %設置線屬性>>set(get(h_t,'parent'),'color','y’) %設置標題的父對象屬性>>h_ann0=annotation(gcf,'rectangle',[0.10.5.80.4],...'FaceAlpha',.7,'FaceColor','red’); %創建矩形框6.1.3圖形對象的操作函數名函數功能函數名函數功能gca獲取當前坐標區或圖gcf獲取當前圖窗的句柄gcbf獲取包含正在執行回調的對象的圖窗句柄gcbo獲取包含正在執行回調的對象句柄gco獲取當前的對象句柄groot獲取圖形根對象ancestor獲取圖形對象的前代allchild獲取指定對象的所有子對象findall查找所有圖形對象findobj查找具有特定屬性的圖形對象例>>hf=gcf %獲取圖形窗口對象>>f_finda=findobj('title',[0.65,0.65,.2,.2]) %查找坐標區對象>>clf(h_f) %清除窗口內容MATLAB的APPDesigner提供了包含按鈕、坐標軸、滾動條等一系列交互控件,可以設置各控件的屬性,并可以邊設計邊查看界面,能夠自動生成代碼。6.2交互式開發APP設計工具設計一個App界面的步驟:(1)界面布局設計通過拖拽控件面板中的控件到界面設計區中;然后使用對象對齊工具(Align)進行控件的布局調整;添加完控件后在右側的ComponentBrowser面板中,可以看到所有的對象;如果界面需要菜單和工具欄等,則使用FigureTools中的控件進行設計。(2)屬性設置(3)編寫回調函數(4)保存并運行6.2.1設計一個簡單的App界面2.一個簡單的圖形用戶界面設計實例例
創建一個用戶界面,實現單擊按鈕在坐標軸中繪制正弦曲線的功能,運行界面如圖。(1)創建一個空白的GUI界面(2)創建控件(3)調整控件布局(4)設置各對象的屬性(5)編寫回調函數(7)運行界面并保存文件編程過程查看隨書視頻設計界面屬性窗口對象瀏覽器Callbacks面板M文件編輯器單擊DrawButton按鈕繪制正弦曲線,程序編寫如下:%Buttonpushedfunction:DrawButtonfunctionDrawButtonPushed(app,event)%繪制曲線
x=0:0.1:20;
y=sin(x);
plot(app.UIAxes,x,y)%在坐標軸繪制曲線end單擊CloseButton按鈕關閉窗口,程序編寫如下:%Buttonpushedfunction:CloseButtonfunctionCloseButtonPushed(app,event)%關閉窗口delete(app.UIFigure)end
3.APP文件的分享APP文件可以通過分享功能實現不同用途的分享,可以生成MATLABAPP在APPS工具欄中使用,也可以生成可執行文件.exe,或者生成在網絡安裝應用的.ctf文件,依據MATLAB編譯器運行的APP。1.APP程序結構APP圖形用戶界面的程序設計是面向對象的設計方法,每個對象有屬性(Properties)、方法(methods)和事件(events)。(1)使用classdef定義類,將整個ex6_3定義為類,classdef的格式如下:classdefClassName<SuperclassName %開始類定義并指定一個超類說明:classdef定義以end結束,包括了Properties和methods塊。(2)屬性Properties塊包含了界面中的所有對象,Properties塊的語法格式如下:Properties propNamepropTyp %屬性名和數據類型end(3)方法methods塊包括用戶設計的方法和創建APP界面時自動生成的初始化代碼,以end結束。6.2.2APP程序文件1.COMMON常用控件(1)
按鈕(2)文本框6.2.3APP中的控件(3)
下拉和滾動輸入框(4)圖片、表格和樹控件(5)網頁和鏈接控件(6)坐標區控件2.CONTAINERS容器控件容器控件是用來作為其他控件的容器,將控件拖到容器中時,就表示該控件是容器的子級建立了父子關系,當容器移動時內部的控件也隨著移動。3.
FIGURETOOLS圖窗工具控件4.INSTRUMENTATION儀表和AEROSPACE航空儀表5.控件的通用操作(1)某些控件(如文本框EditField)拖到畫布上時,會和一個標簽組合在一起。(2)某些控件(如滾動條Slider、微調器Spinner)輸入時都有數據范圍要求,使用Limits屬性來編輯數值范圍的最小值和最大值。(3)多個控件可以組合在一起,先選中這些控件,然后在工具欄選擇Grouping組合。例創建用戶界面,在兩個坐標區中分別繪制階躍響應曲線和脈沖響應曲線,使用列表框輸入二階系統的阻尼系數。6.2.4標簽、按鈕、列表框、面板和坐標區控件列表框三個按鈕的程序如下:functionButtonPushed(app,event)%畫階躍響應曲線z1=get(app.ListBox,'value'); %獲取列表框選擇的選項值z=str2num(z1); %將字符型轉換為數值x=0:0.1:10;y1=1-1/sqrt(1-z^2)*exp(-z*x).*sin(sqrt(1-z^2)*x+acos(z));plot(app.UIAxes,x,y1); %繪制圖形title(app.UIAxes,['阻尼系數=',z1,'階躍響應']); %修改坐標標題app.UIAxes.Visible=true; %將坐標區顯示出來
end
functionButton_2Pushed(app,event)%畫脈沖響應曲線z1=get(app.ListBox,'value'); %獲取列表框選擇的選項值z=str2num(z1); %將字符型轉換為數值x=0:0.1:10;y2=1/sqrt(1-z^2)*exp(-z*x).*sin(sqrt(1-z^2)*x);plot(app.UIAxes2,x,y2); %繪制圖形title(app.UIAxes2,['阻尼系數=',z1,'脈沖響應’]); %修改坐標標題app.UIAxes2.Visible=true; %將坐標區顯示出來end
functionButton_3Pushed(app,event)close(app.UIFigure) %關閉窗口endend一組______控件使用ButtonGroup作為容器后,每次只能選中一個。A.Button B.CheckBoxC.ToggleD.RadioButton練習D1.通過屬性實現數據共享在“EDITOR”窗口單擊工具欄中的properties,添加公共屬性properties(Access=private)x1=0:0.1:10; %橫坐標范圍end然后在functionButton_Pushed和functionButton_2Pushed中修改x:x=app.x1使用屬性properties可以初始化一些數據,并實現App內的數據共享。2.使用全局變量實現數據共享使用startupFcn函數在開啟窗口時設置x變量的值,在其他函數中通過全局變量x實現數據的共享。functionstartupFcn(app)x=0:0.1:10;end6.2.4實現數據共享例創建員工身體健康數據輸入和顯示界面,三個Panel面板區中分別用于輸入體檢數據、顯示員工身體健康狀況表和顯示血壓曲線。
6.2.5表格、滾動條、微調器和坐標區控件(1)共享數據properties(Access=private)TableX %表格行TableY %表格列cTable %表格轉換成的元胞變量end(2)startupFcn回調函數functionstartupFcn(app)%打開窗口時運行t=readtable('ex6_5Health.xlsx'); %讀取表格app.cTable=table2cell(t); %將表格轉換成元胞型app.UITable.ColumnName={'姓名','年齡','體溫','舒張壓','收縮壓'}app.UITable.Data=t; %數據寫入表格控件app.UITable.ColumnWidth={50,50,'auto',80,80}%設置表格列寬度end(3)表格回調函數CellSelectionfunctionUITableCellSelection(app,event)%表格被選中時運行indices=event.Indices; %獲取光標所在的表格行列數app.TableX=indices(1);app.TableY=indices(2);end(4)滾動條的ValueChanged回調函數functionSliderValueChanged(app,event)%滾動條改變時運行value=app.Slider.Value; %獲取滾動條數據ifapp.TableY==4|app.TableY==5 %如果是第4,5列血壓app.cTable{app.TableX,app.TableY}=round(app.Slider.Value)%將滾動條數據修改寫入表格t=cell2table(app.cTable)app.UITable.Data=t; %數據寫入表格控件
endend(5)微調器的ValueChanged回調函數functionSpinnerValueChanged(app,event)value=app.Spinner.Value;ifapp.TableY==3 %如果是第3列體溫app.cTable{app.TableX,app.TableY}=app.Spinner.Value %將微調器數據修改寫入表格t=cell2table(app.cTable)app.UITable.Data=t; %數據寫入表格控件
endend(6)按鈕的Pushed回調函數functionButtonPushed(app,event)%顯示血壓曲線tHigh1=app.cTable(1:end,4:5); %獲取血壓數據tHigh=cell2mat(tHigh1) %轉為數值plot(app.UIAxes,tHigh)line(app.UIAxes,[0,8],[60,60],'color','g','LineStyle','--')%繪制高血壓和低血壓線line(app.UIAxes,[0,8],[90,90],'color','r','LineStyle','--')line(app.UIAxes,[0,8],[140,140],'color','g','LineStyle','--')end滾動條的Limits=[20,30],單擊滾動條獲取滾動條值時,則正確的是______ A.最大范圍是30 B.滾動條的值使用value屬性 C.單擊一次滾動條則value增加1 D.單擊一次滾動條則value改變1練習AB1.創建菜單在AppDesigner窗口右側的ComponentLibrary控件庫中選擇“MenuBar”控件。6.2.6菜單的設計2.創建上下文菜單functionCloseMenuSelected2(app,event)%關閉窗口菜單delete(app.UIFigure)end1.使用App的UI圖窗函數實現創建窗口程序如下:>>F=uifigure('Name','EmployeeHealth') %創建窗口名其他控件也是采用UI開頭的函數創建。La1=uilabel(F,'position',[200,500,200,100]); %創建標題標簽La1.Text='員工信息錄入';La1.FontSize=24;2.使用基于figure的圖窗體系實現使用figure函數創建圖形窗口,使用uicontrol創建各控件。>>F=figure; %創建窗口>>Bt=uicontrol(F,'style','pushbutton'); %創建按鈕6.2.7編程實現App界面設計6.2.8GUIDE的界面設計和程序遷移在MATLAB前面的版本,界面的設計是采用GUI開發的,創建的GUI界面如圖,采用在命令窗口中輸入如下命令:>>guide %創建GUI界面輸入框為用戶的輸入信息提供了界面,使用inputdlg函數創建,并提供了“Ok”和“Cancel”兩個按鈕,inputdlg函數的命令格式如下:answer=inputdlg(prompt,title,lineno,defans,addopts)
%創建輸入框例:>>prompt={'請輸入正弦函數的頻率'};>>defans={'10'};>>w=inputdlg(prompt,'輸入',1,defans)6.3對話框
6.3.1輸入框1.輸出消息框輸出消息框用來顯示各種輸出信息,使用msgbox函數來創建,只有一個“Ok”按鈕,并利用圖標表示不同的信息類型,msgbox函數的命令格式如下:h=msgbox(message,title,icon,icondata,iconcmap,createmode) %創建輸出消息框例:>>message='輸入參數超出范圍';>>icon='error';>>h=msgbox(message,'出錯',icon)6.3.2輸出框使用輸入對話框輸入一個正弦信號的幅值和相角,默認值為1和0,并使用消息框重新顯示輸入的幅值和相角值。練習答案:prompt={'輸入正弦的幅值','輸入正弦的相角'};defans={'1','0'};n=inputdlg(prompt,'輸入',1,defans)message=['正弦的幅值和相角是',n{1},'和',n{2}];msgbox(message,'顯示')2.專用輸出框練習使用msgbox產生下面窗口使用uigetfile函數顯示打開文件對話框,uiputfile函數顯示保存文件對話框,可以在對話框中選擇文件類型和路徑,命令格式如下:[FileName,
PathName]=uigetfile(FiltrEspec,
Title,x,y)
%打開文件[FileName,
PathName]=uiputfile(FiltrEspec,
Title,x,y)
%保存文件>>[f,p]=uigetfile(‘*.*’,‘打開文件’
)>>[f1,p1]=uiputfile(‘ex6?10.m’,‘保存文件‘)6.3.3文件管理器MATLAB具有專業的圖像處理工具箱可以讀入、顯示和處理多種標準的圖像格式文件,主要支持double、uint16和uint8三種不同數值類型的圖像,支持的圖像文件格式包括.bmp、.gif、.jpg、.tif、.png、.hdf、.pcx和.xwd等。1.圖像類型(1)索引圖像(2)灰度(強度)圖像(3)RGB(真彩)圖像RGB三元值是double型則[000]和[111]分別對應于黑色和白色,如果是uint8,則[000]
和
[255255255]
分別對應于黑色和白色。6.4圖像、聲音和聲音
6.4.1圖像2.圖像處理函數(1)圖像的讀寫[x,map]=imread(filename,fmt) %讀取圖像文件imwrite(x,map,filename,fmt) %寫入圖像文件說明:x是圖像文件的數據矩陣;map是顏色表矩陣,可省略,當imread讀取的不是索引圖像時則為[],當imwrite寫入的不是索引圖像,map省略;filename是圖像文件名;fmt是文件格式,如'bmp'、'cur'、'gif'、'jpg'或'ico'等,可省略。(2)圖像的顯示h=imshow(x,map) %顯示圖像和圖像文件h=image(x) %從數組顯示圖像h=imagesc(x,y,C) %使用縮放顏色顯示圖像例使用imread函數讀取JPEG圖像文件,使用imshow、image和imagesc函數顯示JPEG圖像文件。>>[x1,map1]=imread('002','jpg’) %讀取RGB圖像002.jpg文件figure(1);h1=imshow('002.jpg')%顯示圖像文件figure(2)x=[080];y=[0110];C2=255-C1;%反色計算image(x,y,C2)1.讀取和寫入聲音文件數據音頻工具箱提供了audioread函數讀取.au、.wav、.flac、.ogg、.mp3和.mp4等文件的數據,audiowrite函數用來寫入聲音數據文件,audioinfo函數用來獲取.au和.wav文件的信息。2.播放和錄制audioplayer創建一個音頻播放器對象,可以用來播放音頻信號;audiorecorder用來錄制音頻,sound函數則實現將數據轉換為聲音。>>[y1,Fs]=audioread('merrychristmas.mp3'); %讀取MP3文件>>player1=audioplayer(y1,Fs)>>play(player1) %播放MP3音樂>>y2=audioread('ding.wav’)>>sound(y2) %播放WAV文件
6.4.2聲音MATLAB支持對視頻文件進行讀取和播放,并可以對視頻中的幀進行讀取和播放。1.讀取視頻文件VideoReader函數可以創建對象從視頻文件讀取數據,創建的VideoReader包含視頻文件的信息,支持的文件格式包括.avi、.mpg、.wmv、.asf、.asx和.mp4、.m4v、.mov等。v=VideoReader(filename,Name,Value) %創建VideoReader對象t=hasFrame(v) %獲取視頻是否有可讀幀f=read(v,index) %獲取一個或多個視頻幀f=readFrame(v) %獲取圖形對象的視頻幀6.4.3視頻2.生成和播放視頻m=immovie(X,map) %將索引型圖片生成視頻m=immovie(RGB) %將真彩型圖片生成視頻movie(M,n) %將視頻幀M播放n遍m是視頻結構體類型,X是索引圖片數據,map是colormap圖,RGB是真彩型圖片。例讀取視頻.mpg文件,并逐幀顯示。>>mov=VideoReader('test.mpg');>>Frame1=readFrame(mov);>>figure(1);>>image(Frame1); %顯示第一幀>>whilehasFrame(mov) %是否有可讀視頻幀V(:,:,:,n)=readFrame(mov);%生成視頻數組n=n+1;end>>M=immovie(V) %生成視頻數據以電影方式是將多個畫面逐幀播放,類似于電影的原理,創建動畫的步驟如下:(1)使用getframe命令來抓取每個視頻幀,視頻幀以列向量保存到矩陣中,一般使用for循環來抓取并保存每個視頻幀;(2)使用movie命令來播放視頻幀矩陣。6.5動畫設計
6.5.1以電影方式創建動畫例以電影方式產生視頻幀并播放動畫。(1)使用getframe生成視頻幀矩陣MOVx=-8:0.6:8;[X,Y]=meshgrid(x); %三維圖形需要縱橫坐標準備網格矩陣Z=10*sin(sqrt(X.^2+Y.^2))./(sqrt(X.^2+Y.^2));surf(X,Y,Z) %繪制三維曲面圖%給圖形增加標題和坐標軸設置title('三維動畫演示')axistightmanual %使坐標軸范圍與數據一致axisoff %坐標軸不顯示ax=gca; %獲
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 陽光家園委托協議書
- 車輛保單轉讓協議書
- 酒廠股份合作協議書
- 高層年度分紅協議書
- 雪糕生意轉讓協議書
- 餐飲機器轉讓協議書
- 通訊施工安全協議書
- 車輛有償借用協議書
- 設備制造技術協議書
- 酒店預訂年會協議書
- 幼兒園各類檔案借閱登記表
- SCL-90量表詳細
- 蒸汽疏水閥性能監測斯派莎克工程中國有限公司-Armstrong
- 機械創新設計技術結課論文
- 公路工程項目環境保護措施及其可行性論證
- 普通車床的主軸箱設計機械外文文獻翻譯、中英文翻譯、外文翻譯
- 神經外科各種引流管的護理精品課件
- 湘教版初中地理會考重點圖復習匯集
- 隧道CRD法施工工法
- 年產10萬噸飛灰水洗資源綜合利用項目可行性研究報告模板
- 八年級音樂下冊 第7單元《當兵的人》好男兒就是要當兵課件1 湘教版
評論
0/150
提交評論