MATLAB使用詳解-第14章-圖形對(duì)象和句柄課件_第1頁
MATLAB使用詳解-第14章-圖形對(duì)象和句柄課件_第2頁
MATLAB使用詳解-第14章-圖形對(duì)象和句柄課件_第3頁
MATLAB使用詳解-第14章-圖形對(duì)象和句柄課件_第4頁
MATLAB使用詳解-第14章-圖形對(duì)象和句柄課件_第5頁
已閱讀5頁,還剩53頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第14章圖形對(duì)象和句柄本書在第12章向讀者詳細(xì)介紹了MATLAB的數(shù)據(jù)可視化功能,即如何通過運(yùn)用MATLAB的繪圖函數(shù)和圖形繪制窗口繪制用戶需要的二維、三維等圖形,相信讀者通過學(xué)習(xí),已經(jīng)應(yīng)該對(duì)于“高級(jí)”繪圖的運(yùn)用有了一定程度的了解。正如筆者提到的一樣,MATLAB7.0中的“高級(jí)”繪圖指令往往不能使用戶對(duì)于圖形繪制了解得很透徹,如果用戶需要通過了解“低層”繪圖指令和圖形對(duì)象屬性開發(fā)函數(shù),來對(duì)高級(jí)繪圖指令的形成原理進(jìn)行深入理解,并繪制出更加個(gè)性化的圖形,那么讀者應(yīng)該仔細(xì)閱讀本章。本章首先簡(jiǎn)要介紹了MATLAB圖形對(duì)象的相關(guān)概念、體系結(jié)構(gòu)等;MATLAB中需要通過句柄訪問和控制圖形對(duì)象,因此第14.2節(jié)討論對(duì)象句柄的概念及其訪問;第14.3節(jié)介紹了MATLAB中對(duì)象屬性的查詢、設(shè)置;第14.4-14.5節(jié)分別討論了兩類重要的MATLAB圖形對(duì)象,即窗口對(duì)象和軸對(duì)象;第14.6節(jié)介紹了圖形輸出控制相關(guān)的屬性設(shè)置;第14.7節(jié)介紹M文件內(nèi)句柄的存儲(chǔ)及MATLAB內(nèi)建函數(shù)對(duì)句柄的操作,最后第14.8節(jié)對(duì)本章進(jìn)行了小結(jié)。第14章圖形對(duì)象和句柄本書在第12章向讀者詳細(xì)介紹了MA14.1圖形對(duì)象概述圖形對(duì)象(GraphicsObject)是MATLAB7.0提供給用戶的一種用于創(chuàng)建計(jì)算機(jī)圖形的面向?qū)ο蟮膱D形系統(tǒng),該系統(tǒng)提供給用戶創(chuàng)建線、字、網(wǎng)格、面及圖形用戶界面(GUI,有關(guān)內(nèi)容詳見本書第17章)的多種3繪圖指令。第12章所介紹的各種“高級(jí)”指令都是以圖形對(duì)象為基礎(chǔ)生成的,所以圖形對(duì)象也稱為低層圖形。低層指令的調(diào)用,沒有高層指令那樣簡(jiǎn)明清晰、通俗易懂,但是低層指令可以直接對(duì)圖形的基本要素進(jìn)行操作的特點(diǎn)決定了使用者可以讓繪制的圖形更加個(gè)性化,更加具有表現(xiàn)力。14.1圖形對(duì)象概述圖形對(duì)象(GraphicsObje14.1.1圖形對(duì)象的體系結(jié)構(gòu)圖形對(duì)象是MATLAB中用來顯示數(shù)據(jù)和創(chuàng)建GUI的基本繪圖元素,對(duì)象的每個(gè)實(shí)例(instance)都對(duì)應(yīng)唯一的標(biāo)識(shí)符(Identifier),此標(biāo)識(shí)符稱為對(duì)象的句柄(handle),句柄由系統(tǒng)設(shè)定,用戶不能改變。用戶可以利用句柄輕松地操作現(xiàn)有圖形的各項(xiàng)特征,即設(shè)置對(duì)象屬性。MATLAB的圖形對(duì)象體系結(jié)構(gòu)中包含各種具有繼承關(guān)系的對(duì)象,其關(guān)系有“父子”(從屬)關(guān)系和“兄弟”(平行)關(guān)系兩種,具體如圖14.1所示。14.1.1圖形對(duì)象的體系結(jié)構(gòu)圖形對(duì)象是MATLAB中用14.1.2圖形對(duì)象的類型本小節(jié)主要是在14.1.1節(jié)的基礎(chǔ)上向用戶詳細(xì)介紹各種類型的圖形對(duì)象。(1)根對(duì)象。(2)圖形窗口對(duì)象(Figure)。(3)用戶界面對(duì)象(UIobjects)。用戶界面對(duì)象是圖形窗口對(duì)象的一個(gè)子對(duì)象,其用來創(chuàng)建用戶界面的若干相關(guān)圖形。(4)軸對(duì)象(Axes)。軸對(duì)象和用戶界面對(duì)象是平行的兄弟關(guān)系。14.1.2圖形對(duì)象的類型本小節(jié)主要是在14.1.1節(jié)的14.1.3MATLAB中對(duì)象的屬性MATLAB中各級(jí)對(duì)象的屬性控制其各種外觀和顯示特性。對(duì)象的屬性包括公共屬性(如對(duì)象類型、父、子對(duì)象、是否可見等)和不同類型對(duì)象的特有屬性。例如,通過任何給定的圖形對(duì)象,用戶可以獲取窗口中的最后擊鍵、鼠標(biāo)指針位置,或是最后選中的菜單句柄。14.1.3MATLAB中對(duì)象的屬性MATLAB中各級(jí)對(duì)14.2訪問對(duì)象句柄MATLAB中創(chuàng)建的任何對(duì)象都由系統(tǒng)賦予一個(gè)句柄,所有構(gòu)造函數(shù)的返回值即為其所創(chuàng)建對(duì)象的句柄。14.1.3節(jié)已經(jīng)向讀者介紹了對(duì)于對(duì)象屬性的查詢和設(shè)置,讀者已了解到,如果需要做到對(duì)于對(duì)象屬性的操作(查詢或設(shè)置),則必須在對(duì)象創(chuàng)建之初就將其句柄保存在變量中,作為準(zhǔn)備;如果用戶覺得這樣比較煩瑣,或者偶爾忘記了保存,則還可以調(diào)用findobj函數(shù)或羅列其父對(duì)象的Children屬性來獲取現(xiàn)有對(duì)象的句柄。讀者應(yīng)該很清楚,根對(duì)象的句柄為0,而其子對(duì)象,圖形窗口對(duì)象的句柄一般有兩種情況:整數(shù):默認(rèn)顯示在窗口標(biāo)題欄中;浮點(diǎn)數(shù):具有完全的MATLAB內(nèi)部精度。14.2訪問對(duì)象句柄MATLAB中創(chuàng)建的任何對(duì)象都由系統(tǒng)14.2.1獲取當(dāng)前對(duì)象的句柄MATLAB中,有關(guān)句柄圖形的一個(gè)極為重要的概念是當(dāng)前性(BeCurrent)。例如,當(dāng)前的窗口即為接受繪制函數(shù)輸出的窗口;當(dāng)前的坐標(biāo)軸就是創(chuàng)建坐標(biāo)軸子對(duì)象的命令輸出目標(biāo)坐標(biāo)軸;而當(dāng)前的圖形對(duì)象則為最后創(chuàng)建的圖形對(duì)象,或被用戶用鼠標(biāo)點(diǎn)擊選中的圖形對(duì)象。用戶可以直接把調(diào)用繪圖函數(shù)的返回值存放在一個(gè)變量中,那么這個(gè)變量就是相應(yīng)圖形的句柄。另外一種獲取當(dāng)前對(duì)象句柄的常用方法是調(diào)用get函數(shù),get函數(shù)的調(diào)用格式和功能系統(tǒng)地闡述如下。14.2.1獲取當(dāng)前對(duì)象的句柄MATLAB中,有關(guān)句柄圖14.2.2調(diào)用findobj函數(shù)通過屬性值查詢對(duì)象MATLAB提供給用戶findobj函數(shù),用于通過對(duì)屬性值的搜索來查詢對(duì)象句柄。findobj函數(shù)可以快速形成一個(gè)結(jié)構(gòu)層次的截面并獲得具有指定屬性值的對(duì)象句柄,如果用戶沒有指定起始對(duì)象,那么系統(tǒng)默認(rèn)findobj函數(shù)從Root對(duì)象開始,搜索與用戶指定屬性名和屬性值相符的所有對(duì)象。用戶希望將字符串‘sin(t)=.707’從當(dāng)前位置點(diǎn)[pi/4,sin(pi/4)]移動(dòng)到點(diǎn)[3*pi/4,sin(3*pi/4)],這兩個(gè)位置點(diǎn)的函數(shù)值相同。為了實(shí)現(xiàn)移動(dòng)操作,用戶首先要獲得字對(duì)象的句柄,然后通過使用這個(gè)獲得的句柄修改字對(duì)象的屬性Position。14.2.2調(diào)用findobj函數(shù)通過屬性值查詢對(duì)象MA14.2.3使用句柄操作對(duì)象本節(jié)主要講解如何利用句柄,完成對(duì)于對(duì)象的復(fù)制和刪除操作。(1)調(diào)用copyobj函數(shù)復(fù)制對(duì)象。用戶利用MATLAB中的copyobj函數(shù),可以將對(duì)象a1從其父對(duì)象中復(fù)制到另一個(gè)對(duì)象中,生成新的對(duì)象a2,則a1和a2的區(qū)別有2點(diǎn):父對(duì)象不同;對(duì)象句柄不同。(2)調(diào)用delete函數(shù)刪除對(duì)象。MATLAB中,用戶可以使用delete函數(shù),刪除一個(gè)對(duì)象,其參數(shù)是此對(duì)象的句柄。例如,用戶可以需要?jiǎng)h除當(dāng)前的坐標(biāo)軸,代碼如下:delete(gca)14.2.3使用句柄操作對(duì)象本節(jié)主要講解如何利用句柄,完14.3設(shè)置和訪問MATLAB對(duì)象屬性MATLAB提供了set和get兩個(gè)函數(shù),分別可以使用戶設(shè)置和返回現(xiàn)有圖形對(duì)象的屬性值。利用這兩個(gè)函數(shù),還可以列出具體固定設(shè)置的屬性的所有值。兩個(gè)函數(shù)的基本調(diào)用格式如下:set(object_handle,'PropertyName','NewPropertyValue');returned_value=get(object_handle,'PropertyName')。以上兩函數(shù)調(diào)用格式中,object_handle代表對(duì)象句柄,'PropertyName'代表屬性名稱,'NewPropertyValue'代表用戶設(shè)置的屬性值。注意:函數(shù)調(diào)用格式中的屬性名稱為引用的字符串,而屬性值則根據(jù)與不同的屬性而變換類型。14.3設(shè)置和訪問MATLAB對(duì)象屬性MATLAB提供了14.3.1設(shè)置屬性值調(diào)用set函數(shù),并利用對(duì)象的返回句柄,用戶可以設(shè)置現(xiàn)有對(duì)象的屬性,例如,下面的代碼將y軸移動(dòng)到圖形的當(dāng)前坐標(biāo)系的左邊。set(gca,'YAxisLocation','left')如果句柄參數(shù)是一個(gè)矢量,則MATLAB將所有標(biāo)識(shí)的對(duì)象均進(jìn)行屬性的設(shè)置。用戶還可以運(yùn)用構(gòu)架和元胞數(shù)組設(shè)置屬性名稱和屬性值,這在設(shè)置多個(gè)對(duì)象的相同屬性時(shí)非常奏效。view1.CameraViewAngleMode='manual';view1.DataAspectRatio=[111];view1.ProjectionType='Perspective';14.3.1設(shè)置屬性值調(diào)用set函數(shù),并利用對(duì)象的返回句14.3.2查詢屬性值MATLAB中,用戶可以調(diào)用get函數(shù)來查詢對(duì)象屬性的當(dāng)前值。(1)單個(gè)屬性值的查詢:調(diào)用get函數(shù)獲取對(duì)象屬性,用戶可以得到該屬性中的所有數(shù)據(jù)(2)返回構(gòu)架:如果用戶將get函數(shù)的返回值賦給一個(gè)變量,那么MATLAB將創(chuàng)建一個(gè)構(gòu)架數(shù)組。(3)查詢屬性組:用戶也可以首先定義屬性名稱的元胞數(shù)組,然后便捷地獲取相應(yīng)的屬性值。14.3.2查詢屬性值MATLAB中,用戶可以調(diào)用get14.3.3默認(rèn)屬性以上兩小節(jié),向讀者介紹了如何設(shè)置和查詢MATLAB中對(duì)象的屬性,實(shí)際上,MATLAB中的所有對(duì)象屬性都有系統(tǒng)內(nèi)建的默認(rèn)值,即出廠設(shè)置值;當(dāng)然,用戶也可以自行定義任何一個(gè)MATLAB對(duì)象的默認(rèn)屬性值。

