這是本人畢業(yè)論文最后一張內容,有什么問題盡管提。
5.1Matlab畫圖基本介紹
Matlab是由美國Mathworks公司發(fā)布的計算環(huán)境。其主要特點是實現(xiàn)數(shù)據可視化以及交互式程序設計。Matlab有著強大的繪圖功能,而且由于Matlab基本數(shù)據單位是矩陣,故其能夠簡單的實現(xiàn)高層次的作圖,包括二維和三維的可視化、圖象處理、動畫和表達式作圖。
Matlab圖形系統(tǒng)使用的是面向對象的設計方法,其優(yōu)越性在于可以重復的利用對象進行編程。面向對象方法是90年代軟件開發(fā)方法的主流,其思想就是將所有的數(shù)據都被封裝在類的實例中,而整個程序則被封裝在一個更高級的類中。在使用既存部件的面向對象系統(tǒng)中,可以只花費少量時間和工作量來實現(xiàn)目標。在Matlab中,把許多有共同屬性的圖形對象抽象成為一個類,圖形中每個對象都是類的一個實例,即對象,多個對象組合在一起,形成有意義的圖形。不同的類有不同的依賴關系,按照一定關系組成圖形對象的層次結構,如圖5-1所示。
圖5-1 Matlab圖形對象的層次結構
第一層為根類,也成為root類對象,它表示計算機屏幕,是其他所有類的父類。根類保存一些系統(tǒng)狀態(tài)信息和設置信息。
第二層為圖形窗口類,也成figure類,他表示整個圖形窗口,是根的直接子類。
第三層為坐標軸類和用戶接口類,是figure類的直接子類。坐標軸類是核心類和組類的父類,用于數(shù)據的可視化;用戶接口類(也成UI類)用于Matlab與用戶之間交互操作。
第四層包括核心類和組類。核心類為所有繪圖的基本元素;組對象為多個核心對象組合而成的坐標軸子對象。例如,圖形的注釋(annotation函數(shù)創(chuàng)建)、插圖(legend函數(shù)創(chuàng)建)、直方圖(bar函數(shù)創(chuàng)建)、火柴桿圖(stem函數(shù)創(chuàng)建)等,都是組類。圖形對象的創(chuàng)建函數(shù)與函數(shù)描述見表5-1
表5-1 圖形的創(chuàng)建函數(shù)與函數(shù)描述
對象所屬的類 | 創(chuàng)建函數(shù) | 對象描述 |
根 | root | 計算機屏幕 |
圖形窗口 | figure | 顯示圖形和用戶界面的窗口 |
坐標軸 | axes | 在圖形窗口中顯示的坐標軸 |
內部控件 | uicontrol | UI對象,執(zhí)行用戶接口交互相應函數(shù)的控件 |
圖像 | image | 核心對象,基于像素點的二維圖片 |
燈光 | light | 核心對象,影響塊對象和曲面對象的光源 |
線條 ![]() | line | 核心對象,在指定坐標軸內繪制一條線 |
塊 | patch | 核心對象,有邊界的填充多邊形 |
矩形 | rectangle | 核心對象,有曲率屬性的、從橢圓到矩形變化的二維圖形 |
曲面 | surface | 核心對象,將數(shù)據作為平面上點的高度創(chuàng)建的二維矩陣數(shù)據描述 |
文本 | text | 核心對象,用于顯示字符串與特殊字符 |
組合對象 | hggroup | 坐標軸子對象,同時操作多個核心對象 |
每個具體對象都有一個"與生俱來、終生不變"的獨特"身份",即句柄(Handle)。句柄是儲存圖形對象唯一規(guī)范識別符,不同對象的句柄不可能重復和混淆。
所有對象都有一組定義和刻畫其外貌和性狀的屬性。屬性由兩部分組成:屬性名和屬性值,即屬性二元對。在創(chuàng)建或修改屬性的指令中,屬性名和屬性值總是成對出現(xiàn)。
屬性名是英文詞組字符串。該英文詞組每個單詞第一個字母大寫,而單詞間沒有空格,例如'LineStyle','ColorMap'等。這樣書寫屬性名的目的是便于閱讀。至于在指令中援引屬性名時,為用戶輸入方便,Matlab采取了兩個措施:第一,不分字母大小寫,都同樣識別;第二,只要不引起歧義,屬性名不必全寫。比如'lines'就代表'LineStyle'。
不同的屬性值將使對象具有不同的表現(xiàn)。
Matlab每個對象的屬性都有十幾種,但是創(chuàng)建對象時不必把所有屬性全部加以定義。因為倘若用戶不對某個屬性加以定義,Matlab總會自動地給對象的每個屬性賦予"出廠定義"的屬性值。當然,用戶如果希望創(chuàng)建具有個性的圖形,那么就可以通過某些屬性進行定義。浮泥繪制過程中,有關figure對象的顏色地圖,某些曲面透明度等,這些都需要自己進行定義。
除根對象外,所有圖形對象都由與之同名的指令創(chuàng)建。對象創(chuàng)建指令的名稱和含義見表9.2.1。這些指令都是Matlab的內建函數(shù)。每個指令在創(chuàng)建對象的同時,還可返回該函數(shù)的句柄。
每個底層函數(shù)只能創(chuàng)建這11個圖形對象中的一個,并將它們置于適當?shù)母篙厡ο笾小?/p>
表5-2 建立圖形對象命令、功能及調用格式舉例
指令名 | 功能 | 調用格式舉例 |
figure | 創(chuàng)建圖形窗 | h = figure(n)n為整數(shù),打開或創(chuàng)建第n號圖形窗 |
axes | 創(chuàng)建軸 | h = axes(n) 定義坐標軸 |
line | 創(chuàng)建線 | h = line(x,y,z)繪制向量x、y、z確定的直線 |
rectangle | 創(chuàng)建長方形 | h =rectangle('position',[x,y,w,h],'curvature',[xc,yx]) x、y為左下角頂點坐標,w、h為長方形的寬和高;xc、yc曲率 |
patch | 創(chuàng)建塊 | h = patch('face',fac,'vertices',vert) vert為頂點矩陣,fac為定義多邊形的頂點序號矩陣 |
image | 創(chuàng)建圖像 | h = image(x) x為圖像數(shù)據矩陣 |
text | 創(chuàng)建字 | h = text(x,y,'string')x、y指定字符串string標注位置 |
light | 創(chuàng)建光照 | h =light('Position',[1,0,0]) 設置入射光的方向。它影響面、塊對象的渲染 |
uicontrol | 創(chuàng)建用戶界面控制 | h = uicontrol('property',value)property/value 指定界面的控制類型 |
uimenu | 創(chuàng)建用戶界面菜單 | h = uimenu('property',value)property/value 指定圖形窗口上方的菜單形式 |
5.3Matlab浮泥剖面圖形繪制
5.3.1三維圖形的數(shù)據準備
在matlab中,除根屏幕外,所有圖形對象都由與之同名的指令創(chuàng)建。有關各種三維繪圖的函數(shù)和其功能,主要有以下幾種:
圖5-3 繪制三維圖像主要函數(shù)及其功能
三維繪圖函數(shù) | 函數(shù)主要功能 |
contour | 二維等值線圖 |
contour3 | 等值線圖 |
fill3 | 填充的多邊形 |
mesh | 網格圖 |
meshc | 具有基本等值線圖的網格圖 |
meshz | 有零平面的網格圖 |
pcolor | 二維偽彩色繪圖 |
plot3 | 直線圖 |
quiver | 二維帶方向箭頭的速度圖 |
surf | 曲面圖 |
surfc | 具有基本等值線圖的曲面圖 |
surfl | 帶亮度的曲面圖 |
waterfall | 無交叉線的網格圖 |
要使浮泥運動情況形象的表達出來,主要使用surf函數(shù)。其主要功能是根據x,y,z的三個二維矩陣在三維直角坐標系中繪制曲面。
調用函數(shù)的基本格式為:surf(x,y,z,v)
這里參量的維數(shù)同作圖維數(shù)關系與二維作圖時關系類似。因為是三維圖作圖,所以變量都是二維矩陣且x,y,z,v大小必須一致。
其中x,y,z三個變量為曲面坐標參量。v是該點對應顏色映像矩陣ColorMap中顏色的序號,有關ColorMap顏色的設置,在5.4節(jié)有詳細的說明。
曲面繪制時候,整個曲面是由一個個面片拼接而成,而每個四邊形面片是由四個三維空間坐標中的角點組成的,如圖5-2所示。例如x,y,z全部為為16×16的矩陣時,曲面角點共有256個,每個點的坐標根據x,y,z矩陣中對應元素的值來決定,即x(i,j),y(i,j),z(i,j)分別為同一個點(i,j)的三個坐標分量。四個角點組成面片時,點取自矩陣中相鄰的四個點,即矩陣中序號為(i,j),(i+1,j),(i,j+1),(i+1,j+1)四個點會組成一個面片,如圖5-3所示。
圖5-2 Matlab中surf函數(shù)繪制曲面中的角點和面片
(i-1,j-1) | (i-1,j) | (i-1,j+1) | (i-1,j+2) |
(i,j-1) | (i,j) | (i,j+1) | (i,j+2) |
(i+1,j-1) | (i+1,j) | (i+1,j+1) | (i+1,j+2) |
(i+2,j-1) | (i+2,j) | (i+2,j+1) | (i+2,j+2) |
圖5-3 某個矩陣中四個角點組成一個面片
Matlab為方便繪制曲面專門提供了meshgrid函數(shù),它可以把向量x和y自動擴充為二維矩陣。例如:[X,Y] =meshgrid(-2:1:2, 0:1:2) ,此命令作用的就是把行向量:
,
擴充為兩個二維矩陣:
,
其中矩陣的行數(shù)由y向量的元素個數(shù)決定,列數(shù)由x向量的元素個數(shù)決定。這樣,四個點相連接組成面片時,矩形中相鄰的四個點在三維空間中的xoy平面投影也是相鄰的。避免了由點連接成面片時候出現(xiàn)交叉重疊的情況。
5.3.2圖形的透視、鏤空
每個surf函數(shù)創(chuàng)建的曲面對象,都具有'FaceAlpha'的屬性來控制曲面上每個面片的透明度。通過對曲面屬性'FaceAlpha'的調整,可以讓某個曲面對象具有透明效果。'FaceAlpha'屬性值在0~1之間進行變化,分別代表完全透明和不透明效果。每個曲面對象創(chuàng)建時,該屬性值默認取值為1,即不透明。通過set命令設置'FaceAlpha'在0~1之間時,就可以使得曲面具有半透明效果。
通過對曲面透明度的調整,我們可以模擬出類似水體一樣的半透明效果的曲面,使得計算結果更加生動形象。下圖就是用Matlab制作的波浪爬坡的某一時刻圖像。代表水體自由表面的藍色曲面'FaceAlpha'的屬性值設置為0.9,表示地形的灰黑色曲面屬性值采用默認值??梢钥闯?,不同曲面的透明效果靈活的使用令畫面變得生動多彩。
圖5-4Matlab繪制波浪爬坡過程的某一時刻圖像
圖形的鏤空效果主要通過圖形輸入x,y,z數(shù)據操作,Matlab中nan(NotANumber)代表某些位置缺失的數(shù)據。Matlab處理缺失的數(shù)據時就會跳過或者其他處理,這個也是Matlab優(yōu)越于其他語言的表現(xiàn)之一。在繪圖中,Matlab處理坐標值中包含nan數(shù)據的方法就是把曲面包含此角點的面片去除掉。如圖5-5所示,若我們將16×16的二維矩陣x中(4,4)的元素設為nan,可見包含(4,4)的四個面片被全部抹去。
通過這種方法,我們可以設定各種形狀邊界的曲面,曲面在xoy平面的投影也不必為矩形。圖5-4中圓錐露出水面的效果也是通過設定角點坐標值為nan的方法實現(xiàn)的。
圖5-5Matlab繪制鏤空曲面效果
5.4圖形顏色繪制
5.4.1Matlab圖像類型簡介
Matlab的圖像類型分四種,分別為灰度圖、RBG圖、二值圖和索引圖,不同圖像類型存儲時的數(shù)據格式是不同的。
灰度圖像是一個數(shù)據矩陣Gray,Gray中的數(shù)據均代表了在一定范圍內的圖像灰度值。RGB圖像即真彩圖像,在Matlab中存儲為m×n×3的三維數(shù)據矩陣。數(shù)組中的元素定義了圖像中的每一個像素的紅、綠、藍顏色值。二值圖與灰度圖像相同,只需要一個數(shù)據矩陣,每個像素只取兩個灰度值(0或1)。索引圖包括一個索引數(shù)據矩陣index_Matrix和一個顏色映像矩陣ColorMap。其中ColorMap是一個包含三列、若干行的數(shù)據陣列,其中每個元素的值均為[0,1]之間的雙精度浮點型數(shù)據。ColorMap矩陣 的每一行分別表示紅色、綠色和藍色的顏色值。在Matlab中,索引圖像是從像素值到顏色映射表值的"直接映射"。像素顏色由數(shù)據矩陣index_Matrix作為索引指向矩陣ColorMap進行索引,例如,值1指向矩陣ColorMap中的第一行,值2指向第二行,以此類推。
5.4.2浮泥后處理顏色表示方法
Matlab中,每個figure都是使用索引圖的方法來表示顏色,在surf命令中,第四個參量v就是儲存每個點顏色的索引值的矩陣。在Matlab繪圖顏色映射過程中,首先設置索引值的上限和下限。若用戶缺省該設置,就把v矩陣中最大值和最小值自動設置為索引值的上限和下限。然后把索引值上限和ColorMap第一行RGB值表示的顏色對應,索引值下限和ColorMap最后一行表示的顏色對應。最后按照一定對應關系(線性或者非線性),給每個v的值確定其對應的顏色。
ColorMap中表示顏色 | v值 |
圖5-6 索引圖顏色對應方法
根據浮泥的性質可知,浮泥與水和底床的密度有顯著區(qū)別。因此,我們可以用密度物理量來作為顏色索引值。根據相關文獻,連云港地區(qū)浮泥密度為1.03g/cm3至1.30g/cm3之間。因此,我們將索引值上線定為0.99,下限為1.35。介于0.99至1.03之間時,用漸深的藍色表示海水密度變化,在1.03至1.30之間時,用漸深的土黃色表示浮泥密度變化,最后大于1.30時,用單一的深咖啡色表示底床。
表5-4 不同密度物體顏色對照表
對應密度值(kg/m3) | 對應顏色RGB值 | 顏色 | |
最小密度水體 | 0.99 | [124,234,255] | |
最大密度水體 | 1.03 | [0,136,144] | |
最小密度浮泥 | 1.03 | [225,186,83] | |
最大密度浮泥 | 1.30 | [224,155,0] | |
最小密度底床 | 1.30 | [106,51,21] | |
最大密度底床 | 2.65 | [106,51,21] |
當確定索引值上下限之后,線性對應是確定各個索引值對應顏色最簡單的方法。設置ColorMap為64行,那么計算第行對應的索引值公式為:。
這樣,我們便知道每行顏色應該對應的是有多大密度的水體、浮泥或底床了。
下面計算ColorMap每行顏色RGB數(shù)值,根據索引值大小等于密度我們知道,前8行表示的是密度逐漸增大的海水顏色,選定密度較小海水顏色為水藍色,RGB值為[124,234,255],密度較大的海水顏色為藍綠色,RGB值為[0,136,144]。中間6個值用兩個RGB數(shù)值對應項進行線性插值,這樣,我們便得到ColorMap中所有海水顏色的RGB數(shù)值,下圖顯示了海水密度由淺變深時候顏色變化。
圖5-7 海水密度由淺變深時候顏色變化
浮泥和底床在ColorMap顏色的RGB數(shù)值設置同理。
愛華網![[轉載]Matlab繪圖基本介紹 matlab繪圖函數(shù)](http://img.aihuau.com/images/02111102/02122228t0159220aa3b3269860.jpg)