14.3.3默認(rèn)屬性以上兩小節(jié),向讀者介紹了如何設(shè)置和14.4圖形窗口對(duì)象MATLAB圖形窗口對(duì)象是用于顯示MATLAB中圖形輸出的窗口,所以圖形窗口對(duì)象的屬性可以決定輸出窗口的多種特征。本節(jié)主要介紹圖形窗口對(duì)象的屬性設(shè)置,這些屬性與窗口的大小、位置、色彩、曲線繪制方式及指正樣式有關(guān)。14.4圖形窗口對(duì)象MATLAB圖形窗口對(duì)象是用于顯示M14.4.1設(shè)置圖形窗口的位置屬性圖形窗口對(duì)象的位置(Position)屬性決定圖形窗口在屏幕上的大小和位置,位置屬性的默認(rèn)設(shè)置是:圖形大小是屏幕大小的1/4,且位于上半屏幕的中間位置。在MATLAB中,圖形窗口的位置屬性是一個(gè)矢量:[leftbottomwidthheight]。其中l(wèi)eft和bottom確定窗口左下角的位置,而width和height分別確定窗口的寬和高,如圖所示。14.4.1設(shè)置圖形窗口的位置屬性圖形窗口對(duì)象的位置(P14.4.2設(shè)置圖形窗口的色彩屬性色彩屬性關(guān)系到MATLAB使用系統(tǒng)色彩資源的方式,用戶對(duì)色彩屬性的設(shè)置,將影響圖形窗口子對(duì)象的繪制上色速度和精確度。14.4.2設(shè)置圖形窗口的色彩屬性色彩屬性關(guān)系到MATL14.4.3圖像窗口的繪制模式MATLAB允許用戶選擇不同的方式來繪制圖形,方式的選擇主要取決于所繪制圖形的類型。決定MATLAB繪制圖形的方式有下面4種。BackingStore:當(dāng)圖形被遮擋部分顯露出來時(shí),確定是否重繪。DoubleBuffer:為簡(jiǎn)單動(dòng)畫生成渲染效果。Renderer和RendererMode:指定不同的渲染方法,或由MATLAB選擇。14.4.3圖像窗口的繪制模式MATLAB允許用戶選擇不14.4.4定制圖形窗口的光標(biāo)除了對(duì)繪制方式的選擇,MATLAB還提供了多種指針符號(hào),供用戶選擇。在圖形窗口中,圖形符號(hào)表示指針位置,用戶可以選擇系統(tǒng)預(yù)定義的15種指針符號(hào),也可以自行設(shè)置指針符號(hào)。指針符號(hào)的屬性值、標(biāo)識(shí)及具體功能,14.4.4定制圖形窗口的光標(biāo)除了對(duì)繪制方式的選擇,MA14.5軸對(duì)象軸對(duì)象是圖形窗口對(duì)象的子對(duì)象,也是眾多重要對(duì)象的父對(duì)象(參看第14.1節(jié)),在圖形對(duì)象的結(jié)構(gòu)中,是十分重要的一環(huán)。軸對(duì)象的屬性眾多,功能主要為控制圖像各方面信息的顯示。本節(jié)就其重要的屬性進(jìn)行介紹。14.5軸對(duì)象軸對(duì)象是圖形窗口對(duì)象的子對(duì)象,也是眾多重要14.5.1設(shè)置軸對(duì)象的位置屬性同圖形窗口對(duì)象一樣,軸對(duì)象的幾何屬性分別是位置屬性“Position”和單位屬性“Units”,決定了軸對(duì)象在圖形窗口對(duì)象中的位置、大小和軸對(duì)象的單位。值得讀者注意的是,這些屬性與圖形窗口對(duì)象有不同之處。在圖形是二維曲線時(shí),軸位框和坐標(biāo)框兩者完全重合,14.5.1設(shè)置軸對(duì)象的位置屬性同圖形窗口對(duì)象一樣,軸對(duì)14.5.2設(shè)置軸對(duì)象的刻度、刻度標(biāo)記及坐標(biāo)軸方向?qū)傩员竟?jié)以一個(gè)實(shí)例講解單軸對(duì)象控制刻度、刻度標(biāo)記及坐標(biāo)軸方向的屬性。14.5.2設(shè)置軸對(duì)象的刻度、刻度標(biāo)記及坐標(biāo)軸方向?qū)傩员?4.5.3軸對(duì)象的多軸重疊本書在第12章中曾介紹過的subplot函數(shù)可以完成單圖多軸的繪制,使用subplot函數(shù)可把一個(gè)圖形窗口按位置等分成多個(gè)“子塊”,分別在每一部分繪制獨(dú)立的圖形。在此基礎(chǔ)上,本小節(jié)講解軸對(duì)象的“多軸重疊屬性”,即允許用戶在一個(gè)圖形窗口對(duì)象中繪制多個(gè)重疊軸對(duì)象。14.5.3軸對(duì)象的多軸重疊本書在第12章中曾介紹過的s14.5.4軸對(duì)象的自動(dòng)模式屬性自動(dòng)模式屬性(Automatic-ModeProperties)又常被稱為“照相機(jī)屬性”。用戶可以在軸對(duì)象屬性的基礎(chǔ)上設(shè)置MATLAB照相機(jī)屬性,MATLAB照相機(jī)屬性如表所示。14.5.4軸對(duì)象的自動(dòng)模式屬性自動(dòng)模式屬性(Autom14.6控制圖形輸出本書在以前的章節(jié)多次提到,MATLAB允許用戶同時(shí)打開多個(gè)繪圖窗口,但是,當(dāng)前窗口只能有一個(gè),也就是說盡管用戶打開的窗口不止一個(gè),但系統(tǒng)運(yùn)行的結(jié)果輸出只能顯示在眾多窗口中的一個(gè)中,那么如何使用句柄保證輸出的窗口是用戶指定的窗口,而同時(shí)保證其他窗口不受輸出結(jié)果的影響,這就是本節(jié)要主要介紹的問題。14.6控制圖形輸出本書在以前的章節(jié)多次提到,MATLA14.6.1定制圖形輸出的窗口在默認(rèn)情況下,創(chuàng)建圖形對(duì)象的MATLAB函數(shù)把結(jié)果顯示在當(dāng)前圖形窗口對(duì)象和軸對(duì)象上(圖形對(duì)象是以軸對(duì)象的子對(duì)象為前提),用戶也可以通過創(chuàng)建函數(shù)明確地指定其父對(duì)象屬性,來使輸出到用戶需要的父對(duì)象中,例如下列代碼。plot(1:10,'Parent',axes_handle)以上代碼中,用戶指定了axes_handle為輸出目標(biāo)軸對(duì)象的句柄。另外,uicontrol和uimenu函數(shù)提供一種更加簡(jiǎn)便的調(diào)用格式,即第一個(gè)參數(shù)就是指定目標(biāo)父對(duì)象的名稱,例如下列代碼。uicontrol(Figure_handle,...)uimenu(parent_menu_handle,...)14.6.1定制圖形輸出的窗口在默認(rèn)情況下,創(chuàng)建圖形對(duì)象14.6.2定制圖形輸出的軸默認(rèn)情況下,圖形繪制函數(shù)將輸出的圖形對(duì)象直接顯示在當(dāng)前的圖形窗口中,而并不清除或重設(shè)圖形窗口的屬性。但是,如果圖形對(duì)象是軸對(duì)象的子對(duì)象,MATLAB在顯示圖形對(duì)象之前,會(huì)將絕大多數(shù)的軸對(duì)象屬性設(shè)置為其默認(rèn)設(shè)置。用戶可以通過改變圖形窗口對(duì)象和軸對(duì)象的NextPlot屬性來改變MATLAB的此種默認(rèn)設(shè)置。在MATLAB7.0中,高級(jí)繪圖函數(shù)在繪制圖形之前首先要檢查NextPlot屬性,然后決定是直接添加圖形還是擦除重置圖形窗口對(duì)象和軸對(duì)象;而低級(jí)對(duì)象創(chuàng)建函數(shù)則不檢查NextPlot的屬性,只是進(jìn)行簡(jiǎn)單地添加圖形的操作。14.6.2定制圖形輸出的軸默認(rèn)情況下,圖形繪制函數(shù)將輸14.6.3利用newPlot屬性定制圖形輸出的重疊屬性MATLAB提供給用戶newplot函數(shù)用以簡(jiǎn)化編寫與NextPlot屬性值設(shè)置保持一致的M-文件的過程。newplot函數(shù)首先檢查NextPlot屬性值設(shè)置情況,然后根據(jù)不同的情況采取相應(yīng)的操作方法。所以,應(yīng)該把newplot函數(shù)放置于任何調(diào)用圖形對(duì)象構(gòu)造函數(shù)的M-文件的起始位置。14.6.3利用newPlot屬性定制圖形輸出的重疊屬性14.7M函數(shù)內(nèi)句柄操作圖形的M-文件往往使用句柄來訪問屬性值,并通過句柄直接定義圖形輸出的目標(biāo)。MATLAB7.0提供給用戶一些函數(shù)來獲得圖形關(guān)鍵對(duì)象(例如當(dāng)前窗口和坐標(biāo)軸)的句柄,然而在M文件中,使用這些函數(shù)并非優(yōu)選的方法,原因是:MATLAB7.0中將句柄直接存儲(chǔ)在一個(gè)變量中比查詢對(duì)象句柄或其他信息的執(zhí)行效率高;當(dāng)前軸對(duì)象、圖形窗口對(duì)象或者其他對(duì)象可能因?yàn)橛脩舻慕换ザa(chǎn)生變化,查詢方式難以保證句柄的完全正確;相反,使用變量來存儲(chǔ)句柄卻可以保證正確地反映對(duì)象產(chǎn)生的變化。14.7M函數(shù)內(nèi)句柄操作圖形的M-文件往往使用句柄來訪問14.8小結(jié)本章主要介紹MATLAB圖形對(duì)象及相關(guān)的句柄操作,用戶可以通過圖形對(duì)象及其句柄更好地控制圖形的顯示,通過本章的學(xué)習(xí),讀者應(yīng)熟練掌握以下的內(nèi)容。MATLAB圖形對(duì)象的概念及體系結(jié)構(gòu);對(duì)象句柄的概念及其操作;MATLAB對(duì)象屬性的訪問和設(shè)置;圖形窗口對(duì)象和軸對(duì)象;圖形輸出控制。14.8小結(jié)本章主要介紹MATLAB圖形對(duì)象及相關(guān)的句柄第14章圖形對(duì)象和句柄本書在第12章向讀者詳細(xì)介紹了MATLAB的數(shù)據(jù)可視化功能,即如何通過運(yùn)用MATLAB的繪圖函數(shù)和圖形繪制窗口繪制用戶需要的二維、三維等圖形,相信讀者通過學(xué)習(xí),已經(jīng)應(yīng)該對(duì)于“高級(jí)”繪圖的運(yùn)用有了一定程度的了解。正如筆者提到的一樣,MATLAB7.0中的“高級(jí)”繪圖指令往往不能使用戶對(duì)于圖形繪制了解得很透徹,如果用戶需要通過了解“低層”繪圖指令和圖形對(duì)象屬性開發(fā)函數(shù),來對(duì)高級(jí)繪圖指令的形成原理進(jìn)行深入理解,并繪制出更加個(gè)性化的圖形,那么讀者應(yīng)該仔細(xì)閱讀本章。本章首先簡(jiǎn)要介紹了MATLAB圖形對(duì)象的相關(guān)概念、體系結(jié)構(gòu)等;MATLAB中需要通過句柄訪問和控制圖形對(duì)象,因此第14.2節(jié)討論對(duì)象句柄的概念及其訪問;第14.3節(jié)介紹了MATLAB中對(duì)象屬性的查詢、設(shè)置;第14.4-14.5節(jié)分別討論了兩類重要的MATLAB圖形對(duì)象,即窗口對(duì)象和軸對(duì)象;第14.6節(jié)介紹了圖形輸出控制相關(guān)的屬性設(shè)置;第14.7節(jié)介紹M文件內(nèi)句柄的存儲(chǔ)及MATLAB內(nèi)建函數(shù)對(duì)句柄的操作,最后第14.8節(jié)對(duì)本章進(jìn)行了小結(jié)。第14章圖形對(duì)象和句柄本書在第12章向讀者詳細(xì)介紹了MA14.1圖形對(duì)象概述圖形對(duì)象(GraphicsObject)是MATLAB7.0提供給用戶的一種用于創(chuàng)建計(jì)算機(jī)圖形的面向?qū)ο蟮膱D形系統(tǒng),該系統(tǒng)提供給用戶創(chuàng)建線、字、網(wǎng)格、面及圖形用戶界面(GUI,有關(guān)內(nèi)容詳見本書第17章)的多種3繪圖指令。第12章所介紹的各種“高級(jí)”指令都是以圖形對(duì)象為基礎(chǔ)生成的,所以圖形對(duì)象也稱為低層圖形。低層指令的調(diào)用,沒有高層指令那樣簡(jiǎn)明清晰、通俗易懂,但是低層指令可以直接對(duì)圖形的基本要素進(jìn)行操作的特點(diǎn)決定了使用者可以讓繪制的圖形更加個(gè)性化,更加具有表現(xiàn)力。14.1圖形對(duì)象概述圖形對(duì)象(GraphicsObje14.1.1圖形對(duì)象的體系結(jié)構(gòu)圖形對(duì)象是MATLAB中用來顯示數(shù)據(jù)和創(chuàng)建GUI的基本繪圖元素,對(duì)象的每個(gè)實(shí)例(instance)都對(duì)應(yīng)唯一的標(biāo)識(shí)符(Identifier),此標(biāo)識(shí)符稱為對(duì)象的句柄(handle),句柄由系統(tǒng)設(shè)定,用戶不能改變。用戶可以利用句柄輕松地操作現(xiàn)有圖形的各項(xiàng)特征,即設(shè)置對(duì)象屬性。MATLAB的圖形對(duì)象體系結(jié)構(gòu)中包含各種具有繼承關(guān)系的對(duì)象,其關(guān)系有“父子”(從屬)關(guān)系和“兄弟”(平行)關(guān)系兩種,具體如圖14.1所示。14.1.1圖形對(duì)象的體系結(jié)構(gòu)圖形對(duì)象是MATLAB中用14.1.2圖形對(duì)象的類型本小節(jié)主要是在14.1.1節(jié)的基礎(chǔ)上向用戶詳細(xì)介紹各種類型的圖形對(duì)象。(1)根對(duì)象。(2)圖形窗口對(duì)象(Figure)。(3)用戶界面對(duì)象(UIobjects)。用戶界面對(duì)象是圖形窗口對(duì)象的一個(gè)子對(duì)象,其用來創(chuàng)建用戶界面的若干相關(guān)圖形。(4)軸對(duì)象(Axes)。軸對(duì)象和用戶界面對(duì)象是平行的兄弟關(guān)系。14.1.2圖形對(duì)象的類型本小節(jié)主要是在14.1.1節(jié)的14.1.3MATLAB中對(duì)象的屬性MATLAB中各級(jí)對(duì)象的屬性控制其各種外觀和顯示特性。對(duì)象的屬性包括公共屬性(如對(duì)象類型、父、子對(duì)象、是否可見等)和不同類型對(duì)象的特有屬性。例如,通過任何給定的圖形對(duì)象,用戶可以獲取窗口中的最后擊鍵、鼠標(biāo)指針位置,或是最后選中的菜單句柄。14.1.3MATLAB中對(duì)象的屬性MATLAB中各級(jí)對(duì)14.2訪問對(duì)象句柄MATLAB中創(chuàng)建的任何對(duì)象都由系統(tǒng)賦予一個(gè)句柄,所有構(gòu)造函數(shù)的返回值即為其所創(chuàng)建對(duì)象的句柄。14.1.3節(jié)已經(jīng)向讀者介紹了對(duì)于對(duì)象屬性的查詢和設(shè)置,讀者已了解到,如果需要做到對(duì)于對(duì)象屬性的操作(查詢或設(shè)置),則必須在對(duì)象創(chuàng)建之初就將其句柄保存在變量中,作為準(zhǔn)備;如果用戶覺得這樣比較煩瑣,或者偶爾忘記了保存,則還可以調(diào)用findobj函數(shù)或羅列其父對(duì)象的Children屬性來獲取現(xiàn)有對(duì)象的句柄。讀者應(yīng)該很清楚,根對(duì)象的句柄為0,而其子對(duì)象,圖形窗口對(duì)象的句柄一般有兩種情況:整數(shù):默認(rèn)顯示在窗口標(biāo)題欄中;浮點(diǎn)數(shù):具有完全的MATLAB內(nèi)部精度。14.2訪問對(duì)象句柄MATLAB中創(chuàng)建的任何對(duì)象都由系統(tǒng)14.2.1獲取當(dāng)前對(duì)象的句柄MATLAB中,有關(guān)句柄圖形的一個(gè)極為重要的概念是當(dāng)前性(BeCurrent)。例如,當(dāng)前的窗口即為接受繪制函數(shù)輸出的窗口;當(dāng)前的坐標(biāo)軸就是創(chuàng)建坐標(biāo)軸子對(duì)象的命令輸出目標(biāo)坐標(biāo)軸;而當(dāng)前的圖形對(duì)象則為最后創(chuàng)建的圖形對(duì)象,或被用戶用鼠標(biāo)點(diǎn)擊選中的圖形對(duì)象。用戶可以直接把調(diào)用繪圖函數(shù)的返回值存放在一個(gè)變量中,那么這個(gè)變量就是相應(yīng)圖形的句柄。另外一種獲取當(dāng)前對(duì)象句柄的常用方法是調(diào)用get函數(shù),get函數(shù)的調(diào)用格式和功能系統(tǒng)地闡述如下。14.2.1獲取當(dāng)前對(duì)象的句柄MATLAB中,有關(guān)句柄圖14.2.2調(diào)用findobj函數(shù)通過屬性值查詢對(duì)象MATLAB提供給用戶findobj函數(shù),用于通過對(duì)屬性值的搜索來查詢對(duì)象句柄。findobj函數(shù)可以快速形成一個(gè)結(jié)構(gòu)層次的截面并獲得具有指定屬性值的對(duì)象句柄,如果用戶沒有指定起始對(duì)象,那么系統(tǒng)默認(rèn)findobj函數(shù)從Root對(duì)象開始,搜索與用戶指定屬性名和屬性值相符的所有對(duì)象。用戶希望將字符串‘sin(t)=.707’從當(dāng)前位置點(diǎn)[pi/4,sin(pi/4)]移動(dòng)到點(diǎn)[3*pi/4,sin(3*pi/4)],這兩個(gè)位置點(diǎn)的函數(shù)值相同。為了實(shí)現(xiàn)移動(dòng)操作,用戶首先要獲得字對(duì)象的句柄,然后通過使用這個(gè)獲得的句柄修改字對(duì)象的屬性Position。14.2.2調(diào)用findobj函數(shù)通過屬性值查詢對(duì)象MA14.2.3使用句柄操作對(duì)象本節(jié)主要講解如何利用句柄,完成對(duì)于對(duì)象的復(fù)制和刪除操作。(1)調(diào)用copyobj函數(shù)復(fù)制對(duì)象。用戶利用MATLAB中的copyobj函數(shù),可以將對(duì)象a1從其父對(duì)象中復(fù)制到另一個(gè)對(duì)象中,生成新的對(duì)象a2,則a1和a2的區(qū)別有2點(diǎn):父對(duì)象不同;對(duì)象句柄不同。(2)調(diào)用delete函數(shù)刪除對(duì)象。MATLAB中,用戶可以使用delete函數(shù),刪除一個(gè)對(duì)象,其參數(shù)是此對(duì)象的句柄。例如,用戶可以需要?jiǎng)h除當(dāng)前的坐標(biāo)軸,代碼如下:delete(gca)14.2.3使用句柄操作對(duì)象本節(jié)主要講解如何利用句柄,完14.3設(shè)置和訪問MATLAB對(duì)象屬性MATLAB提供了set和get兩個(gè)函數(shù),分別可以使用戶設(shè)置和返回現(xiàn)有圖形對(duì)象的屬性值。利用這兩個(gè)函數(shù),還可以列出具體固定設(shè)置的屬性的所有值。兩個(gè)函數(shù)的基本調(diào)用格式如下:set(object_handle,'PropertyName','NewPropertyValue');returned_value=get(object_handle,'PropertyName')。以上兩函數(shù)調(diào)用格式中,object_handle代表對(duì)象句柄,'PropertyName'代表屬性名稱,'NewPropertyValue'代表用戶設(shè)置的屬性值。注意:函數(shù)調(diào)用格式中的屬性名稱為引用的字符串,而屬性值則根據(jù)與不同的屬性而變換類型。14.3設(shè)置和訪問MATLAB對(duì)象屬性MATLAB提供了14.3.1設(shè)置屬性值調(diào)用set函數(shù),并利用對(duì)象的返回句柄,用戶可以設(shè)置現(xiàn)有對(duì)象的屬性,例如,下面的代碼將y軸移動(dòng)到圖形的當(dāng)前坐標(biāo)系的左邊。set(gca,'YAxisLocation','left')如果句柄參數(shù)是一個(gè)矢量,則MATLAB將所有標(biāo)識(shí)的對(duì)象均進(jìn)行屬性的設(shè)置。用戶還可以運(yùn)用構(gòu)架和元胞數(shù)組設(shè)置屬性名稱和屬性值,這在設(shè)置多個(gè)對(duì)象的相同屬性時(shí)非常奏效。view1.CameraViewAngleMode='manual';view1.DataAspectRatio=[111];view1.ProjectionType='Perspective';14.3.1設(shè)置屬性值調(diào)用set函數(shù),并利用對(duì)象的返回句14.3.2查詢屬性值MATLAB中,用戶可以調(diào)用get函數(shù)來查詢對(duì)象屬性的當(dāng)前值。(1)單個(gè)屬性值的查詢:調(diào)用get函數(shù)獲取對(duì)象屬性,用戶可以得到該屬性中的所有數(shù)據(jù)(2)返回構(gòu)架:如果用戶將get函數(shù)的返回值賦給一個(gè)變量,那么MATLAB將創(chuàng)建一個(gè)構(gòu)架數(shù)組。(3)查詢屬性組:用戶也可以首先定義屬性名稱的元胞數(shù)組,然后便捷地獲取相應(yīng)的屬性值。14.3.2查詢屬性值MATLAB中,用戶可以調(diào)用get14.3.3默認(rèn)屬性以上兩小節(jié),向讀者介紹了如何設(shè)置和查詢MATLAB中對(duì)象的屬性,實(shí)際上,MATLAB中的所有對(duì)象屬性都有系統(tǒng)內(nèi)建的默認(rèn)值,即出廠設(shè)置值;當(dāng)然,用戶也可以自行定義任何一個(gè)MATLAB對(duì)象的默認(rèn)屬性值。

14.3.3默認(rèn)屬性以上兩小節(jié),向讀者介紹了如何設(shè)置和14.4圖形窗口對(duì)象MATLAB圖形窗口對(duì)象是用于顯示MATLAB中圖形輸出的窗口,所以圖形窗口對(duì)象的屬性可以決定輸出窗口的多種特征。本節(jié)主要介紹圖形窗口對(duì)象的屬性設(shè)置,這些屬性與窗口的大小、位置、色彩、曲線繪制方式及指正樣式有關(guān)。14.4圖形窗口對(duì)象MATLAB圖形窗口對(duì)象是用于顯示M14.4.1設(shè)置圖形窗口的位置屬性圖形窗口對(duì)象的位置(Position)屬性決定圖形窗口在屏幕上的大小和位置,位置屬性的默認(rèn)設(shè)置是:圖形大小是屏幕大小的1/4,且位于上半屏幕的中間位置。在MATLAB中,圖形窗口的位置屬性是一個(gè)矢量:[leftbottomwidthheight]。其中l(wèi)eft和bottom確定窗口左下角的位置,而width和height分別確定窗口的寬和高,如圖所示。14.4.1設(shè)置圖形窗口的位置屬性圖形窗口對(duì)象的位置(P14.4.2設(shè)置圖形窗口的色彩屬性色彩屬性關(guān)系到MATLAB使用系統(tǒng)色彩資源的方式,用戶對(duì)色彩屬性的設(shè)置,將影響圖形窗口子對(duì)象的繪制上色速度和精確度。14.4.2設(shè)置圖形窗口的色彩屬性色彩屬性關(guān)系到MATL14.4.3圖像窗口的繪制模式MATLAB允許用戶選擇不同的方式來繪制圖形,方式的選擇主要取決于所繪制圖形的類型。決定MATLAB繪制圖形的方式有下面4種。BackingStore:當(dāng)圖形被遮擋部分顯露出來時(shí),確定是否重繪。DoubleBuffer:為簡(jiǎn)單動(dòng)畫生成渲染效果。Renderer和RendererMode:指定不同的渲染方法,或由MATLAB選擇。14.4.3圖像窗口的繪制模式MATLAB允許用戶選擇不14.4.4定制圖形窗口的光標(biāo)除了對(duì)繪制方式的選擇,MATLAB還提供了多種指針符號(hào),供用戶選擇。在圖形窗口中,圖形符號(hào)表示指針位置,用戶可以選擇系統(tǒng)預(yù)定義的15種指針符號(hào),也可以自行設(shè)置指針符號(hào)。指針符號(hào)的屬性值、標(biāo)識(shí)及具體功能,14.4.4定制圖形窗口的光標(biāo)除了對(duì)繪制方式的選擇,MA14.5軸對(duì)象軸對(duì)象是圖形窗口對(duì)象的子對(duì)象,也是眾多重要對(duì)象的父對(duì)象(參看第14.1節(jié)),在圖形對(duì)象的結(jié)構(gòu)中,是十分重要的一環(huán)。軸對(duì)象的屬性眾多,功能主要為控制圖像各方面信息的顯示。本節(jié)就其重要的屬性進(jìn)行介紹。14.5軸對(duì)象軸對(duì)象是圖形窗口對(duì)象的子對(duì)象,也是眾多重要14.5.1設(shè)置軸對(duì)象的位置屬性同圖形窗口對(duì)象一樣,軸對(duì)象的幾何屬性分別是位置屬性“Position”和單位屬性“Units”,決定了軸對(duì)象在圖形窗口對(duì)象中的位置、大小和軸對(duì)象的單位。值得讀者注意的是,這些屬性與圖形窗口對(duì)象有不同之處。在圖形是二維曲線時(shí),軸位框和坐標(biāo)框兩者完全重合,14.5.1設(shè)置軸對(duì)象的位置屬性同圖形窗口對(duì)象一樣,軸對(duì)14.5.2設(shè)置軸對(duì)象的刻度、刻度標(biāo)記及坐標(biāo)軸方向?qū)傩员竟?jié)以一個(gè)實(shí)例講解單軸對(duì)象控制刻度、刻度標(biāo)記及坐標(biāo)軸方向的屬性。14.5.2設(shè)置軸對(duì)象的刻度、刻度標(biāo)記及坐標(biāo)軸方向?qū)傩员?4.5.3軸對(duì)象的多軸重疊本書在第12章中曾介紹過的subplot函數(shù)可以完成單圖多軸的繪制,使用subplot函數(shù)可把一個(gè)圖形窗口按位置等分成多個(gè)“子塊”,分別在每一部分繪制獨(dú)立的圖形。在此基礎(chǔ)上,本小節(jié)講解軸對(duì)象的“多軸重疊屬性”,即允許用戶在一個(gè)圖形窗口對(duì)象中繪制多個(gè)重疊軸對(duì)象。14.5.3軸對(duì)象的多軸重疊本書在第12章中曾介紹過的s14.5.4軸對(duì)象的自動(dòng)模式屬性自動(dòng)模式屬性(Automatic-ModeProperties)又常被稱為“照相機(jī)屬性”。用戶可以在軸對(duì)象屬性的基礎(chǔ)上設(shè)置MATLAB照相機(jī)屬性,MATLAB照相機(jī)屬性如表所示。14.5.4軸對(duì)象的自動(dòng)模式屬性自動(dòng)模式屬性(Autom14.6控制圖形輸出本書在以前的章節(jié)多次提到,MATLAB允許用戶同時(shí)打開多個(gè)繪圖窗口,但是,當(dāng)前窗口只能有一個(gè),也就是說盡管用戶打開的窗口不止一個(gè),但系統(tǒng)運(yùn)行的結(jié)果輸出只能顯示在眾多窗口中的一個(gè)中,那么如何使用句柄保證輸出的窗口是用戶指定的窗口,而同時(shí)保證其他窗口不受輸出結(jié)果的影響,這就是本節(jié)要主要介紹的問

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論